嵌入式編程(二):ARM單片機如何將函數 定義到指定程序地址

在單片機編程使用中,會涉及到將某些函數定義到指定的code區。此時須要對工程文件進行配置修改纔可完成。本期針對ARM平臺單片機作出說明介紹算法

1.測試目標編程

將函數Communication_Test定義到Code區的指定地址0x1000位置函數

2.測試環境測試

LKT4304加密芯片算法工程、KEIL-ARM編譯軟件、加密

3.實現步驟spa

3.1 使用KEIL軟件導入LKT4304算法工程(KEIL軟件基本操做再也不敷述,如不清楚請自行百度)code

3.2 在App_Main.c文件中聲明測試函數Communication_Test:blog

extern void Communication_Test(u8 *in,u8 *out,u8 len);get

3.3 在App_fun.c文件中實現測試函數Communication_Test:it

void Communication_Test(u8 *in,u8 *out,u8 len);{

  u8 i;

  for(i=0;i < len;i++)

   out[i]= in[i]+1;

}

3.4 在App_Main.c文件中調用測試函數Communication_Test,此處省略

3.5 編譯算法工程後,在\LKT4304_AppDemo\Out\Lst\路徑下找到 LKT4304_AppDemo.map,打開該文件。

3.6 尋找到Communication_Test編譯後存儲的地址。本例中,編譯後的默認地址如 圖1所示。

 

圖1. 默認編譯連接地址

3.7 回到算法工程,選擇Project->Options for Target ...->Linker,點擊Edit按鈕調 sc文件,如圖2所示

圖2. 打開sc文件

3.8 在ARM_App.sc文件中,Code區起始地址是0x30000,以下圖所示:

圖3.sc文件中定義的Code區

  將函數Communication_Test定義到Code區的指定地址0x1000位置,須要在 App_fun.c文件中增長 void Communication_Test(u8  *in,u8 *out,u8 len) __attribute__((section(".ARM.__at_0x00031000"))); 這樣一句代碼。以下圖所示:

3.9 編譯算法工程,並從新打開\LKT4304_AppDemo\Out\Lst\下的map文件,查看 Communication_Test函數所在地址,如圖4所示,該函數已經更換到0x31000地址上, 代表Communication_Test函數已經定義到Code區的0x1000地址。

圖4. 重定義後目標函數所在地址

至此,ARM單片機將函數定義到指定程序地址的方法已經實現。

相關文章
相關標籤/搜索