久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4224|回復: 0
打印 上一主題 下一主題
收起左側

嵌入式技巧:ARM的三種中斷調(diào)試方法介紹

[復制鏈接]
跳轉到指定樓層
樓主
ID:199435 發(fā)表于 2020-5-20 09:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
參照嵌入式軟件的開發(fā)流程。第一步:工程建立和配置。第二步:編輯源文件。第三步:工程編譯和鏈接。第四步:軟件的調(diào)試。第五步:執(zhí)行文件的固化。

在整個流程中,用戶首先需要建立工程并對工程做初步的配置,包括配置處理器和配置調(diào)試設備。編輯工程文件,包括自己編寫的匯編和C語言源程序,還有工程編譯時需要編寫的鏈接腳本文件,調(diào)試過程中需要編寫存儲區(qū)映像文件和命令腳本文件,以及上電復位時的程序運行入口的啟動程序文件。

對后四種文件的理解很重要,其作用解釋如下。

(1) 鏈接腳本文件:在程序編譯時起作用。該文件描述代碼鏈接定位的有關信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對整個系統(tǒng)的代碼做正確的定位。在SDRAM中調(diào)試程序、在FLASH中調(diào)試或固化后運行的鏈接腳本文件應加以區(qū)分。(在IDE開發(fā)環(huán)境中使用擴展名*.ld)

(2)命令腳本文件:在SDRAM中調(diào)試程序時起作用。在集成環(huán)境與目標連接時、軟件調(diào)試過程中以及目標板復位后,有時需要集成環(huán)境自動完成一些特定的操作,比如復位目標板、清除看門狗、屏蔽中斷寄存器、存儲區(qū)映射等。這些操作可以通過執(zhí)行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發(fā)環(huán)境中使用擴展名*.cs)。

(3)存儲區(qū)映像文件:在SDRAM中調(diào)試程序時起作用。在軟件調(diào)試過程中訪問非法存儲區(qū)在部分處理器和目標板上會產(chǎn)生異常,如果異常沒有處理,則會導致軟件調(diào)試過程無法繼續(xù),為了防止以上問題并調(diào)整仿真器訪問速度以達到最合適的水平,提供這樣一種用于描述各個存儲區(qū)性質(zhì)的文件叫存儲區(qū)映像文件(在IDE開發(fā)環(huán)境中使用擴展名*.map)。

在程序的調(diào)試過程中可以選擇使用存儲區(qū)映像文件*.map和命令腳本文件*. cs配合程序的調(diào)試。

(4) 啟動文件:它主要是完成一些和硬件相關的初始化的工作,為應用程序做準備。一般,啟動代碼的第一步是設置中斷和異常向量;第二步是完成系統(tǒng)啟動所必須的寄存器配置;第三步設置看門狗及用戶設計的部分外圍電路;第四步是配置系統(tǒng)所使用的存儲區(qū)分配地址空間;第五步是變量初始化;第六步是為處理器的每個工作模式設置棧指針;最后一步是進入高級語言入口函數(shù)(Main函數(shù))。

中斷程序設計

中斷調(diào)試方面可以采用類似矢量中斷動態(tài)處理方式,讓中斷對應的確定地址代碼調(diào)轉到RAM的固定地址處,定義一個函數(shù)指針指向該固定地址,就可以隨時通過替換RAM固定地址處的代碼,實現(xiàn)動態(tài)改變中斷處理函數(shù)。

具體方法是:嵌入式技巧:ARM的三種中斷調(diào)試方法介紹
嵌入式軟件開發(fā)流程

參照嵌入式軟件的開發(fā)流程。第一步:工程建立和配置。第二步:編輯源文件。第三步:工程編譯和鏈接。第四步:軟件的調(diào)試。第五步:執(zhí)行文件的固化。

