当前位置:网站首页>指定变量和函数保存位置
指定变量和函数保存位置
2022-08-06 05:20:00 【xflySnail】
变量保存位置
MDK
定义一个数组比如value[],让数组的首地址指向特定的SRAM地址,比如0x20000100
1)__align(8) uint8_t value[20] __attribute__((at(0x20000100))); //MDK中定义
2)int value[] __attribute__((section(".ARM.__at_0x20000100"))) = {
0x01, 0x02}; GCC中定义
IAR
方式一:
占用内存必须是4的倍数(int 、uint、float、double,如是int8、uint8的话需要数组字节数是4的倍数,如是short的话需要数值字节数需要是2的倍数)
__root :强制编译,是IAR的扩展关键字,保证没有使用的函数或者变量也能够包含在目标
#pragma location = 0x000FFF00
__root char data[] =
{
0x0,0x1,0x2,0x3
};
方式二:
类型必须是4的倍数(int 、uint、float、double),需要调用否则会被优化,map中就看不到
int data @0x000FFE00 = 3;
指定函数的存放地址
MDK
方式一:
// 头文件申明时指定
void func (void) __attribute__((section(".ARM.__at_0x00000200")));
void func (void)
{
}
方式二
__attribute__((section(".ARM.__at_0x00010000"))) void func (void)
{
}
IAR
调整ROM、RAM
icf的选择根据工程目标板选择:
// icf文件中添加
place in ROM_region {
readonly section myfunc};
// 代码编写时指定
#pragma default_function_attributes = @ "myfunc" // 指定
int32_t main(void);
#pragma default_function_attributes = // 取消指定


指定ROM地址

place at address mem:0x1f00 {
readonly section .MYTEST };
或者申请指定区域写法
define region DATA_region = mem:[from 0x1ff0 to 0x2ff0 ];
place in DATA_region {
readwrite section .MYTEST };
单个函数:
在函数后面使用@指定到section名
// 强制指定代码存放位置
int32_t main(void)@".MYTEST"
{
CLK_Init();
while(1)
{
};
}

多个函数指定
#pragma default_function_attributes = @ ".MYTEST" /* 将函数放置到“.MYTEST”section */
int32_t main(void);
void fun(void);
#pragma default_function_attributes = /* 停止将函数放置到“.MYTEST”section */

方法没调用的会被优化,或者使用__root强制编译
边栏推荐
猜你喜欢
随机推荐
通讯简单测试—Modscan32使用简介-Susie 周
【MM32】EVBoard 之 MM32F3270系列 - ADC通道采集和内部温度传感器
2020广工文远知行杯新生程序设计竞赛(初赛)A题
使用Canvas 绘制施工进度/影像 图,支持滚动、缩放、拖拽、定位、折叠、下载、过渡,支持快捷操作
读取PSACAL VOC,训练FCN全流程
什么是过滤器
第七章 数据查询
安科瑞DTSD/ADL400通讯协议说明-Susie 周
论文阅读:M2I: From Factored Marginal Trajectory Prediction to Interactive Prediction
h5学习笔记
2020广工文远知行杯新生程序设计竞赛(初赛)B题+C题
文献阅读:卷积神经网络在图像识别中的应用研究综述
keep-alive
读写数据的路径设置
阿里巴巴-淘客首页动态部署方案
常用数据类型的拓展方法
2020广工文远知行杯新生程序设计竞赛(初赛)D题
文件上传之解析漏洞与waf绕过
达梦error:[-70028]:创建SOCKET连接失败
遮罩覆盖的DOM,如何触发点击 等一系列事件









