当前位置:首页 > 芯闻号 > 充电吧

 

    本人写程序已有很多年,写程序时就相当注意程序格式,但我还是栽在这上面了.

    本人程序出现debug,花了很多天都没找到,最后使用最笨的办法,用studio进行每条指令跟踪,终于发现问题所在.

    由于本人是汇编和C混合编程,为充分保持定义的一致辞性,我尽量使用相同的.h文档,这种方法是对的,只是我的汇编在编译时要注明是assember-with-cpp.

我的汇编程序如下:

......
#define   VOICE   1      ;this is voice address
......

        ldi   r30, VOICE+1
......


    一般我们不会认为这是错误, 很显然,";"是汇编的注释, #define是C语言的预处理,虽然在汇编中使用C的预处理能带来很多好处,但我们还是应该尽量不要纠缠到一起,这就是编程风格问题.上述我的错误就是这样,C语言的预处理器会将VOICE换成"  1      ;this is voice address", 注意,C是不懂";"注释的,最后编译的结果就是
         ldi  r30, 1 
而不是我所期望的ldi  r30,2
而且编译程序不会报告任何错误,从语法上它是正确的.而且在debug时带来的错误是灾难的,因为它很难找到,人的特点就是不会去注意"理所当然是正确的"东西.

其实我只要将上述的汇编";"注释换成C的"//"注释就什么问题都没有了,在一行中保持同样的C风格是多么的重要啊. 
  

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