在整個流程中,用戶首先需要建立工程并對工程做初步的配置,包括配置處理器和配置調(diào)試設備。編輯工程文件,包括自己編寫的匯編和C語言源程序,還有工程編譯時需要編寫的鏈接腳本文件,調(diào)試過程中需要編寫存儲區(qū)映像文件和命令腳本文件,以及上電復位時的程序運行入口的啟動程序文件。

對后四種文件的理解很重要,其作用解釋如下。

(1) 鏈接腳本文件:在程序編譯時起作用。該文件描述代碼鏈接定位的有關信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對整個系統(tǒng)的代碼做正確的定位。在SDRAM中調(diào)試程序、在FLASH中調(diào)試或固化后運行的鏈接腳本文件應加以區(qū)分。(在IDE開發(fā)環(huán)境中使用擴展名*.ld)

(2)命令腳本文件:在SDRAM中調(diào)試程序時起作用。在集成環(huán)境與目標連接時、軟件調(diào)試過程中以及目標板復位后,有時需要集成環(huán)境自動完成一些特定的操作,比如復位目標板、清除看門狗、屏蔽中斷寄存器、存儲區(qū)映射等。這些操作可以通過執(zhí)行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發(fā)環(huán)境中使用擴展名*.cs)。

(3)存儲區(qū)映像文件:在SDRAM中調(diào)試程序時起作用。在軟件調(diào)試過程中訪問非法存儲區(qū)在部分處理器和目標板上會產(chǎn)生異常,如果異常沒有處理,則會導致軟件調(diào)試過程無法繼續(xù),為了防止以上問題并調(diào)整仿真器訪問速度以達到最合適的水平,提供這樣一種用于描述各個存儲區(qū)性質(zhì)的文件叫存儲區(qū)映像文件(在IDE開發(fā)環(huán)境中使用擴展名*.map)。

在程序的調(diào)試過程中可以選擇使用存儲區(qū)映像文件*.map和命令腳本文件*. cs配合程序的調(diào)試。

(4) 啟動文件:它主要是完成一些和硬件相關的初始化的工作,為應用程序做準備。一般,啟動代碼的第一步是設置中斷和異常向量;第二步是完成系統(tǒng)啟動所必須的寄存器配置;第三步設置看門狗及用戶設計的部分外圍電路;第四步是配置系統(tǒng)所使用的存儲區(qū)分配地址空間;第五步是變量初始化;第六步是為處理器的每個工作模式設置棧指針;最后一步是進入高級語言入口函數(shù)(Main函數(shù))。

中斷程序設計

中斷調(diào)試方面可以采用類似矢量中斷動態(tài)處理方式,讓中斷對應的確定地址代碼調(diào)轉到RAM的固定地址處,定義一個函數(shù)指針指向該固定地址,就可以隨時通過替換RAM固定地址處的代碼,實現(xiàn)動態(tài)改變中斷處理函數(shù)。

具體方法是:

(1)將中斷源函數(shù)指針定義在RAM中相對的固定地址,建立中斷矢量表;

  void SetInterrupt (U32 vector, void (*handler)()){      InterruptHandlers[vector] = handler;}

(2)在程序中,調(diào)用具體某中斷源的中斷處理函數(shù);

  如:SetInterrupt(IIC_INT,IICWriteIsr);
  /* 聲明IIC中斷處理函數(shù),其中IIC_INT為 IIC中斷源序號,IICWriteIsr為 IIC的寫中斷處理函數(shù) */

(3)在0x18處的IRQ或0x1C處的FIQ中斷入口函數(shù)中,獲取中斷源、清除中斷掛起標志、通過已定義的中斷源函數(shù)指針進入用戶具體某中斷處理程序。

  void ISR_IrqHandler(void){    IntOffSet = (unsigned int)INTOFFSET;    Clear_PendingBit(IntOffSet>>2) ;(*InterruptHandlers[IntOffSet>>2])();// 調(diào)用具體某中斷處理程序}

采用動態(tài)的中斷處理方法,在中斷源較多的情況下,中斷響應時間和程序性能得到優(yōu)化。另外,在調(diào)試方面,此處理方法具有便于跟蹤調(diào)試的優(yōu)點,并且根據(jù)需要,可以方便變換中斷處理函數(shù)。

中斷調(diào)試

軟件調(diào)試可以在SDRAM中或FLASH中進行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調(diào)試應在RAM中完成,但當RAM空間小于FLASH程序空間,程序只能在FLASH運行和調(diào)試時,或者用戶希望了解程序在FLASH中實際運行情況時,就可以在FLASH中進行程序調(diào)試。

進行中斷調(diào)試時,應注意中斷入口位于SDRAM中或FLASH中0x18或0x1c地址,鏈接腳本文件必須使整個系統(tǒng)的代碼正確定位于0x0起始處,但SDRAM或FLASH對應的鏈接腳本文件及工程配置注意區(qū)別。

(1)程序在SDRAM中運行

在SDRAM中調(diào)試,使用SDRAM對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在IDE開發(fā)環(huán)境中使用擴展名*.elf);調(diào)試。

下載程序前必須啟動命令腳本文件完成前述的一些特定的操作,命令腳本文件的啟動在連接仿真器時自動進行,其中存儲區(qū)映射應與程序在SDRAM中運行時相同,保證整個系統(tǒng)的代碼正確定位于0x0起始處。下載程序的起始地址也為0x0,下載成功后便可進行調(diào)試工作。

(2)程序在FLASH中運行

在FLASH中調(diào)試,使用FLASH對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉換(*.elf轉換為*.bin);固化*.bin程序;調(diào)試。

連接仿真器后不需要下載程序,存儲區(qū)映射由本身工程中啟動文件運行完成,不需要命令腳本文件。在本環(huán)境調(diào)試過程中,可以設置兩個硬件斷點。

(3)程序從FLASH中調(diào)到SDRAM中運行

在某些應用場合,強調(diào)程序運行速度的情況下,希望程序在SDRAM中運行,這樣就需要將FLASH中存儲的程序,在系統(tǒng)上電后搬運到SDRAM某空間位置,然后自動運行。這種所謂的Bootloader技術,在DSP系統(tǒng)中常被采用。

調(diào)試過程分兩步:

(a)首先將用戶程序在SDRAM中調(diào)試通過,然后將*.bin文件固化到FLASH某一非0扇區(qū)地址空間;

(b) 將自己編寫的Bootloader搬運程序調(diào)試通過并將Bootloader.bin文件固化到FLASH的 0扇區(qū)地址空間,搬運程序在系統(tǒng)上電后,將(a)中FLASH某一非0扇區(qū)地址空間存儲的程序,搬運到在SDRAM調(diào)試中同樣的空間位置,實現(xiàn)程序在SDRAM中運行的目的。
嵌入式技巧:ARM的三種中斷調(diào)試方法介紹
嵌入式軟件開發(fā)流程

參照嵌入式軟件的開發(fā)流程。第一步:工程建立和配置。第二步:編輯源文件。第三步:工程編譯和鏈接。第四步:軟件的調(diào)試。第五步:執(zhí)行文件的固化。

在整個流程中,用戶首先需要建立工程并對工程做初步的配置,包括配置處理器和配置調(diào)試設備。編輯工程文件,包括自己編寫的匯編和C語言源程序,還有工程編譯時需要編寫的鏈接腳本文件,調(diào)試過程中需要編寫存儲區(qū)映像文件和命令腳本文件,以及上電復位時的程序運行入口的啟動程序文件。

對后四種文件的理解很重要,其作用解釋如下。

(1) 鏈接腳本文件:在程序編譯時起作用。該文件描述代碼鏈接定位的有關信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對整個系統(tǒng)的代碼做正確的定位。在SDRAM中調(diào)試程序、在FLASH中調(diào)試或固化后運行的鏈接腳本文件應加以區(qū)分。(在IDE開發(fā)環(huán)境中使用擴展名*.ld)

(2)命令腳本文件:在SDRAM中調(diào)試程序時起作用。在集成環(huán)境與目標連接時、軟件調(diào)試過程中以及目標板復位后,有時需要集成環(huán)境自動完成一些特定的操作,比如復位目標板、清除看門狗、屏蔽中斷寄存器、存儲區(qū)映射等。這些操作可以通過執(zhí)行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發(fā)環(huán)境中使用擴展名*.cs)。

(3)存儲區(qū)映像文件:在SDRAM中調(diào)試程序時起作用。在軟件調(diào)試過程中訪問非法存儲區(qū)在部分處理器和目標板上會產(chǎn)生異常,如果異常沒有處理,則會導致軟件調(diào)試過程無法繼續(xù),為了防止以上問題并調(diào)整仿真器訪問速度以達到最合適的水平,提供這樣一種用于描述各個存儲區(qū)性質(zhì)的文件叫存儲區(qū)映像文件(在IDE開發(fā)環(huán)境中使用擴展名*.map)。

在程序的調(diào)試過程中可以選擇使用存儲區(qū)映像文件*.map和命令腳本文件*. cs配合程序的調(diào)試。

(4) 啟動文件:它主要是完成一些和硬件相關的初始化的工作,為應用程序做準備。一般,啟動代碼的第一步是設置中斷和異常向量;第二步是完成系統(tǒng)啟動所必須的寄存器配置;第三步設置看門狗及用戶設計的部分外圍電路;第四步是配置系統(tǒng)所使用的存儲區(qū)分配地址空間;第五步是變量初始化;第六步是為處理器的每個工作模式設置棧指針;最后一步是進入高級語言入口函數(shù)(Main函數(shù))。

中斷程序設計

中斷調(diào)試方面可以采用類似矢量中斷動態(tài)處理方式,讓中斷對應的確定地址代碼調(diào)轉到RAM的固定地址處,定義一個函數(shù)指針指向該固定地址,就可以隨時通過替換RAM固定地址處的代碼,實現(xiàn)動態(tài)改變中斷處理函數(shù)。

具體方法是:

(1)將中斷源函數(shù)指針定義在RAM中相對的固定地址,建立中斷矢量表;

  void SetInterrupt (U32 vector, void (*handler)()){      InterruptHandlers[vector] = handler;}

(2)在程序中,調(diào)用具體某中斷源的中斷處理函數(shù);

  如:SetInterrupt(IIC_INT,IICWriteIsr);
  /* 聲明IIC中斷處理函數(shù),其中IIC_INT為 IIC中斷源序號,IICWriteIsr為 IIC的寫中斷處理函數(shù) */

(3)在0x18處的IRQ或0x1C處的FIQ中斷入口函數(shù)中,獲取中斷源、清除中斷掛起標志、通過已定義的中斷源函數(shù)指針進入用戶具體某中斷處理程序。

  void ISR_IrqHandler(void){    IntOffSet = (unsigned int)INTOFFSET;    Clear_PendingBit(IntOffSet>>2) ;(*InterruptHandlers[IntOffSet>>2])();// 調(diào)用具體某中斷處理程序}

采用動態(tài)的中斷處理方法,在中斷源較多的情況下,中斷響應時間和程序性能得到優(yōu)化。另外,在調(diào)試方面,此處理方法具有便于跟蹤調(diào)試的優(yōu)點,并且根據(jù)需要,可以方便變換中斷處理函數(shù)。

中斷調(diào)試

軟件調(diào)試可以在SDRAM中或FLASH中進行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調(diào)試應在RAM中完成,但當RAM空間小于FLASH程序空間,程序只能在FLASH運行和調(diào)試時,或者用戶希望了解程序在FLASH中實際運行情況時,就可以在FLASH中進行程序調(diào)試。

進行中斷調(diào)試時,應注意中斷入口位于SDRAM中或FLASH中0x18或0x1c地址,鏈接腳本文件必須使整個系統(tǒng)的代碼正確定位于0x0起始處,但SDRAM或FLASH對應的鏈接腳本文件及工程配置注意區(qū)別。

(1)程序在SDRAM中運行

在SDRAM中調(diào)試,使用SDRAM對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在IDE開發(fā)環(huán)境中使用擴展名*.elf);調(diào)試。

