新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 做ARM裸機C與程序時的注意事項

        做ARM裸機C與程序時的注意事項

        作者: 時間:2016-11-21 來源:網絡 收藏
        在設置好芯片類型,弄好芯片寄存器的宏定義后,接下來的編程就是走C的標準程序設計了。想法正確,但是ARM程序設計與以前大家學的8051是有差別的。
        以前在KeilC51里面,在建立完工程之后,Keil會提示是否加入startup.a51的文件,這個文件用來初始化51芯片的各個硬件資源。如果不加,往往程序會運行出錯。
        對于ARM裸機,也一樣,只不過RVDS編譯器不會給你提供初始化的文件,都要自己寫。一般工程文件為匯編和C的混合。因為現在的學習還不夠深入,所以目前也只清楚一些簡單的程序設計框架。
        例如,一般在工程文件中加一個init.s的匯編文件。里面僅有一句用于跳轉的匯編語句。假如你的C語言的入口函數為main,那么這句語句就是: BL main
        init.s的寫法,一般為如下;
        AREA init , CODE ,READONLY //段名,很重要,因為在設置起始段時有用
        GLOBAL start //應該設置為全局的,在設置入口點的時候有用,否則編譯器找不到
        IMPORT main //由于main函數是外部函數,所以要用import來聲明
        ENTRY
        start
        BL main //跳轉到了C語言中的main函數了,也可以是其它函數
        End
        寫好“引導”匯編程序及C語言程序后,還要進行設置。在Edit菜單下的 Debug setting 或者 Release setting(關鍵看你設置的是調試還生成)的
        link選項中選擇RealView Linker
        設置好自己程序的程序的開始的源地址后,再設置Layout菜單下的
        Place at begining of image(放置鏡像的起始文件)
        這里用的是目標文件,用于鏈接時放在鏡像文件的最開始,設置如下。意思是將init.o目標文件的init段放在鏡像文件的最開始。
        這些設置完成之后,還必須設置入口點,RealView Linker里面可以看到下面的命令行,加入
        --entry=start 就可以了,現在編譯鏈接后,在Axd里面就可以通過Jtag調試了。

        如果start在匯編中不是設置的global,那么鏈接的時候,鏈接器會警告無法找到入口。
        也可以不用加匯編作“引導”,但是在設置的時候,你要清楚C轉為匯編后,你要用的段在哪里,入口函數在哪里。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 扎鲁特旗| 太康县| 连云港市| 尼木县| 新丰县| 广东省| 建昌县| 弥勒县| 东平县| 江油市| 新竹市| 黔江区| 惠来县| 棋牌| 新河县| 青岛市| 齐齐哈尔市| 富蕴县| 谢通门县| 景谷| 玉树县| 南充市| 舟山市| 宁安市| 宕昌县| 灌阳县| 加查县| 桐城市| 华蓥市| 元朗区| 仁化县| 沙田区| 盘山县| 德化县| 荆州市| 湄潭县| 江达县| 清镇市| 深州市| 阳原县| 南宫市|