日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年04月26日(星期六)

2019年04月26日 | S3C2440裸機(jī)實(shí)戰(zhàn) 之一 創(chuàng)建初始工程

發(fā)布者:omicron25 來源: eefocus關(guān)鍵字:S3C2440  裸機(jī)  創(chuàng)建初始工程 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

好幾年沒玩S3C2440,從單片機(jī)玩到嵌入式,就記得這個(gè)是我入門嵌入式比較早的一款芯片。


S3C2440是帶MMU的,可以上WinCE/Linux這些操作系統(tǒng),適合做嵌入式開發(fā),做單片機(jī)開發(fā)的話,總感覺有點(diǎn)浪費(fèi),但如果只是玩玩應(yīng)該沒問題。


最近業(yè)余時(shí)間想把S3C2440拿來當(dāng)單片機(jī)玩玩。


廢話少說,直接入主題。


第一步當(dāng)然是創(chuàng)建初始工程。


既然是裸機(jī)實(shí)戰(zhàn),想玩點(diǎn)什么特色,看來匯編是不能少的了。ARM9匯編支持的好一點(diǎn)的當(dāng)然是MDK,IAR的匯編語(yǔ)法和ARM官方的有一些區(qū)別,還是算了。


gcc 語(yǔ)法和ARM官方是差不多,不過編譯出來的代碼質(zhì)量比不過MDK。這里就選用MDK5.1


單片機(jī)的helloworld都是從LED開始,我這里也不例外,就從Led開始,或者說從GPIO開始。


打開MDK5,如果已經(jīng)有工程隨MDK啟動(dòng)時(shí)打開,就先關(guān)閉當(dāng)前已經(jīng)打開的工程。


1.創(chuàng)建新工程,要求選擇芯片型號(hào),直接在搜索框輸入S3C2440A,確認(rèn)。


MDK會(huì)自動(dòng)加入S3C2440.s啟動(dòng)文件,里面用ARM匯編語(yǔ)言編寫的,對(duì)于不太熟悉匯編的童鞋來說,可能看懂還是有點(diǎn)難度。


這里就先不用去看,直接使用它創(chuàng)建完整工程,否者后面編譯鏈接通不過。


到后面如果需要加入一些有趣的功能,再回到這個(gè)文件中修改,或者按需要直接重寫。


2.設(shè)置


1)Target頁(yè),


    IRAM1 Start 0x40000000 Size 0x1000


    去掉Use Cross-Module Optimization   代碼前期建議不要開優(yōu)化


    去掉Use mirolib


2) Output頁(yè)


     勾上Create HEX File


3)User頁(yè)


     勾上 Run #1


    后面填上 fromelf.exe  --bin -o @p.bin @p.axf


 4)后面 Debug和 Unitiily頁(yè)按仿真器類型修改,其他頁(yè)默認(rèn)不用修改。


3.初始工程當(dāng)然還是先完成main函數(shù),那就先創(chuàng)建個(gè)main.c的文件,編寫基本的main函數(shù)。


int main(void)

{

    unsigned int a = 0;

    unsigned int b = 1;

    while(1){

        a = b ;

        b = a;

    }

    return 1;

}

編寫完后,當(dāng)然首先想到的是編譯嘛。沒想到一編譯出來各種各樣奇怪的錯(cuò)誤。

仔細(xì)看信息,發(fā)現(xiàn)不是編譯錯(cuò)誤,而是在鏈接階段出的錯(cuò)誤。


好吧,估計(jì)是分散加載設(shè)置有問題了。




4.編寫分散加載腳本。


點(diǎn)擊options for target,也就是工具欄中的設(shè)置鍵,到Linker一欄,去掉Use   Memory   Layout   from   Target  Dialog,這樣就可以用


Scatter File,也就是分散加載腳本方式。我個(gè)人的習(xí)慣是喜歡用分散加載腳本,上面點(diǎn)勾選的是簡(jiǎn)單的設(shè)置方式,只能支持比較簡(jiǎn)單的分散加載要求。


