嵌入式编程(二):ARM单片机如何将函数 定义到指定程序地址
在单片机编程使用中,会涉及到将某些函数定义到指定的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单片机将函数定义到指定程序地址的方法已经实现。
- 【VS开发】程序如何捕捉signal函数参数中指定的信号
- IAR中如何定向把数组和函数放在指定的地址单元
- ARM如何指定函数运行在RAM--KEIL
- 程序如何捕捉signal函数参数中指定的信号
- 基于visual c++之windows核心编程代码分析(44)监测任意程序函数起始地址
- 什么是嵌入式编程?什么是ARM?如何学习? (续)
- 基于visual c++之windows核心编程代码分析(44)监测任意程序函数起始地址
- ARM NEON 编程系列4——如何将neon用来优化我们的程序
- 裸机程序常识1 _start程序入口标号 -Ttext链接地址作用,如何使用uboot中的函数
- ARM如何指定函数运行在RAM--KEIL
- KEIL编程中如何重定义printf()函数,以便在后来的开发中使用此函数进行串口数据输出
- 基于visual c++之windows核心编程代码分析(44)监测任意程序函数起始地址
- ARM嵌入式编程(无操作系统、基于MDK)之最简单的程序:点亮一个LED灯
- 51单片机中怎么将函数或者变量定位到指定地址,非常有用
- 如何在 Linux Shell 编程中定义和使用函数
- 网址重写 由一个任意或是自己定义的地址转到指定的处理程序 4000 上来
- 如何将调用的lib里的函数放到指定地址
- 在MFC下如何定义全局变量和全局函数(转)
- 查看正在运行的动态链接的程序中,某个动态库中函数的虚拟地址
- Windows 核心编程研究系列之二:读取指定物理内存地址中的内容