日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MDK linker和debug的设置以及在RAM中调试

發布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MDK linker和debug的设置以及在RAM中调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有誤或者表述不清楚請指出,謝謝?

硬件:TQ2440開發板、jlink? V8 固件

軟件:J-LINK? ARM 4.08i、MDK4.20

?

先解釋下MDK中三種linker之間的區別

設置集中在option linker選項卡

1.采用Target對話框中的ram和rom地址。采用此方式,需在linker選項卡中的Use Memort Layout from

Target Diaglog選項選中,并且在Target中設置好ram、rom地址。MDK會根據Target對話框中設定的ram

和rom地址自動生成一個分散加載文件。最后鏈接器會根據此文件中的信息對目標文件進行連接,生成axf文件。

如下圖:

至于rom和ram是片內還是片外,容量多大就需要根據芯片和開發板來決定了。

?

2.直接通過linker選項卡中的R/O Base和R/W Base來設定鏈接信息。鏈接器最后可根據此處指定的地址信息進

行連接,連接的文件應該是順序存放了,最多RO和RW分開。此時需要注意的是應將 Use Memort Layout from

Target Diaglog前的勾去掉,且保證Scatter File中未包含分散加載文件。并且要在Misc control中設定鏡像的入口點,如:

--first 2440init.o(Init)

?

2440init.o對應的是啟動代碼匯編源文件2440init.s,Init是對應的是段名在異常向量表之前。此處需要根據具體文件修改。

3.最后一種為直接采用分散加載文件。

在設置linker的時候可以注意下linker control string的信息,看看linker的輸入信息是否符合自己的要求。

此處應該是只要選擇使用scatter file文件,那么其他鏈接方式的設置自動失效。

可以從linker control string的信息看出來。

?

對應TQ2440開發板的設置

由于TQ2440開發板采用的是片外的ram和片外的flash,所以我這里直接采用前面說到的第二種方法。

就是通過手動設置ro的地址,其中0x30000000就是片外ram的地址。rw未指定,則說明rw數據順序

存存放到ro段之后。

?

MDK Jlink 外部RAM調試設置

設置集中在option 的debug選項卡下

1.先將黑點調到右邊,然后在右邊的下拉框中選中J-LINK/J-TRACE,然后點擊Setting,找到Info中的JLink,點擊查看Jlink和MDK能否連接起來,在點擊下面的Target查看仿真器能否找到cpu。

load Application at startup貌似去掉和不去掉的效果是一樣的,猜測這個選項和前面Target中的rom地址有關,因為rom地址的后面有startup這個選項。我這里未采用Target方式鏈接,所以將此勾去掉了。

2.然后是ram調試是最重要的init文件。這個文件的作用是在加載axf調試文件前先將ram初始化完畢,需要完成設置總線時鐘,設置bank控制寄存器等(sdram直接掛在bank6上)。本來想偷懶,直接將MDK安裝文件夾下Clabsys公司的2440開發板的Ext_RAM.ini拷貝出來,結果調試的時候出現了莫名其妙的錯誤,猜測是初始化的問題。打開看了下,發現能看懂,MDK自帶的文件只初始化了bank6。于是動手將TQ2440的init_sdram改造了下,做了個新的Ext_RAM.ini,可以順利調試。需要注意的是,Init文件需要根據工程做一定修改,具體是在LOAD命令處。附init文件:

?

?

