性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

Westbrook
認證:VIP會員
所在專題目錄 查看專題
dsPIC33 BootLoader(4)-基于MCC配置Boot區(qū)
dsPIC33 BootLoader(5)-基于MCC生成應用程序
Bootloader演示
dsPIC33 Bootloader(6) -開發(fā)時需要考慮的一些關鍵問題
dsPIC33 BootLoader(7)-修改鏈接描述文件GLD
dsPIC33 Bootloader(8)-Hex文件解析
作者動態(tài) 更多
10分鐘教你快速完成數字電源的閉環(huán)控制
2022-04-02 17:26
數字電源學習板演示
2022-02-19 13:36
手把手教你學數字電源系列視頻(22)- 數字控制的軟件流程
2022-02-19 13:28
手把手教你學數字電源系列視頻(21)- 設計數字補償器(LDE執(zhí)行)
2022-02-19 13:28
手把手教你學數字電源系列視頻(20)- 設計數字補償器(AB系數計算)
2022-02-19 13:27

dsPIC33 BootLoader(7)-修改鏈接描述文件GLD

前面介紹了如何利用MCC生成Bootloader和Application的過程,此種方法簡單方便,如果需要更復雜的功能,可以在此框架下進行完善。下面將介紹采用修改鏈接文件.gld實現基本的Bootloader和Application功能。

鏈接文件描述

MPLAB XC16目標鏈接器可基于重定位目標代碼和任意歸檔/庫文件生成用于dsPIC DSC和PIC24 MCU系列器件的二進制代碼。大多數情況下都不需要直接調用鏈接器,因為編譯器驅動程序xc16-gcc會自動使用所有必須的參數執(zhí)行鏈接器。直接使用鏈接器并不簡單,通常只有那些具有扎實的編譯器和鏈接知識的用戶才應嘗試這么做(Bootloader相對不好做呀)。鏈接描述文件控制鏈接過程的各個方面,包括:

(1)分配數據存儲器和程序存儲器;

(2)將段從輸入文件映射到輸出文件;

(3)構造特殊數據結構(如中斷向量表);

(4)分配目標器件的絕對SFR地址。

鏈接文件在整個編譯過程所處的位置如下:

比如對默認鏈接文件的程序進行編譯后觀察Program Memroy,入口地址默認跳轉至0x200進行程序的執(zhí)行,前面6個是不可屏蔽陷阱向量(0x000E地址保留),后面是中斷向量詳細,均按照默認地址進行分配。


創(chuàng)建Boot項目

1.在MPLAB X IDE里面新建一個Boot Project(與新建普通項目過程一致),使能Timer1和AN0中斷;重新再編譯,觀察Program Memory,可以發(fā)現對應IVT地址發(fā)生了變化。

2.修改.gld文件

鏈接描述文件在X:\Program Files\Microchip\xc16\v1.50\support\dsPIC33C\gld跟目錄下,現在對默認gld的“.ivt __IVT_BASE :”部分進行修改。0x2000是從Page5開始,為什么每次加4?是因為每個GOTO語句占用兩條指令,前面篇章有介紹。

添加修改好的gld鏈接文件。

對項目進行重新編譯,觀察Program Memory,可以看到IVT地址均發(fā)生了變化,產生了0x2000的偏移。

至此,Boot項目建立完畢。


創(chuàng)建Application項目

1.同樣在MPLAB X IDE新建一個App Project,使能AN0和Timer1中斷,這時需要將Bootloader的中斷關閉,如果在bootloader和application里面都有同樣的中斷,會產生編譯錯誤。

2.修改gld文件IVT偏移地址,Reset地址為0x2000,IVT地址被重映射為0x2004開始,Application入口地址為0x2400,長度0x29B00.

此處Application的Flash起始地址是0x2000,如果沒有通知編譯器在該位置放置一個reset跳轉指令,而是由程序默認把初始化代碼放在該處,這樣做會有一定風險,編譯器有一定的概率將其他代碼放在了Flash起始位置,所以需要在gld文件中指定reset=0x2000,并不要屏蔽Reset Instruction.

修改Configuration Words部分。

修改默認gld里面“.ivt __IVT_BASE :”部分如下,在修改的時候一定要對照datasheet里面的中斷IVT地址一一對應,否則會出錯。

添加gld文件到項目文件。

編譯成功后觀察Program  Memory,入口地址0x2000跳轉到0x2402執(zhí)行Application程序,同時T1中斷和AN0中斷也分別跳轉到不同的地址去執(zhí)行中斷函數。

Bootloader和application分別添加修改后的GLD,可以看到Timer1 IVT地址0x0016產生偏移地址后為0x002028,在Application執(zhí)行Timer1中斷后,發(fā)生中斷后通過GOTO指令跳轉至0x2B74地址去執(zhí)行中斷函數。


在Application項目中添加Boot Project。

編譯會發(fā)現出錯,如下:

主要是因為鏈接器將為啟用的中斷生成一個默認向量,這就是為什么盡管Bootloader通過修改GLD文件設置了固定值,但仍由應用程序設置了值的原因。 應用程序設置了“ 002B74”,而Bootloader設置了“ 002028”。

同時在屬性設置里面需要將創(chuàng)建默認中斷ISR Unlock,如下:

另外在Application GLD中需要對使能中斷名進行重新命名,同時中斷函數也要改成一致。

重新進行編譯,觀察Application Flash Program Memory,IVT地址被重映射,偏移地址是0x2000,Application入口地址是0x2402.

至此,通過GLD修改完成了Bootloader IVT重映射和存儲空間的再分配。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 3
收藏 3
關注 845
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