下載程序前必須啟動命令腳本文件完成前述的一些特定的操作,命令腳本文件的啟動在連接仿真器時自動進行,其中存儲區(qū)映射應與程序在SDRAM中運行時相同,保證整個系統(tǒng)的代碼正確定位于0x0起始處。下載程序的起始地址也為0x0,下載成功后便可進行調(diào)試工作。

(2)程序在FLASH中運行

在FLASH中調(diào)試,使用FLASH對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉換(*.elf轉換為*.bin);固化*.bin程序;調(diào)試。

連接仿真器后不需要下載程序,存儲區(qū)映射由本身工程中啟動文件運行完成,不需要命令腳本文件。在本環(huán)境調(diào)試過程中,可以設置兩個硬件斷點。

(3)程序從FLASH中調(diào)到SDRAM中運行

在某些應用場合,強調(diào)程序運行速度的情況下,希望程序在SDRAM中運行,這樣就需要將FLASH中存儲的程序,在系統(tǒng)上電后搬運到SDRAM某空間位置,然后自動運行。這種所謂的Bootloader技術,在DSP系統(tǒng)中常被采用。

調(diào)試過程分兩步:

(a)首先將用戶程序在SDRAM中調(diào)試通過,然后將*.bin文件固化到FLASH某一非0扇區(qū)地址空間;

(b) 將自己編寫的Bootloader搬運程序調(diào)試通過并將Bootloader.bin文件固化到FLASH的 0扇區(qū)地址空間,搬運程序在系統(tǒng)上電后,將(a)中FLASH某一非0扇區(qū)地址空間存儲的程序,搬運到在SDRAM調(diào)試中同樣的空間位置,實現(xiàn)程序在SDRAM中運行的目的。

另外注意,因為用戶實際的程序中斷入口必須位于FLASH的0x18或0x1c地址,所以Bootloader搬運程序還應具有中斷入口的跳轉功能,即把PC指針由此轉向處于SDRAM空間的中斷程序入口表,就是整個用戶程序被搬運到SDRAM的那一位置。

如:LDR PC, =HandleIRQ
  // HandleIRQ位于SDRAM空間中斷程序入口表

另外注意,因為用戶實際的程序中斷入口必須位于FLASH的0x18或0x1c地址,所以Bootloader搬運程序還應具有中斷入口的跳轉功能,即把PC指針由此轉向處于SDRAM空間的中斷程序入口表,就是整個用戶程序被搬運到SDRAM的那一位置。

如:LDR PC, =HandleIRQ
  // HandleIRQ位于SDRAM空間中斷程序入口表


(1)將中斷源函數(shù)指針定義在RAM中相對的固定地址,建立中斷矢量表;

  void SetInterrupt (U32 vector, void (*handler)()){      InterruptHandlers[vector] = handler;}

(2)在程序中,調(diào)用具體某中斷源的中斷處理函數(shù);

  如:SetInterrupt(IIC_INT,IICWriteIsr);
  /* 聲明IIC中斷處理函數(shù),其中IIC_INT為 IIC中斷源序號,IICWriteIsr為 IIC的寫中斷處理函數(shù) */

