新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM與51編寫程序的區別

        ARM與51編寫程序的區別

        作者: 時間:2016-11-09 來源:網絡 收藏
        測試環境:KEIL

        本文引用地址:http://www.104case.com/article/201611/317743.htm

        (1) int變量 在51 占2個字節;在ARM占4個字節

        (2)結構體對齊 在51是按照一個字節對齊; 在ARM是按結構體默認對齊規則對齊

        (3)字節在內存的排列順序 在51是大端 ;在ARM大多數是小端,但有的可以大小端選擇。

        在大端存儲格式中,字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中

        在小端存儲格式中,低地址中存放的是字數據的低字節,高地址存放的是字數據的高字節

        (大端,小端的堆棧方向不同,大端是向上生長,小端是向下生長)所以大端初始化的SP往往是地址低端,而小端初始化的SP往往是地址高端

        (4)函數體中的局部變量,在C51中存放于一個可覆蓋的(數據)段中的,而ARM是存放于堆棧中的。這樣在(比如PC,比如ARM),函數重入的問題一般不是要特別注意的問題.只要你沒有使用static變量,或者指向static變量的指針,一般情況下,ARM中函數自然而然地就是可重入的.但C51不一樣,如果你不特別設計你的函數,它就是不可重入的.

        (4) ARM的指令長度(或指針)一個字(32位),單片機指令長度(或指針)不定(1-3字節)

        (5) ARM的空間統一編址,單片機的空間獨立編址

        (6) 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);函數不可重入



        關鍵詞: ARM51編寫程

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 达州市| 雷山县| 大埔区| 凌云县| 定日县| 孟村| 石屏县| 东至县| 江源县| 宣汉县| 怀远县| 远安县| 甘德县| 吕梁市| 石柱| 肇东市| 三亚市| 宁南县| 新营市| 睢宁县| 石楼县| 军事| 肇州县| 无锡市| 娄烦县| 荃湾区| 瓮安县| 宁都县| 卢湾区| 徐水县| 房山区| 岳阳县| 绍兴县| 蓝田县| 中方县| 阿克陶县| 大庆市| 隆子县| 临汾市| 合肥市| 博兴县|