新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440開發工具realview MDK4.22使用入門

        S3C2440開發工具realview MDK4.22使用入門

        作者: 時間:2016-11-19 來源:網絡 收藏
        目前仍然有許多人在使用ADS1.2編譯ARM9的程序,這款編譯器實屬經典,但是已經多年停止更新、維護了。這篇文章主要講解ARM公司受夠Keil之后力推的一款編譯器MDK。

        MDK的使用上和ADS1.2有很多相似之處,從ADS1.2過渡到MDK也是非常容易的一種事情。

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

        還是無圖無真相。

        <一>這是MDK打開的情形,當然我這已經是一個建立好的工程。如果一開始是空的,按圖點擊project-->new uvision project即可。



        <二>

        關于工程名的命名,修改,添加文件等與其余的編譯器無異,相信大家都會的。這里重點講解魔術棒的配置


        <三>

        可以看到介面上有個Target Option選項。這才是該編譯器強大的所在。


        設備選擇,大家根據實際情況選擇即可,我這里選擇的是S3C2440A


        時鐘部分為模擬調試的時鐘,默認即可。

        操作系統部分,MDK提供了一個實時操作系統,便于大家開發RTOS上的程序,如果不需要,可以選無。

        可以選擇ARM或者Thumb代碼模式。

        為只讀內存的區域配置:有內部的ROM on-chip,有外部的ROM off-chip這個根據自己實際情況選擇。S3C2440A無片上可以利用的ROM,但是可能會外接ROM,比如

        Nor或者NAND。為你的目標板上有的資源打上default勾選。

        為讀寫內存區域配置:有內部的RAM on-chip,有外部的RAM off-chip這個也是根據自己實際情況配置。S3C2440A有內部RAM,為0x40000000的4K大小,NAND時候會被映射到BANK0。

        NOTE:::以上內存的區域配置是很靈活的,除了根據你自己的目標板實際配置外,還可以根據你的目的來配置,你可能需要將RAM也模擬成ROM,這樣便于調試等等。

        這里選項很簡單,默認沒有勾選Create HEX File,可以勾選上。也可以根據需要生成目標庫。也可以為目標文件單獨選擇存放文件夾,使工程文件清晰。

        List也可以選擇存放的目錄。可以選擇輸出的內容文件。比如內存映像文件,符號文件,調用關系,交叉引用,生成文件的內存信息,未使用的section信息等。

        便于查看。

        選項也很清晰。重點是bulid后的用戶程序。一般是用來將自己生成的axf轉換為bin文件,和ads1.2很像。但是它比ads1.2至少強在一地方。

        大家可能注意到--bincombined--bincombined_padding=1類似的命令,該命令存在的原因跟scatter文件有關。

        scatter文件描述了如何組成自己的輸入段,形成加載域,執行域,最終按照要求得到自己想要的內存布局文件。

        BUT如果存在兩個及其以上的加載域的話,生成的二進制文件會有多個,雖然我們可以自主的燒寫到我們的目標存儲區,但是這無疑增加了我們的負擔!

        在ADS1.2中,是沒有直接的辦法將多個bin文件連接在一起的,只能利用H-JTAG類似的工具,將多個bin文件轉為HEX文件,拼接起來,再轉為bin,有些麻煩

        但是MDK下,直接利用這個命令即可完成將多個bin連成1個bin文件,是很方便的。這樣scatter文件的多個加載域就不是問題了。


        沒什么特別的,注意默認優化級別的選擇對應是level2。警告的話,可以選顯示全部警告信息。

        自己工程的頭文件路徑也要直接添加好,不然找不到。


        與上一個選項卡類似。


        linker選項也是十分重要的。默認的不是這個圖的樣式,是勾選了“利用目標選項卡里的內存布局”安排RO RW段。

        一般情況下,這樣的確是可以的,但是如果自己有特殊的要求,是需要自己寫scatter文件的。這個圖就是我自己寫的一個scatter文件,未利用默認選項,所以未勾選。

        微控制命令下可以自己寫上對應的命令,比如這里的指定入口等等。


        左右對稱的選項,重點是右邊,雖然模擬也很強大,但是大家一般都是有目標板的,所以還是硬件調試的手段。

        可以選用的有Jlink Ulink等等,我手頭有個山寨的Jlink,所以選擇Jlink了。

        下面的勾選框表明將自己要調試的文件下載到startup里,以及是否直接運行到main()函數。這個要根據實際需要來。

        很可能你并不想利用MDK提供的庫功能,就如同你不想使用ADS1.2提供的庫功能一樣,不使用main函數,那么就不存在run to main()。

        很可能你是用SDRAM模擬ROM,在SDRAM中調試代碼,也可能不需要將代碼下載到starup。

        抑或你在SDRAM中調試,使用了調試腳本,調試腳本里已經做了這2項工作,也是不需要勾選的,可以自己逐步嘗試。

        應用選項卡,是針對Flash應用的。可以選擇flash燒寫工具。


        點擊設置可以進入Flash選擇,如果不存在自己的flash型號,可以自己添加算法,MDK手冊有模板教你一步一步添加自己的Flash算法,比如nor nand之類的都可以添加。

        Ramfor Alg是用于燒寫算法的空間,MDK手冊是說一般用內部RAM。

        重點的都講完了,老規矩,以點亮LED結束這篇文章吧。

        s3c2440.s

        areainitcode,code,readonly
        preserve8
        code32
        entry
        export__start
        __start


        ldrsp,=1024*4
        importdisable_watch_dog
        importmemsetup
        importcopy_2th_sdram
        importMain


        bldisable_watch_dog
        blmemsetup
        blcopy_2th_sdram
        ldrsp,=0x34000000
        ldrpc,=Main


        halt_loop
        bhalt_loop


        end

        led.c文件:

        #include"S3C2440.h"
        #define gpbcon (*(volatile ulong *)0xa0000010)
        #define gpbdat (*(volatile ulong *)0xa0000014)


        static __inline void wait(ulong dly);






        #define GPB5_out (1<<(5*2))
        #define GPB6_out (1<<(6*2))
        #define GPB7_out (1<<(7*2))
        #define GPB8_out (1<<(8*2))




        static __inline void wait(ulong dly)
        {
        for(;dly > 0; dly--);
        }


        int Main(void)
        {
        ulongi = 0;

        gpbcon= GPB5_out | GPB6_out | GPB7_out | GPB8_out;
        while(1)
        {
        wait(3000000);
        gpbdat= (~(i<<5));
        if(++i== 16)
        i=0;
        }
        }

        內存布局scatter文件:

        ;*
        ; * Scatter-Loading Description File generated by uVision *
        ; *


        LR_ROM1 0x00000000 0x00200000 { ; load region size_region
        NANDFLASH 0x00000000 0x00200000 { ; load address = executionaddress
        *.o (initcode, +First)
        .ANY (+RO)
        }
        }


        LR_ROM2 2048 2048 {
        SDRAM 0xb0004000 {
        led.o (*)
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鱼台县| 南京市| 十堰市| 乌鲁木齐县| 安达市| 泽库县| 商河县| 麦盖提县| 日照市| 申扎县| 天水市| 舒城县| 阳江市| 马关县| 大竹县| 太康县| 临澧县| 饶平县| 阿拉尔市| 石景山区| 汽车| 灵寿县| 武隆县| 台州市| 新疆| 华池县| 高唐县| 治多县| 固镇县| 乌苏市| 长岛县| 丹巴县| 科技| 新密市| 灵武市| 东海县| 北海市| 霍城县| 霍州市| 兰西县| 泰州市|