单片机位数编程差别
单片机位数的不同对于编程来说除了寄存器多谢,麻烦些,没有什么不同了吧?
全部回复(37)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
@山东大汉
8位单片机,典型的是51系列的,再高级点用AVR、pic的,功能方面,似乎都不会很复杂,一般可能是控制类的多一下。一般不跑嵌入式OS。16位的单片机,我接触的主要是MSP430,感觉16位的单片机比较尴尬,高不成低不就,要求低一点,8位MCU就够,高级点不如用32位MCU。一般不跑嵌入式OS。16位就不说了32位的,就高级点了,一般能跑嵌入式OS,例如ucos2,ucos3,uclinux等等,能做更多复杂的功能。用OS和不用OS的话,编程的思路差异比较大。功能一般有面向控制的,也有简单消费类电子的。
32位在某些情况下需要对齐,对datafalsh读写时地址要是4的整数倍
编程方面如果RAM足够考虑到效率问题尽可能用32位变量,不过貌似编译器会根据情况自动把char换成int32
0
回复
提示
@山东大汉
32位在某些情况下需要对齐,对datafalsh读写时地址要是4的整数倍编程方面如果RAM足够考虑到效率问题尽可能用32位变量,不过貌似编译器会根据情况自动把char换成int32
8位16位32位的区别就在于地址位和数据位位宽不同。其实都一样。比如8位的51单片,网上同样有人在上面移植ucos。16位的如430就更不用说了。32位的目前大多数是arm架构的,与前面的8位、16位的指令集不同。除掉前面的boot会用一小段汇编(主要是来clear寄存器,初使化堆栈--有些书上也叫栈)其它大多用C.只要用对应架构和平台的编译器就可以了。故而作为一个c的RD,不需要考虑太多。
0
回复
提示
位数不同,一个指令内处理的数据量也不同,比如你在八位机上想实现32位乘法,就得设计一个算法才能实现,而在高于32位的机器上,只需要赋值,计算就可以了。
位数的不同也意味着直接寻址空间的不同,比如说32位的cpu(不考虑pae),其可直接寻址的能力是4G,而真正的8位机那就只有256字节了(幸亏很多8位机的地址总线是16位的。。。),寻址能力的扩大允许在同一个地址空间之内有更多的程序并存,可以直接操作更多的内存,对处理能力的提升是巨大的。而如果你能够寻址的能力有限,可要处理很多的事情,就得考虑某些库的动态加载和链接,对于嵌入式来说还是有点痛苦。
对于编译器来说,不用位数的cpu意味着数据长度的不同,比如说在16位机多数默认int为16位数,而在32位机上默认为32位数,这也就是很多编程规范里面要求尽量使用uint32或者uint16这样的数据定义,而避免使用int的原因。
大小端的差别,位数高于8的机器,你就要考虑大小端差异了,这是件头疼的事。
还有一个要说的是寻址模式,32位的RISC类型cpu多数要求在寻址时做到边界对齐,而8位机才完全没必要考虑这个。
其他还有很多差别,一时无法完全描述出来,还得在实践中慢慢体会。
0
回复
提示