xiaoyuhzou1228的個(gè)人空間 http://selenalain.com/space-uid-139997.html [收藏] [復制] [RSS]

博客

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

熱度 10已有 1598 次閱讀2019-4-9 14:26

在單片機編程使用中,會(huì )涉及到將某些函數定義到指定的code區。此時(shí)需要對工程文件進(jìn)行配置修改才可完成。本期針對ARM平臺單片機做出說(shuō)明介紹

1、測試目標

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

2、測試環(huán)境

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

3、實(shí)現步驟

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

 

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

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

 

3.3 App_fun.c文件中實(shí)現測試函數Communication_Test

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,打開(kāi)該文件。

 

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

1. 默認編譯鏈接地址

 

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

2. 打開(kāi)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 編譯算法工程,并重新打開(kāi)\LKT4304_AppDemo\Out\Lst\下的map文件,查看 Communication_Test函數所在地址,如圖4所示,該函數已經(jīng)更換到0x31000地址上, 表明Communication_Test函數已經(jīng)定義到Code區的0x1000地址。

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

 

至此,ARM單片機將函數定義到指定程序地址的方法已經(jīng)實(shí)現。

發(fā)表評論 評論 (21 個(gè)評論)

回復 小屁孩123 2019-4-11 13:57
LKT4304 Code區空間是多大的?
回復 ?-о 2019-4-11 14:11
專(zhuān)業(yè)性太強了,看不懂!當技術(shù)儲備吧!學(xué)習了………
回復 Mr.Wang 2019-4-11 16:36
同感,受教了,謝謝樓主分享!
回復 Test_wf 2019-4-11 19:16
請問(wèn)4304都支持什么接口?
回復 xiaoyuhzou1228 2019-4-11 19:34
SPI/IIC 都支持的,但同時(shí)只能使用一個(gè)
回復 wang0327 2019-4-12 09:14
我對這個(gè)技術(shù)很感興趣,我會(huì )一直關(guān)注的
回復 tyl20100 2019-4-12 09:41
1 LKT4304是做什么用的?用于什么行業(yè)?
2 LKT4304是新產(chǎn)品嗎?什么時(shí)候推出的,安全性如何?
3 看起來(lái)有些復雜,開(kāi)發(fā)會(huì )不會(huì )太難啊,有誰(shuí)用過(guò)說(shuō)一下
回復 miniminimini 2019-4-12 11:29
保護程序和重要數據都行,好多行業(yè)都能用到。
回復 kessy1 2019-4-12 15:58
LKT4304好像是他們去年新推出的32位的加密芯片,可以進(jìn)行程序移植,安全等級很高
回復 tyl20100 2019-4-12 16:52
正好在做一款產(chǎn)品的加密,看到樓主的的文章,又有了新的思路,感謝樓主的分享,這樣的好文章樓主要多發(fā)表一點(diǎn)。真是雪中送炭!
回復 wang0327 2019-4-12 17:01
這文章對加密芯片的算法講得挺細,說(shuō)明他們公司的技術(shù)人員很專(zhuān)業(yè),技術(shù)能力很強,產(chǎn)品的安全度肯定很高
回復 Test_wf 2019-4-12 19:23
最近瀏覽過(guò)樓主的多篇文章,請問(wèn)文中說(shuō)到的LKT4304加密芯片和嵌入式編程第一篇中提到的LKT4106加密芯片其功能有啥區別?
回復 miniminimini 2019-4-13 08:03
具體你問(wèn)問(wèn)廠(chǎng)商,我只知道都是IIC接口。
回復 kessy1 2019-4-13 10:15
文中提到的測試環(huán)境是LKT4304加密芯片算法工程,那是不是說(shuō)這種編程方法只能用于LKT系列的加密芯片中?
回復 Mr.Wang 2019-4-13 19:28
我認為算法工程跟芯片的型號應該是一一對應才可以。不然對于不同的芯片配置不同,肯定無(wú)法正常編譯。
回復 dg336699 2019-4-13 21:03
對嵌入式編程和ARM單片機感興趣的大神可以過(guò)來(lái)看看了,講解的真的很明白很詳細。!
回復 QL87 2019-4-14 20:49
“ (section(".ARM.__at_0x00031000" ” 是arm指令集的指令嗎?
回復 Mr.Wang 2019-4-15 06:11
這不都寫(xiě)著(zhù)ARM 呢嗎,難道是51的不成,兄弟
回復 QL87 2019-4-15 09:20
這種方法是不錯,不過(guò)不是特殊需求或是專(zhuān)業(yè)人士還是慎用的比較好。強制轉換地址如果錯誤編譯器不會(huì )報錯的容易出問(wèn)題。
回復 ?-о 2019-4-15 15:09
文章寫(xiě)得這么詳細,不怕被同行業(yè)抄襲?看來(lái)有兩筆刷子
12下一頁(yè)

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页