杭州论坛网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1059|回复: 1
打印 上一主题 下一主题

嵌入式编程(二):ARM单片机如何将函數定义到指定程序地址

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-11 16:17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    将函数Communication_Test定义到Code区的指定地址0x3.9编译算法工程,并重新打开\LKT4304_AppDemo\Out\



在单片機編程使用中,會涉及到将某些函數定義到指定的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= in+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好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

沙发
发表于 2020-3-11 16:17:12 | 只看该作者
LKT4304 Code区空间是多大的?

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|杭州网

GMT+8, 2024-5-3 12:41 , Processed in 0.187500 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表