復(fù)雜的分散加載,它就做不了了,分散加載腳本是簡(jiǎn)單和復(fù)雜通吃。




去掉勾后,系統(tǒng)默認(rèn)給出早工程文件的同目錄下的同工程名的分散加載腳本名,點(diǎn)擊后面的Edit。


用下面的代碼覆蓋它,保存后,重新全部編譯,通過。




ER_ROM1 0x40000000

{

    ER_ROM1 0x40000000

    {

        *.o (RESET, +First)

        *(InRoot$$Sections)

        * (+RO)

    }     

    

    RW_RAM1 0x40000800

    {

        ;S3C2440.o (MyStacks)

        .ANY (+RW,+ZI)  ; * (+RO)    

    }  

 

    HEAP +0 UNINIT

    {

        S3C2440.o (Heap)

    }

 

    STACK 0x40001000 UNINIT

    {

        S3C2440.o (STACK)

    }

}


那是不是到這里就OK了呢,我也不知道,接下來先仿真下。








2015-2-9


5.仿真測(cè)試


一仿真才知道出了大問題,ARM的體系,系統(tǒng)棧是滿遞減方式的,所以棧頂不能超過0x40001000,棧底就更不能超了


計(jì)算了下棧容量,應(yīng)該是0x488,看了map文件,棧頂?shù)搅?x40001488,所以腳本要看一下


ER_ROM1 0x40000000

{

    ER_ROM1 0x40000000

    {

        *.o (RESET, +First)

*(InRoot$$Sections)

        * (+RO)

    }     

 

    RW_RAM1 0x40000800

    {

        ;S3C2440.o (MyStacks)

        .ANY (+RW,+ZI)  ; * (+RO)

    }  

 

    HEAP +0 UNINIT

    {

        S3C2440.o (Heap)

    }

 

STACK 0x40000B00 UNINIT

    {

        S3C2440.o (STACK)

    }

}


這會(huì)編譯下,仿真能進(jìn)main函數(shù)了,但是卻老會(huì)重啟,另外發(fā)現(xiàn)CPU跑的是自己之前燒寫到nandflash前4KB的程序,說明仿真時(shí)看到的代碼其實(shí)是

steppingstone的代碼,且在仿真時(shí),指向第一條指令的位置是0x00000000,而不是0x40000000,看來仿真時(shí)仿真期沒有讓PC指向0x40000000,所以仿真時(shí)跑的是steppingstone的代碼。


在debug一欄中edit initization file中加上以下代碼,這里只是想讓PC直到0x40000000,把初始化時(shí)鐘,RAM等去掉,以后需要再加。


既然是裸機(jī)實(shí)戰(zhàn),那還是盡量讓代碼來做我們需要的功能,腳本替我們做了初始化工作就沒意思了。當(dāng)然PC的初始化是沒辦法了,只能通過腳本來設(shè)置,畢竟現(xiàn)在在


nandflash前4KB的代碼還不是我們自己的代碼,不能掌控。


FUNC void SetupForStart (void) {

 

//

 PC = 0x40000000;//0x30000000

}

 

 

FUNC void Init (void) {

 

    // Clock Setup 

                                        // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz

//  _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME

//  _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN

//  _WDWORD(0x4C000004, 0x00043011);      // MPLLCON

//  _WDWORD(0x4C000008, 0x00038021);      // UPLLCON

//  _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

 

}

 

 

// Reset chip with watchdog, because nRST line is routed on hardware in a way 

// that it can not be pulled low with ULINK

 

//_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself

CPSR = 0x000000D3;                      // Disable interrupts

PC   = 0x40000000;  //0x30000000        // Position PC to start of RAM

//_WDWORD(0x53000000, 0x00000021);        // Enable Watchdog

//g, 0                                    // Wait for Watchdog to reset chip

 

//Init();                                 // Initialize memory

LOAD project.axf INCREMENTAL         // Download program

SetupForStart();                        // Setup for Running


再次仿真,沒有問題了。

好,到此,S3C2440裸機(jī)的第一個(gè)工程已經(jīng)差不多完成了。


在仿照CMSIS編寫了外設(shè)頭文件后,再來操作Led。




