新唐单片机代码评审总结

共 1142字,需浏览 3分钟

 ·

2020-12-23 08:13

昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写单片机的同学们有帮助。


我这个同事写的代码非常优秀,具体代码怎么写,就不能秀出来了。


单片机的一些存储空间

data     --->     可寻址片内ram      

bdata   --->     可位寻址的片内ram      

idata    --->     可寻址片内ram,允许访问全部内部ram      

pdata   --->     分页寻址片外ram (MOVX @R0) (256 BYTE/页)      

xdata   --->     可寻址片外ram (64k 地址范围FFFFH)      

code    --->     程序存储区 (64k 地址范围),对应 MOVC @DPTR


Program Size: data=12.0 xdata=120 code=3349


— —const 的使用

我们一般定义一个全局变量,这个变量会占用RAM的空间大小,如果我们把这个变量定义为const,就可以把这个变量空间从RAM定义到code空间,以此来节省内存空间大小。


我们实测后发现,const变量不仅占用RAM空间,也会增大code的大小,大家在使用的时候可以实测试试。


没有变到code空间的原因大概是ROM没有运行程序的能力


经常听到程序代码可在NOR Flash上运行,而不能在NAND Flash上运行的说法,关于这个说法容易给人造成误解,因为CPU执行代码分为取指、译码、执行三个步骤,所以真正运行代码的还是CPU,对于NOR Flash可以直接运行代码的说法,指的是CPU可以直接通过地址总线从NOR Flash上完成取指的操作。



— —尽量使用全局变量

函数的局部变量对占用栈空间,如果局部变量很多的话,以后出现问题都不好排查,使用全局变量可以使用code空间,确保栈空间足够让程序运行,确保不要在运行的时候出现栈空间不够。


——尽量开启看门狗

对于手机来说,看门狗不是很重要,但是对于单片机来说,看门狗非常重要,看门狗可以保证单片机死机后可以恢复运行。


——声明为char类型,实际上可能是unsigned char

这个是编译器的锅,大家如果发现程序不按自己想法运行,可以留意下这个。


推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报