[cpp] view plaincopyprint?
  • FUNC void SetupForStart (void) {?
  • ?
  • // <o> Program Entry Point ?
  • ? PC = 0x30000000;?
  • }?
  • ?
  • ?
  • FUNC void Init (void) {?
  • ??? _WDWORD(0x53000000, 0x00000000);?
  • ??? _WDWORD(0x4A000008, 0xFFFFFFFF);?
  • ??? _WDWORD(0x4A00001C, 0x000007FF);?
  • ??? _WDWORD(0x53000000, 0x00000000);?
  • ??? _WDWORD(0x56000050, 0x000055AA);?
  • ??? _WDWORD(0x4C000014, 0x00000007);?
  • ??? _WDWORD(0x4C000000, 0x00FFFFFF);?
  • ??? _WDWORD(0x4C000004, 0x00061012);?
  • ??? _WDWORD(0x4C000008, 0x00040042);?
  • ??? _WDWORD(0x48000000, 0x22111120);?
  • ??? _WDWORD(0x48000004, 0x00002F50);?
  • ??? _WDWORD(0x48000008, 0x00000700);?
  • ??? _WDWORD(0x4800000C, 0x00000700);?
  • ??? _WDWORD(0x48000010, 0x00000700);?
  • ??? _WDWORD(0x48000014, 0x00000700);?
  • ??? _WDWORD(0x48000018, 0x0007FFFC);?
  • ??? _WDWORD(0x4800001C, 0x00018005);?
  • ??? _WDWORD(0x48000020, 0x00018005);?
  • ??? _WDWORD(0x48000024, 0x008E0459);?
  • ??? _WDWORD(0x48000028, 0x00000032);?
  • ??? _WDWORD(0x4800002C, 0x00000030);?
  • ??? _WDWORD(0x48000030, 0x00000030);?
  • }?
  • ?
  • ?
  • // 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;????????????????????? // Position PC to start of RAM ?
  • _WDWORD(0x53000000, 0x00000021);??????? // Enable Watchdog ?
  • g, 0??????????????????????????????????? // Wait for Watchdog to reset chip ?
  • ?
  • Init();???????????????????????????????? // Initialize memory ?
  • LOAD ..\output\codec.axf INCREMENTAL??? // 此處需修改axf文件的路徑各工程設置可能不一樣需要在此處修改! ?
  • SetupForStart();??????????????????????? // Setup for Running ?
  • stop, pc??????????????????????????????? // 想要直接到main可設置為? g, main?
  • FUNC void SetupForStart (void) {// <o> Program Entry PointPC = 0x30000000; }FUNC void Init (void) {_WDWORD(0x53000000, 0x00000000);_WDWORD(0x4A000008, 0xFFFFFFFF);_WDWORD(0x4A00001C, 0x000007FF);_WDWORD(0x53000000, 0x00000000);_WDWORD(0x56000050, 0x000055AA);_WDWORD(0x4C000014, 0x00000007);_WDWORD(0x4C000000, 0x00FFFFFF);_WDWORD(0x4C000004, 0x00061012);_WDWORD(0x4C000008, 0x00040042);_WDWORD(0x48000000, 0x22111120);_WDWORD(0x48000004, 0x00002F50);_WDWORD(0x48000008, 0x00000700);_WDWORD(0x4800000C, 0x00000700);_WDWORD(0x48000010, 0x00000700);_WDWORD(0x48000014, 0x00000700);_WDWORD(0x48000018, 0x0007FFFC);_WDWORD(0x4800001C, 0x00018005);_WDWORD(0x48000020, 0x00018005);_WDWORD(0x48000024, 0x008E0459);_WDWORD(0x48000028, 0x00000032);_WDWORD(0x4800002C, 0x00000030);_WDWORD(0x48000030, 0x00000030); }// 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; // Position PC to start of RAM _WDWORD(0x53000000, 0x00000021); // Enable Watchdog g, 0 // Wait for Watchdog to reset chipInit(); // Initialize memory LOAD ..\output\codec.axf INCREMENTAL // 此處需修改axf文件的路徑各工程設置可能不一樣需要在此處修改! SetupForStart(); // Setup for Running stop, pc // 想要直接到main可設置為 g, main

    具體設置如圖:

    轉載:http://blog.csdn.net/rockrockwu/article/details/7093435

    轉載于:https://www.cnblogs.com/Hdd-Yi/archive/2013/04/19/3030386.html

    總結

    以上是生活随笔為你收集整理的MDK linker和debug的设置以及在RAM中调试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。