這里是借由MKD提供的匯編啟動(dòng)代碼來做的,懂匯編的童鞋可以自己寫一個(gè)匯編啟動(dòng),如果不懂也沒什么,可以照著ARM7的匯編啟動(dòng)代碼寫,例如LPC213x/214x系列的匯編啟動(dòng)代碼。


推薦個(gè)鏈接,對(duì)MDK提供的S3C2440匯編啟動(dòng)代碼的解讀:


http://www.oschina.net/question/565065_115207

關(guān)鍵字:S3C2440  裸機(jī)  創(chuàng)建初始工程 引用地址:S3C2440裸機(jī)實(shí)戰(zhàn) 之一 創(chuàng)建初始工程

上一篇:S3C2440開發(fā)板裸機(jī)程序系列07—NAND FLASH存儲(chǔ)器
下一篇:s3c2440 裸機(jī) 系統(tǒng)時(shí)鐘和定時(shí)器的設(shè)置

推薦閱讀

  美國(guó)政府以違反承諾條款為由,對(duì)中興通訊發(fā)起了出口禁令,中興被禁止在未來七年內(nèi)購(gòu)買美國(guó)的零件和軟件。據(jù)外媒分析稱,此舉不僅將給中興公司帶來巨大困難,也將波及全球電信行業(yè)供應(yīng)鏈。下面就隨嵌入式小編一起來了解一下相關(guān)內(nèi)容吧。  據(jù)日經(jīng)新聞引述一名中興內(nèi)部人士的話稱:“我們被禁止和美國(guó)商業(yè)伙伴,比如高通、英特爾或博通等通電話或是交流...
TCL集團(tuán)發(fā)布了2019年一季度業(yè)績(jī)公告。 報(bào)告期內(nèi),TCL集團(tuán)共實(shí)現(xiàn)營(yíng)業(yè)收入296.0億元,同比增長(zhǎng)15.5%;其中主營(yíng)業(yè)務(wù)收入293.3億元,同比增長(zhǎng)15.2%;實(shí)現(xiàn)凈利潤(rùn)10.1 億元,同比增長(zhǎng)27.7%;其中歸屬于上市公司股東的凈利潤(rùn)7.79 億元,同比增長(zhǎng)6.6%。 報(bào)告期內(nèi),TCL集團(tuán)凈利率增長(zhǎng)至3.40%,費(fèi)用率同比下降1.88個(gè)百分點(diǎn),凈資產(chǎn)收益率同比提升0.16 個(gè)百分點(diǎn),...
近日,科沃斯商用機(jī)器人舉辦2020線上新品發(fā)布會(huì)。此次發(fā)布會(huì)上,科沃斯商用機(jī)器人“官宣“了六款機(jī)器人——型金融服務(wù)機(jī)器人BENEBOT5旺寶5、大屏營(yíng)銷服務(wù)機(jī)器人SHOWBOT秀寶、巡檢盤點(diǎn)機(jī)器人THINGBOT-C、巡檢掃貨機(jī)器人THINGBOT-S、巡檢測(cè)溫機(jī)器人THINGBOT-T和通用運(yùn)動(dòng)底盤NIMBOT敏寶。 2015年,科沃斯商用機(jī)器人發(fā)布了第一款公共服務(wù)機(jī)器人旺寶1。自此...
近日,全球AMR引領(lǐng)者極智嘉(Geek+)成功賦能英國(guó)零售巨頭ASDA,為其部署全柔性智能AMR分揀系統(tǒng),此舉不僅全面提升了ASDA的倉(cāng)儲(chǔ)物流能力,還彰顯出極智嘉在智能物流方面的出眾實(shí)力。2020年,席卷全球的新冠疫情在一定程度上改變了消費(fèi)者的行為,線上購(gòu)物的數(shù)量日益龐大。為幫助英國(guó)零售商ASDA有效應(yīng)對(duì)與日俱增的包裹收取和退回?cái)?shù)量、實(shí)現(xiàn)業(yè)務(wù)增長(zhǎng),極智嘉...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved