嵌⼊式编程(⼆):ARM单⽚机如何将函数定义到指定程序地
址
在单⽚机编程使⽤中,会涉及到将某些函数定义到指定的code区。此时需要对⼯程⽂件进⾏配置修改才可完成。本期针对ARM平台单⽚机做出说明介绍软件测试app
1.测试⽬标
将函数Communication_Test定义到Code区的指定地址0x1000位置
2.测试环境
LKT4304加密芯⽚算法⼯程、KEIL-ARM编译软件、
3.实现步骤
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⽂件中实现测试函数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,打开该⽂件。
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单⽚机将函数定义到指定程序地址的⽅法已经实现
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论