• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 網絡與存儲 > 牛人業話 > ARM11 S3C6410系列教程之三:內存使用

    ARM11 S3C6410系列教程之三:內存使用

    —— ARM11S3C6410系列教程之三內存使用
    作者:Machinnneee 時間:2013-12-24 來源:電子產品世界 收藏

      當在S3C6410跑操作系統的時候,我們不太會注意S3C6410的使用情況,但是,當我們做裸板測試時,該處理器的8K的片內的使用就不得不注意,一旦編寫的程序大小超過了片內的大小,我們就不能得到正確的結果,究其原因,我們先看一下S3C6410的啟動過程。

    本文引用地址:http://www.czjhyjcfj.com/article/203124.htm

      S3C6410如果選用啟動,在我們燒寫裸板程序是,先將程序燒寫至中,S3C6410通過硬件將中前8K的程序完整復制到S3C6410片內內存中。若裸板程序較小,程序可以正常運行,若果程序超過了8K,那么裸板測試程序不能完整的復制到片內內存,使得程序出現未知的結果。這時,我們需要關注S3C6410的各種內存的使用情況了。

      我們知道,在一個程序文件中,擁有代碼段、數據段和bss段,而一個程序的bin文件中是沒有bss段,因此,在程序的bin文件中主要完成:

      ①硬件的初始化
      ②的初始化
      ③S3C6410程序的重定位
      ④拷貝程序至
      ⑤清除中bss段
      ⑥程序鏈接至DDR中

      為進一步說明啟動過程,現在進行詳細的說明:

      S3C6410為NANDflash啟動,同時S3C6410外掛DDR,這樣,就能解決程序超過8K之后的正常運行。三者之間的連接示意圖如下圖所示:

      我們知道,S3C6410啟動的時候,將NANDflash中前8K的程序完整拷貝至S3C6410片內內存中,在這8K程序中,必須完成硬件初始化、DDR初始化和程序從NANDflash中拷貝到DDR中,這樣才能保證S3C6410cpu程序可以跳轉到DDR,保證程序的順利進行。在這過程中會涉及到程序的鏈接地址和程序的重定位方面的知識,如果你對這方面知識不熟悉,請查閱該方面的知識。

      三者之間的操作步驟如下:

      1、系統上電,S3C6410為NANDflash啟動,硬件自動將NANDflash中前8k的程序復制到S3C6410片內內存中;

      2、系統從S3C6410片內內存0地址開始執行,此時程序需要完成DDR初始化、將bin程序從S3C6410片內內存或者NANDflash拷貝到DDR鏈接地址起始位置;

      3、將NANDflash程序拷貝到DDR中,通過程序重定位和鏈接到DDR鏈接地址開始位置(此時注意,在程序的編寫中需要用位置無關跳轉指令進行編寫,否則程序會因為跳轉后找不到鏈接起始地址和變量而出現錯誤)

      4、當系統完成以上操作后,通過位置相關指令將PC值鏈接到DDR重定位位置,完成程序的運行(注意此時應使用位置相關指令完成PC值的跳轉,若使用位置無關指令,則程序一直循環在S3C6410片內內存中)。



    關鍵詞: ARM11 DDR NANDflash 內存

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 濉溪县| 巧家县| 林甸县| 潞西市| 栾川县| 璧山县| 大城县| 赤壁市| 拜泉县| 清丰县| 大冶市| 广南县| 华蓥市| 四会市| 河北区| 镇远县| 长葛市| 格尔木市| 华阴市| 阳城县| 临漳县| 思茅市| 博野县| 无锡市| 监利县| 德清县| 宁都县| 辛集市| 乌鲁木齐县| 松原市| 三江| 崇礼县| 永仁县| 封丘县| 祁连县| 化德县| 鲁山县| 十堰市| 甘德县| 渭南市| 永德县|