• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

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

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

1、测试目标

将函数testaddr定义到0x6000地址

2、测试环境

LKT4106加密芯片算法工程、KEIL-C51编译软件、

3、实现步骤

3.1使用KEIL软件导入LKT4106算法工程(KEIL软件基本操作不再敷述,如不清楚请自行百度)

 

3.2在App_Main.c文件中声明测试函数testaddr:

extern void testaddr(u8 xdata *in,u8 xdata *out,u8 len);

 

3.3在App_fun.c文件中实现测试函数testaddr:

void testaddr(u8 xdata *in,u8 xdata *out,u8 len){

  u8 i;

    

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

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

}

 

3.4在App_Main.c文件中调用测试函数testaddr,此处省略

 

3.5编译算法工程后,在\LKT4106_AppDemo\Out\Bin\路径下找到LKT4106_AppDemo.M51,打开该文件。

 

3.6找到* * C O D E   M E M O R Y * *部分,寻找到testaddr编译后存储的地址,注意:根据编译规则,testaddr函数会转换为大写格式,并加上函数所在文件的名称。本例中,编译后的默认地址如图1所示。

图1.默认编译链接地址

 

3.7回到算法工程,选择Project->Options for Target ...->BL51 Misc,点击Edit按钮调出lin文件,如图2所示

图2.打开lin文件

 

3.8在LKT4106_App.lin文件中,按照下图所示,将testaddr函数指定到程序区的目标地址,本例将其由默认的0x48B0地址更改到0x6000地址,如图3所示。

图3.更改目标函数存储的地址

 

3.9编译算法工程,并重新打开LKT4106_AppDemo.M51文件,查看testaddr函数所在地址,如图4所示,该函数已经更换到0x6000地址上。

图4.重定义后目标函数所在地址

 

至此,51单片机将函数定义到指定程序地址的方法已经实现。下一篇将介绍如何将ARM中的函数地址进行更改。

全部回复(21)
正序查看
倒序查看
gxg1122
LV.10
2
2019-03-22 12:42
期待更新  。
0
回复
2019-03-25 14:11
@gxg1122
期待更新 。
LKT4106 是什么接口的芯片呢?支持什么算法?
0
回复
小帆儿
LV.5
4
2019-03-25 16:12
@小屁孩456
LKT4106是什么接口的芯片呢?支持什么算法?
这款是IIC接口,支持DES/3DES,性价比很高
0
回复
114W1
LV.5
5
2019-03-25 16:24
@小帆儿
这款是IIC接口,支持DES/3DES,性价比很高
专业性太强了,看不懂,还是请大神来讲解一下吧
0
回复
邓女士
LV.5
6
2019-03-25 16:40
@114W1
专业性太强了,看不懂,还是请大神来讲解一下吧
图文并茂,讲得很详细;让我对单片机编程中的函数运用有了更深的了解,谢谢分享,会继续拜读楼主的文章
0
回复
Mr_Wang_
LV.4
7
2019-03-25 17:01
@小帆儿
这款是IIC接口,支持DES/3DES,性价比很高
楼主,我问下,测试环境中的加密芯片算法工程在哪儿可以下载,我想继续深入研究一下!
0
回复
宇宙王
LV.3
8
2019-03-25 20:22
@Mr_Wang_
楼主,我问下,测试环境中的加密芯片算法工程在哪儿可以下载,我想继续深入研究一下!
可以向公司申请样片
0
回复
2019-03-26 13:32
@宇宙王
可以向公司申请样片
这种的网上不会有,得找代理或原厂要资料
0
回复
Hex315
LV.5
10
2019-03-26 13:56
@miniminimini
这种的网上不会有,得找代理或原厂要资料
楼主文章中提到的LKT4106加密芯片是你们的主打加密芯片吗?有啥功能?
0
回复
BLoun
LV.5
11
2019-03-26 18:41
@Hex315
楼主文章中提到的LKT4106加密芯片是你们的主打加密芯片吗?有啥功能?
我了解到这个公司有根据不同的接口,是有很多产品线的。具体要根据项目需求选取最适合自己的芯片,并不是非得一定要选取主打不主打。
0
回复
2019-03-27 09:09
@BLoun
我了解到这个公司有根据不同的接口,是有很多产品线的。具体要根据项目需求选取最适合自己的芯片,并不是非得一定要选取主打不主打。
我gongsi的客户使用的是LKT4101,据说用的挺好的
0
回复
2019-03-27 09:24
@人称福爷
我gongsi的客户使用的是LKT4101,据说用的挺好的
这个LKT4106是单片机吗?哪家公司的产品,为什么之前没有遇到过呢?
0
回复
lingkes2006
LV.2
14
2019-03-27 17:48
@小屁孩456
这个LKT4106是单片机吗?哪家公司的产品,为什么之前没有遇到过呢?
LKT4106是加密芯片,凌科芯安的,好像去年新推出的IIC接口
0
回复
Mr_Wang_
LV.4
15
2019-03-27 19:54
@lingkes2006
LKT4106是加密芯片,凌科芯安的,好像去年新推出的IIC接口
文章基本看明白了。但谁能说说LKT4106是怎么用的?在什么场合下用?有什么用途??
0
回复
邓女士
LV.5
16
2019-03-27 20:52
@Mr_Wang_
文章基本看明白了。但谁能说说LKT4106是怎么用的?在什么场合下用?有什么用途??
我司用过这个4106,主要使用与算法移植,试用与嵌入式版权保护,可以实现简单的对比认证、参数保护、算法移植等功能
0
回复
Hex315
LV.5
17
2019-03-27 21:48
@邓女士
我司用过这个4106,主要使用与算法移植,试用与嵌入式版权保护,可以实现简单的对比认证、参数保护、算法移植等功能
应该讲讲变量怎么定义到固定地址
0
回复
2019-03-28 08:56
@Hex315
应该讲讲变量怎么定义到固定地址
楼主所说的LKT4106加密芯片和以往介绍的加密芯片有什么不同之处吗?
0
回复
BLoun
LV.5
19
2019-03-28 16:45
@人称福爷
楼主所说的LKT4106加密芯片和以往介绍的加密芯片有什么不同之处吗?
功能都是一样的,只是通讯接口不同。
0
回复
114W1
LV.5
20
2019-03-28 16:57
@BLoun
功能都是一样的,只是通讯接口不同。
code区是属于自定义算法区吗?
0
回复
2019-03-28 17:03
@114W1
code区是属于自定义算法区吗?
CODE区就是程序存储区,你这么理解也没错
0
回复
阿伦学
LV.1
22
2019-03-28 17:20
@miniminimini
CODE区就是程序存储区,你这么理解也没错
文章很好,很受用,开始期待楼主的下一篇文章,如何将ARM中的函数地址进行更改。
0
回复