單片機位數(shù)編程差別
單片機位數(shù)的不同對于編程來說除了寄存器多謝,麻煩些,沒有什么不同了吧?
全部回復(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的整數(shù)倍
編程方面如果RAM足夠考慮到效率問題盡可能用32位變量,不過貌似編譯器會根據(jù)情況自動把char換成int32
0
回復
@山東大漢
32位在某些情況下需要對齊,對datafalsh讀寫時地址要是4的整數(shù)倍編程方面如果RAM足夠考慮到效率問題盡可能用32位變量,不過貌似編譯器會根據(jù)情況自動把char換成int32
8位16位32位的區(qū)別就在于地址位和數(shù)據(jù)位位寬不同。其實都一樣。比如8位的51單片,網(wǎng)上同樣有人在上面移植ucos。16位的如430就更不用說了。32位的目前大多數(shù)是arm架構(gòu)的,與前面的8位、16位的指令集不同。除掉前面的boot會用一小段匯編(主要是來clear寄存器,初使化堆棧--有些書上也叫棧)其它大多用C.只要用對應架構(gòu)和平臺的編譯器就可以了。故而作為一個c的RD,不需要考慮太多。
0
回復
@山東大漢
8位16位32位的區(qū)別就在于地址位和數(shù)據(jù)位位寬不同。其實都一樣。比如8位的51單片,網(wǎng)上同樣有人在上面移植ucos。16位的如430就更不用說了。32位的目前大多數(shù)是arm架構(gòu)的,與前面的8位、16位的指令集不同。除掉前面的boot會用一小段匯編(主要是來clear寄存器,初使化堆棧--有些書上也叫棧)其它大多用C.只要用對應架構(gòu)和平臺的編譯器就可以了。故而作為一個c的RD,不需要考慮太多。
32位單片機中uint 有4個字節(jié),8位單片機中 uint 只有2個字節(jié)
0
回復
位數(shù)不同,一個指令內(nèi)處理的數(shù)據(jù)量也不同,比如你在八位機上想實現(xiàn)32位乘法,就得設計一個算法才能實現(xiàn),而在高于32位的機器上,只需要賦值,計算就可以了。
位數(shù)的不同也意味著直接尋址空間的不同,比如說32位的cpu(不考慮pae),其可直接尋址的能力是4G,而真正的8位機那就只有256字節(jié)了(幸虧很多8位機的地址總線是16位的。。。),尋址能力的擴大允許在同一個地址空間之內(nèi)有更多的程序并存,可以直接操作更多的內(nèi)存,對處理能力的提升是巨大的。而如果你能夠?qū)ぶ返哪芰τ邢蓿梢幚砗芏嗟氖虑?,就得考慮某些庫的動態(tài)加載和鏈接,對于嵌入式來說還是有點痛苦。
對于編譯器來說,不用位數(shù)的cpu意味著數(shù)據(jù)長度的不同,比如說在16位機多數(shù)默認int為16位數(shù),而在32位機上默認為32位數(shù),這也就是很多編程規(guī)范里面要求盡量使用uint32或者uint16這樣的數(shù)據(jù)定義,而避免使用int的原因。
大小端的差別,位數(shù)高于8的機器,你就要考慮大小端差異了,這是件頭疼的事。
還有一個要說的是尋址模式,32位的RISC類型cpu多數(shù)要求在尋址時做到邊界對齊,而8位機才完全沒必要考慮這個。
其他還有很多差別,一時無法完全描述出來,還得在實踐中慢慢體會。
0
回復