DSP bootloader學習筆記1


DSP bootloader學習筆記1

彭會鋒

參考:

1 TMS320F28xx DSP中內部Flash的應用研究   http://wenku.baidu.com/view/83e9837931b765ce050814fd.html

1 關於_c_int00問題

從代碼注釋可以看到 :

_c_int00 is branch to start of boot.asm in RTS libray  //翻譯為中文就是:_c_int00是rts2800_ml.lib的入口地址; 
  • _c_int00是C初始化代碼的入口地址
  • 在你用C編程的時候,DSP需要執行一段C運行支持庫代碼以完成C運行環境的初始化,_c_int00就是這段初始化代碼的入口地址,
  • _c_int00函數在運行支持庫(rts,runtime-support library)中。連接器會將這個函數的入口地址放置在復位中斷向量處,使其可以在初始化時被調用。c_int0函數進行以下工作以建立C運行環境:為系統堆棧產生.stack塊,並初始化堆棧指針。從.cinit塊將初始化數據拷貝到.bss塊中相應的變量;
  • 執行完初始化代碼后,就跳轉到main函數,開始運行C程序;


 2 f2802x_codestartbranch.asm的分析

此文件是.asm文件,所以需要懂得些匯編指令問題,下面是一些學習到的匯編命令:

  • 跳轉指令:LB;
  • .set : 設置常量給標號 - The .set directive sets a constant value to a symbol;
  • .ref 在別的地方定義的,在這里被應用,類似於c語言的extern;.def是在當前文件中定義變量; .global 應用的范圍相對更廣些,可以代替.ref和.def;
  • .sect 定義包含代碼和數據的自定義段,類似於函數定義,注意這里的格式;
  • 注釋從分號“;”開始,可以放在指令或匯編命令的后面,也可以放在單獨的一行或多行;

3 在閱讀的代碼中,我發現了一個很有意思的事情,程序應用的是rts2800_ml.lib,印象中的都是rts2800.lib,所以搜索了一些,還是有些不同的!

 

  • rts2800.lib:C/C++運行支持庫;
  • rts2800_ml.lib C/C++大內存模式運行支持庫.
  • rts2800_ml.lib中有大量浮點運算處理的函數而rts2800.lib沒有
  • 在指針的訪問空間上有區別,rts2800.lib中庫函數的指針為near,故不能訪問3Fxxxx,rts2800_ml.lib可以訪問(大小內存模式故名思議就是可以訪問的內存的大小有區別,小內存模式只能訪問低64k地址,也就是16位地址線)

4 最后附上一張dsp啟動的完整示意圖,方便大家理解,稍后繼續寫后續幾篇學習筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM