|
ARM處理器與51單片機在編寫程序上有什么區別嗎?
(1) int變量 在51 占2個字節;在ARM占4個字節
(2)結構體對齊 在51是按照一個字節對齊; 在ARM是按結構體默認對齊規則對齊
(3)字節在內存的排列順序 在51是大端 ; 在ARM大多數是小端,但有的可以大小端選擇。
在大端存儲格式中,字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中
在小端存儲格式中,低地址中存放的是字數據的低字節,高地址存放的是字數據的高字節
(大端,小端的堆棧方向不同,大端是向上生長,小端是向下生長)所以大端初始化的SP往往是地址低端,而小端初始化的SP往往是地址高端
(4)函數體中的局部變量,在C51中存放于一個可覆蓋的(數據)段中的,而ARM是存放于堆棧中的。這樣在(比如PC,比如ARM),函數重入的問題一般不是要特別注意的問題.只要你沒有使用static變量,或者指向static變量的指針,一般情況下,ARM中函數自然而然地就是可重入的.但C51不一樣,如果你不特別設計你的函數,它就是不可重入的.
(5) ARM的指令長度(或指針)一個字(32位),單片機指令長度(或指針)不定(1-3字節)
(6) ARM的空間統一編址,單片機的空間獨立編址
(7) ARM沒有bool變量,單片機可采用bit變量
ARM中可采用 typedef enum(false,true) bool;
賦初值的ROM變量定位方法:
ARM方法:
const u8 bootsoftver __at (0x8001000) =BOOT32_SOFTVER;
MC51方法:
1.新建bootver.c文件
unsigned char code version=BOOTVERSION; //BOOT 固件版本
2.在BL51 Locate -- ?CO?BOOTVER(0xFD00)
主程序和中斷調用同一函數
ARM編譯后不顯示告警;函數可重入
C51顯示告警信息WARNING 15 (MULTIPLE CALL TO SEGMENT);函數不可重入
想要了解嵌入式、物聯網相關技術的可以聯系宋工企鵝號三五二四六五九零八八
Tel:173--1795--1908
免費試聽C語言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學習的你和我聯系預約就可以免費聽課了。
|
|