搜索
bottom↓
回复: 17

PIC汇编转C时 发现C编译器不给力

[复制链接]

出0入0汤圆

发表于 2019-4-24 09:34:31 | 显示全部楼层 |阅读模式
本帖最后由 woshigeshuai 于 2019-4-24 09:45 编辑

                C程序
                ram20^=4;
                if((RB0==1) && (ram20&BIT(3)==0))
                {
                        if(ram29<0X9A)
                                ram29++;
                        if(ram29>=0x9c)
                                ram29--;                        // need test
                        ram20|=BIT(3);
                }
               
                实际运行的,第二个判断条件居然没有
                 movlw   4
                xorwf   byte_DATA_24, f

                btfss   PORTB, RB0
                 bcf     byte_DATA_24, 3
                movfw   byte_DATA_29
                xorlw   9D
                bnz     loc_CODE_23F

                ; ---------------------------------------------------------------------------------------
                测试使用下面的方法可以

                ram20^=4;
                if(RB0==1 && ram203==0)
                {
                        if(ram29<0X9A)
                                ram29++;
                        if(ram29>=0x9c)
                                ram29--;                        // need test
                        ram20|=BIT(3);
                }

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出20入70汤圆

发表于 2019-4-24 09:38:24 | 显示全部楼层
== 优先级高于 &
所以,编译器给优化掉了

出0入0汤圆

发表于 2019-4-24 09:54:18 | 显示全部楼层
ram20&BIT(3)要加括号
否则变成
ram20 & (BIT(3)==0)

出0入0汤圆

发表于 2019-4-24 10:21:03 | 显示全部楼层
能加括号就不要省:if ((RB0 == 1) && ((ram20 & BIT(3)) == 0))

出0入0汤圆

发表于 2019-4-24 10:25:46 来自手机 | 显示全部楼层
哈哈,除非到大师级自信,先不要怀疑编译器和CPU有bug

出90入0汤圆

发表于 2019-4-24 10:33:40 | 显示全部楼层
差评,
省了许多 () {}

出0入0汤圆

发表于 2019-4-24 10:43:01 | 显示全部楼层
优先级记不好,如果不想查,就加括号!

出0入0汤圆

 楼主| 发表于 2019-4-24 11:37:55 | 显示全部楼层
rqiang 发表于 2019-4-24 10:21
能加括号就不要省:if ((RB0 == 1) && ((ram20 & BIT(3)) == 0))

测试有效,看来是自己技术没到家。以后括号要多加

出0入0汤圆

发表于 2019-4-24 11:39:19 | 显示全部楼层
我想知道楼主怎么将汇编转C的?
    难道是人工智能转换   

出0入0汤圆

 楼主| 发表于 2019-4-24 11:39:22 | 显示全部楼层
techbaby 发表于 2019-4-24 09:38
== 优先级高于 &
所以,编译器给优化掉了

感谢回复,刚看的时候没明白你的意思。后来明白了

出0入0汤圆

 楼主| 发表于 2019-4-24 11:40:02 | 显示全部楼层
lcw_swust 发表于 2019-4-24 09:54
ram20&BIT(3)要加括号
否则变成
ram20 & (BIT(3)==0)

谢谢,通过这次更加深了对括号的认知

出0入0汤圆

 楼主| 发表于 2019-4-24 11:40:42 | 显示全部楼层
z7001 发表于 2019-4-24 11:39
我想知道楼主怎么将汇编转C的?
    难道是人工智能转换

转的不多,人工处理。很多就搞不了

出0入20汤圆

发表于 2019-4-29 11:36:09 | 显示全部楼层
抨击C有问题的人,都发现是菜鸟。

出0入0汤圆

 楼主| 发表于 2019-4-29 12:34:43 | 显示全部楼层
mon51 发表于 2019-4-29 11:36
抨击C有问题的人,都发现是菜鸟。

是的,被括号坑过好多次,这一次还是被坑了

出0入30汤圆

发表于 2019-7-10 11:13:22 | 显示全部楼层
PIC的汇编写的多吗?
最近接触,发现很难写,指令有点奇扒
如查表等等,还是用C方便,但有些MCU的ROM空间又非常小,

出0入0汤圆

发表于 2019-7-10 11:32:55 | 显示全部楼层
nanfang2000 发表于 2019-4-24 10:25
哈哈,除非到大师级自信,先不要怀疑编译器和CPU有bug

有大师级的自信不够,还要有一点真正的水平。

哎,吐槽下:遇到太多人,一有问题,就说C编译器和CPU有bug,赶紧给他解决和赔偿...被指正出来,嘴巴比金刚石还硬死不承认.

出0入0汤圆

发表于 2019-8-26 16:39:25 | 显示全部楼层
ycheng2004 发表于 2019-7-10 11:13
PIC的汇编写的多吗?
最近接触,发现很难写,指令有点奇扒
如查表等等,还是用C方便,但有些MCU的ROM空间又非常 ...

PIC低端MCU系列是我见过汇编指令集最少的MCU(35条指令),程序存储长度还不是按8位来的。

出0入0汤圆

发表于 2019-10-22 22:16:41 | 显示全部楼层
wildcat7261 发表于 2019-8-26 16:39
PIC低端MCU系列是我见过汇编指令集最少的MCU(35条指令),程序存储长度还不是按8位来的。 ...

最少的只有33条指令,没有中断功能。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表