写51程序大家现在都用KEIL。本人于硬件工程师,偶尔客串一下软件工程师。在这个过程中,发现一些软件工程师在写C51的时候的总是喜欢使用像ARM或X86的软件风格。在这里有些感想想和大家分享一上。
1. 在使用C51的时候,要对其使用器件的资源有所了解。SP指针一般情况下,需要重新设置,不能让系统自动设置,当时根据代码情况,需要进行调整,保证堆栈不能溢出。很多时候,代码本身并没有什么问题,程序跑着跑着就飞了,问题就是由于SP的设置引起的。
2. 全局变量,尽量不要在声明的时候赋值,并且并不是所有声名的全局变量都需要赋值。需要赋值的全局变量要通过函数赋值。说到这可能就会有人拍砖了。且往下看。KEIL编译器必竟是一个软件,只要是软件就有可能存在BUG。KEIL在编译的时候,会对一些内存和变量进行初始化。当你使用的大量的全局变量并且在声名的时候进行赋值的话,KEIL编译出来的初始化代码会增加,有时候会导致内存溢出,但编译器并不报任何错误。当烧录程序后,单片机就是不工作。使用软件和硬件仿真也是一样,程序会莫名其妙的跑飞了。当你把全局变量的初始化工作放到程序中去执行的话,可以解决这个问题。并且你的程序代码量会变少,不但节约了资源,也保证了系统的可靠性。
3. 尽量不要将一个复杂的计算用一条语句完成,而是要拆成多个。写程序大家都希望看上去完观,可读性好,但是常常事与愿违。写C51常常发生这类事故。计算前参与计算的所有变量的数据都是对的,而实际计算出来的结果确是错误的。这时候就需要考虑拆分计算。(注:这里说的情况是在没有数据类型错误的情况) |