(3)在0x18處的IRQ或0x1C處的FIQ中斷入口函數(shù)中,獲取中斷源、清除中斷掛起標志、通過已定義的中斷源函數(shù)指針進入用戶具體某中斷處理程序。

  void ISR_IrqHandler(void){    IntOffSet = (unsigned int)INTOFFSET;    Clear_PendingBit(IntOffSet>>2) ;(*InterruptHandlers[IntOffSet>>2])();// 調(diào)用具體某中斷處理程序}

采用動態(tài)的中斷處理方法,在中斷源較多的情況下,中斷響應時間和程序性能得到優(yōu)化。另外,在調(diào)試方面,此處理方法具有便于跟蹤調(diào)試的優(yōu)點,并且根據(jù)需要,可以方便變換中斷處理函數(shù)。

中斷調(diào)試

軟件調(diào)試可以在SDRAM中或FLASH中進行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調(diào)試應在RAM中完成,但當RAM空間小于FLASH程序空間,程序只能在FLASH運行和調(diào)試時,或者用戶希望了解程序在FLASH中實際運行情況時,就可以在FLASH中進行程序調(diào)試。

進行中斷調(diào)試時,應注意中斷入口位于SDRAM中或FLASH中0x18或0x1c地址,鏈接腳本文件必須使整個系統(tǒng)的代碼正確定位于0x0起始處,但SDRAM或FLASH對應的鏈接腳本文件及工程配置注意區(qū)別。

(1)程序在SDRAM中運行

在SDRAM中調(diào)試,使用SDRAM對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在IDE開發(fā)環(huán)境中使用擴展名*.elf);調(diào)試。

下載程序前必須啟動命令腳本文件完成前述的一些特定的操作,命令腳本文件的啟動在連接仿真器時自動進行,其中存儲區(qū)映射應與程序在SDRAM中運行時相同,保證整個系統(tǒng)的代碼正確定位于0x0起始處。下載程序的起始地址也為0x0,下載成功后便可進行調(diào)試工作。

(2)程序在FLASH中運行

在FLASH中調(diào)試,使用FLASH對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉換(*.elf轉換為*.bin);固化*.bin程序;調(diào)試。

連接仿真器后不需要下載程序,存儲區(qū)映射由本身工程中啟動文件運行完成,不需要命令腳本文件。在本環(huán)境調(diào)試過程中,可以設置兩個硬件斷點。

(3)程序從FLASH中調(diào)到SDRAM中運行

在某些應用場合,強調(diào)程序運行速度的情況下,希望程序在SDRAM中運行,這樣就需要將FLASH中存儲的程序,在系統(tǒng)上電后搬運到SDRAM某空間位置,然后自動運行。這種所謂的Bootloader技術,在DSP系統(tǒng)中常被采用。

調(diào)試過程分兩步:

(a)首先將用戶程序在SDRAM中調(diào)試通過,然后將*.bin文件固化到FLASH某一非0扇區(qū)地址空間;

(b) 將自己編寫的Bootloader搬運程序調(diào)試通過并將Bootloader.bin文件固化到FLASH的 0扇區(qū)地址空間,搬運程序在系統(tǒng)上電后,將(a)中FLASH某一非0扇區(qū)地址空間存儲的程序,搬運到在SDRAM調(diào)試中同樣的空間位置,實現(xiàn)程序在SDRAM中運行的目的。

另外注意,因為用戶實際的程序中斷入口必須位于FLASH的0x18或0x1c地址,所以Bootloader搬運程序還應具有中斷入口的跳轉功能,即把PC指針由此轉向處于SDRAM空間的中斷程序入口表,就是整個用戶程序被搬運到SDRAM的那一位置。

如:LDR PC, =HandleIRQ
  // HandleIRQ位于SDRAM空間中斷程序入口表
第三步:工程編譯和鏈接。第四步:軟件的調(diào)試。第五步:執(zhí)行文件的固化。

在整個流程中,用戶首先需要建立工程并對工程做初步的配置,包括配置處理器和配置調(diào)試設備。編輯工程文件,包括自己編寫的匯編和C語言源程序,還有工程編譯時需要編寫的鏈接腳本文件,調(diào)試過程中需要編寫存儲區(qū)映像文件和命令腳本文件,以及上電復位時的程序運行入口的啟動程序文件。

對后四種文件的理解很重要,其作用解釋如下。

