使用supervivi+DNW下載MDK環境下2440裸機程序到SDRAM中運行

硬件開發環境:友善之臂mini2440

軟件開發環境:KEIL MDK(keil Uvision4)

聲明:本文章原始資料來源於網絡和自己的探索,若有侵權處請告知刪除~~

        當然了想跑裸機程序有以下幾種方式:1 將程序下到Nor Flash中  2將程序下到Nand Flash中  3將程序下到SDRAM中運行。對於第一種方式參考友善之臂提供的資料了,第二種方式參考這個鏈接http://blog.csdn.net/mybelief321/article/details/8957230,這種方式好處在於程序儲存起來了下次Nand Flash啓動就會自動執行了,但是我Nand Flash中已經燒好了內核啊等等,不想破壞它所以我更青睞第三種方式了。首先對於裸機程序使用MDK不管是代碼編寫還是調試都比較方便,再說了以前調過stm32的程序對這個也比較熟悉了。

       Nor Flash啓動進入supervivi後有個選項d,就是通過DNW下載程序到SDRAM中運行。我現在要做的工作就是在MDK下生成bin文件,然後利用supervivi的d選項來跑裸機程序了。在這期間碰到了些問題,後來也慢慢解決了,特此分享,有錯的地方還請指正。

       第一步:在MDK下創建一個工程,芯片選擇S3C2440A,確定後會提示是否添加啓動代碼,選擇確定(當然你要口味重的話可以自己寫個啓動代碼。。)

       第二步:新建一個文件,保存,命名main.c,編寫代碼,並將此文件添加到工程中去(前兩步基本功不多說了)。下面是一個蜂鳴器的程序代碼。


      不做任何設置編譯鏈接會出現下面錯誤:


報錯主要是一個.sct分散鏈接文件的問題,我們看到友善之臂一個視頻裏介紹MDK編寫裸機程序的時候編寫了如下代碼:

我只想說這個東西對我這菜鳥來說能看懂已經很不容易了,要我自個編一個實在是。。還好查閱資料後有了突破

點擊進入:


linker目錄下會有一個MDK自動生成的.sct文件,點擊右邊的Edit查看:


這是MDK自動生成的,顯然與友善之臂提供的不一樣。查看幫助文件我瞭解到這個文件是根據前面的Target目錄下的一些設置而生成的。


根據友善之臂提供的.sct文件設置下地址,如下:


由於我們要使用MDK自動生成的.sct文件,而不自己編寫所以要設置下:


再編譯就沒錯了:


        那麼爲什麼要這麼設置呢:IRAM1地址範圍很好理解了,就是我們片內SRAM的地址範圍,至於ROM1地址範圍,我們看到後面有個startup選項。幫助文檔裏的解釋是此處就是設置startup.s文件存放的起始地址,前面寫的是ROM是英文我們一般將代碼下到ROM裏面去,而此處是要將程序下到SDRAM中去執行,所以SDRAM充當了部分“ROM的功能”也就是存放代碼,那麼起始地址肯定是0x30000000了至於大小呢可以根據代碼大小來設置(經驗證把ROM1的Size選項設小點也是可行的)。RAM1的起始地址跟着ROM1的結束地址就行了,大小也可以根據實際情況來定。但是ROM1和RAM1總共大小不要超過64M(我的SDRAM爲64M的)。設置之後可以點擊Linker下右邊有個Edit查看下生成的.sct文件。


       接下來就是生成.bin文件了:網上查找了下,生成bin文件要用到MDK安裝目錄下\ARM\BIN40\fromelf.exe。在MDK幫助裏查找fromelf又經過一番研究後搜索--bin就會有其用法瞭如下圖


在User選項下進行如下設置(注意對應你的工程名,我的工程名是beep):


        好了,大功告成了!藉助supervivi和DNW我們的裸機程序應該就能突破其他方式下4K的限制了(其他方式下要寫個引導程序才能突破4K)。注意了這是下載到SDRAM裏運行的,所以我們復位後或是關機重啓程序就丟失了,得再次下載程序才能運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章