xiaoyuhzou1228的个人空间 https://www.eechina.com/space-uid-139997.html [收藏] [复制] [RSS]

博客

嵌入式编程第二篇:ARM单片机如何将函数定义到指定程序地址

热度 10已有 1374 次阅读2019-4-9 14:26

在单片机编程使用中,会涉及到将某些函数定义到指定的code区。此时需要对工程文件进行配置修改才可完成。本期针对ARM平台单片机做出说明介绍

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单片机将函数定义到指定程序地址的方法已经实现。


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (21 个评论)

回复 小屁孩123 2019-4-11 13:57
LKT4304 Code区空间是多大的?
回复 ?-о 2019-4-11 14:11
专业性太强了,看不懂!当技术储备吧!学习了………
回复 Mr.Wang 2019-4-11 16:36
同感,受教了,谢谢楼主分享!
回复 Test_wf 2019-4-11 19:16
请问4304都支持什么接口?
回复 xiaoyuhzou1228 2019-4-11 19:34
SPI/IIC 都支持的,但同时只能使用一个
回复 wang0327 2019-4-12 09:14
我对这个技术很感兴趣,我会一直关注的
回复 tyl20100 2019-4-12 09:41
1 LKT4304是做什么用的?用于什么行业?
2 LKT4304是新产品吗?什么时候推出的,安全性如何?
3 看起来有些复杂,开发会不会太难啊,有谁用过说一下
回复 miniminimini 2019-4-12 11:29
保护程序和重要数据都行,好多行业都能用到。
回复 kessy1 2019-4-12 15:58
LKT4304好像是他们去年新推出的32位的加密芯片,可以进行程序移植,安全等级很高
回复 tyl20100 2019-4-12 16:52
正好在做一款产品的加密,看到楼主的的文章,又有了新的思路,感谢楼主的分享,这样的好文章楼主要多发表一点。真是雪中送炭啊!
回复 wang0327 2019-4-12 17:01
这文章对加密芯片的算法讲得挺细,说明他们公司的技术人员很专业,技术能力很强,产品的安全度肯定很高
回复 Test_wf 2019-4-12 19:23
最近浏览过楼主的多篇文章,请问文中说到的LKT4304加密芯片和嵌入式编程第一篇中提到的LKT4106加密芯片其功能有啥区别?
回复 miniminimini 2019-4-13 08:03
具体你问问厂商,我只知道都是IIC接口。
回复 kessy1 2019-4-13 10:15
文中提到的测试环境是LKT4304加密芯片算法工程,那是不是说这种编程方法只能用于LKT系列的加密芯片中?
回复 Mr.Wang 2019-4-13 19:28
我认为算法工程跟芯片的型号应该是一一对应才可以。不然对于不同的芯片配置不同,肯定无法正常编译。
回复 dg336699 2019-4-13 21:03
对嵌入式编程和ARM单片机感兴趣的大神可以过来看看了,讲解的真的很明白很详细啊!!
回复 QL87 2019-4-14 20:49
“ (section(".ARM.__at_0x00031000" ” 是arm指令集的指令吗?
回复 Mr.Wang 2019-4-15 06:11
这不都写着ARM 呢吗,难道是51的不成,兄弟
回复 QL87 2019-4-15 09:20
这种方法是不错,不过不是特殊需求或是专业人士还是慎用的比较好。强制转换地址如果错误编译器不会报错的容易出问题。
回复 ?-о 2019-4-15 15:09
文章写得这么详细,不怕被同行业抄袭啊?看来有两笔刷子
12下一页

facelist

您需要登录后才可以评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
返回顶部