(1) 鏈接腳本文件:在程序編譯時起作用。該文件描述代碼鏈接定位的有關信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對整個系統(tǒng)的代碼做正確的定位。在SDRAM中調(diào)試程序、在FLASH中調(diào)試或固化后運行的鏈接腳本文件應加以區(qū)分。(在IDE開發(fā)環(huán)境中使用擴展名*.ld)

(2)命令腳本文件:在SDRAM中調(diào)試程序時起作用。在集成環(huán)境與目標連接時、軟件調(diào)試過程中以及目標板復位后,有時需要集成環(huán)境自動完成一些特定的操作,比如復位目標板、清除看門狗、屏蔽中斷寄存器、存儲區(qū)映射等。這些操作可以通過執(zhí)行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發(fā)環(huán)境中使用擴展名*.cs)。

(3)存儲區(qū)映像文件:在SDRAM中調(diào)試程序時起作用。在軟件調(diào)試過程中訪問非法存儲區(qū)在部分處理器和目標板上會產(chǎn)生異常,如果異常沒有處理,則會導致軟件調(diào)試過程無法繼續(xù),為了防止以上問題并調(diào)整仿真器訪問速度以達到最合適的水平,提供這樣一種用于描述各個存儲區(qū)性質(zhì)的文件叫存儲區(qū)映像文件(在IDE開發(fā)環(huán)境中使用擴展名*.map)。

在程序的調(diào)試過程中可以選擇使用存儲區(qū)映像文件*.map和命令腳本文件*. cs配合程序的調(diào)試。

(4) 啟動文件:它主要是完成一些和硬件相關的初始化的工作,為應用程序做準備。一般,啟動代碼的第一步是設置中斷和異常向量;第二步是完成系統(tǒng)啟動所必須的寄存器配置;第三步設置看門狗及用戶設計的部分外圍電路;第四步是配置系統(tǒng)所使用的存儲區(qū)分配地址空間;第五步是變量初始化;第六步是為處理器的每個工作模式設置棧指針;最后一步是進入高級語言入口函數(shù)(Main函數(shù))。

中斷程序設計

中斷調(diào)試方面可以采用類似矢量中斷動態(tài)處理方式,讓中斷對應的確定地址代碼調(diào)轉到RAM的固定地址處,定義一個函數(shù)指針指向該固定地址,就可以隨時通過替換RAM固定地址處的代碼,實現(xiàn)動態(tài)改變中斷處理函數(shù)。

具體方法是:

(1)將中斷源函數(shù)指針定義在RAM中相對的固定地址,建立中斷矢量表;

  void SetInterrupt (U32 vector, void (*handler)()){      InterruptHandlers[vector] = handler;}

(2)在程序中,調(diào)用具體某中斷源的中斷處理函數(shù);

  如:SetInterrupt(IIC_INT,IICWriteIsr);
  /* 聲明IIC中斷處理函數(shù),其中IIC_INT為 IIC中斷源序號,IICWriteIsr為 IIC的寫中斷處理函數(shù) */

(3)在0x18處的IRQ或0x1C處的FIQ中斷入口函數(shù)中,獲取中斷源、清除中斷掛起標志、通過已定義的中斷源函數(shù)指針進入用戶具體某中斷處理程序。

  void ISR_IrqHandler(void){    IntOffSet = (unsigned int)INTOFFSET;    Clear_PendingBit(IntOffSet>>2) ;(*InterruptHandlers[IntOffSet>>2])();// 調(diào)用具體某中斷處理程序}

采用動態(tài)的中斷處理方法,在中斷源較多的情況下,中斷響應時間和程序性能得到優(yōu)化。另外,在調(diào)試方面,此處理方法具有便于跟蹤調(diào)試的優(yōu)點,并且根據(jù)需要,可以方便變換中斷處理函數(shù)。

中斷調(diào)試

軟件調(diào)試可以在SDRAM中或FLASH中進行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調(diào)試應在RAM中完成,但當RAM空間小于FLASH程序空間,程序只能在FLASH運行和調(diào)試時,或者用戶希望了解程序在FLASH中實際運行情況時,就可以在FLASH中進行程序調(diào)試。

進行中斷調(diào)試時,應注意中斷入口位于SDRAM中或FLASH中0x18或0x1c地址,鏈接腳本文件必須使整個系統(tǒng)的代碼正確定位于0x0起始處,但SDRAM或FLASH對應的鏈接腳本文件及工程配置注意區(qū)別。

(1)程序在SDRAM中運行

在SDRAM中調(diào)試,使用SDRAM對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在IDE開發(fā)環(huán)境中使用擴展名*.elf);調(diào)試。

