首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[原创]HC908GP32的C语言编译Metrowerks可真多坎

[原创]HC908GP32的C语言编译Metrowerks可真多坎

这几天在把老汇编改成C语言,可没有想到Metrowerks中C语言的位编译格式差点让我改行了!!
大家也许不信。那个老汇编是个很漂亮的程序,改成C也不难,可没有想到前辈省吃简用的好习惯让我的程序跑飞了。到今天才发现是位操作的问题,他定义了1个字节的变量,每个bit都是一种标志。
如以下例子:
Flag &=~ Bit0;
......
Flag &=~ (Bit1|Bit2|Bit3|Bit4);
......
Flag |= Bit7;
......
if(Flag & Bit0)****;

因为变量有8种标志位,操作非常频繁,我把它放在0页,可其中的1Bit就是总错,换成一个新变量就OK了,甚至放在另一个变量中情况也会好转。
而自己定义的标志要写成头文件中的那样,要不操作变量时数值会自己变化。原因呢,很可恶呀,就算编译后的汇编语句(看起来)都是对的,但只是这种编译环境认为你的位操作方式是错的,程序就会FLY。
Flag &=~ (Bit1|Bit2|Bit3|Bit4);汇编后是先读Flag再AND;
应该改成
Flag &=~ (Bit1);就成了BCLR 1,(Flag)
Flag &=~ (Bit2);
Flag &=~ (Bit3);
Flag &=~ (Bit4);
你看多麻烦,当然你愿意也行。
空间允许的话,还是用一个变量定义一种标志吧!!
就是说大家尽量不要省着用呀55555555555555555
请促进消费!!买房子吧,买车子吧,买贷款,,,


[em11]
学后而问
返回列表