下載程序前必須啟動命令腳本文件完成前述的一些特定的操作,命令腳本文件的啟動在連接仿真器時自動進行,其中存儲區(qū)映射應與程序在SDRAM中運行時相同,保證整個系統(tǒng)的代碼正確定位于0x0起始處。下載程序的起始地址也為0x0,下載成功后便可進行調(diào)試工作。

(2)程序在FLASH中運行

在FLASH中調(diào)試,使用FLASH對應的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉換(*.elf轉換為*.bin);固化*.bin程序;調(diào)試。

連接仿真器后不需要下載程序,存儲區(qū)映射由本身工程中啟動文件運行完成,不需要命令腳本文件。在本環(huán)境調(diào)試過程中,可以設置兩個硬件斷點。

(3)程序從FLASH中調(diào)到SDRAM中運行

在某些應用場合,強調(diào)程序運行速度的情況下,希望程序在SDRAM中運行,這樣就需要將FLASH中存儲的程序,在系統(tǒng)上電后搬運到SDRAM某空間位置,然后自動運行。這種所謂的Bootloader技術,在DSP系統(tǒng)中常被采用。

調(diào)試過程分兩步:

(a)首先將用戶程序在SDRAM中調(diào)試通過,然后將*.bin文件固化到FLASH某一非0扇區(qū)地址空間;

(b) 將自己編寫的Bootloader搬運程序調(diào)試通過并將Bootloader.bin文件固化到FLASH的 0扇區(qū)地址空間,搬運程序在系統(tǒng)上電后,將(a)中FLASH某一非0扇區(qū)地址空間存儲的程序,搬運到在SDRAM調(diào)試中同樣的空間位置,實現(xiàn)程序在SDRAM中運行的目的。

另外注意,因為用戶實際的程序中斷入口必須位于FLASH的0x18或0x1c地址,所以Bootloader搬運程序還應具有中斷入口的跳轉功能,即把PC指針由此轉向處于SDRAM空間的中斷程序入口表,就是整個用戶程序被搬運到SDRAM的那一位置。

如:LDR PC, =HandleIRQ
  // HandleIRQ位于SDRAM空間中斷程序入口表

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕 在线观看 | 免费看黄色小视频 | 亚洲综合视频 | 午夜av成人| 在线亚洲免费 | 精品影院 | 国产一级一级毛片 | 一区观看 | www.天天操 | a在线免费观看视频 | 日韩欧美中文在线 | 免费在线视频一区二区 | 自拍偷拍亚洲视频 | 成人精品在线观看 | 日韩中文字幕在线不卡 | 亚洲h在线观看 | 久久99精品久久久 | 天堂成人国产精品一区 | av在线免费不卡 | 亚洲视频不卡 | 久久精品国产免费 | 国产精品欧美一区二区三区 | 一区二区三区四区五区在线视频 | 国产精品日韩欧美一区二区三区 | 国产精品视频久久久久 | 中文字幕免费在线观看 | 99re在线视频| 久久综合九色综合欧美狠狠 | 国产99久久精品一区二区永久免费 | 国产欧美在线播放 | 国产精品久久久久一区二区三区 | 日韩国产精品一区二区三区 | 久久这里有精品 | 欧美精品一区二区在线观看 | 中文日韩在线 | 1000部精品久久久久久久久 | 久久久久网站 | 久久在视频 | 国产精品久久久久久久岛一牛影视 | 天天做日日做 | 亚洲精品国产一区 |