c语言 常量 指定地址,keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量...
之前一直是用v5编译,编译速度慢,换成V6编译速度差不多快50% ,而且arm后期只维护v5编译器不在更新v5编译器。切换到V6编译器大势所趋,把之前v5且换到v6需要如下更改:
1. CMSIS包需要更新到5.0以上
2. v5在指定地址定义常量: const uint32_t AppStartCfg[2] __attribute__((at(0x0))) = {0xffffffff,0xaaaaaaaa};
v6在指定地址定义常量: const uint32_t AppStartCfg[2] __attribute__((section(".ARM.__at_0x0")))= {0xffffffff,0xaaaaaaaa};
3, 在定义函数在RAM中运行:(做BootLoader时,freescal单片机要求flash操作相关函数必须在ram中运行)
v5编译器:
#pragma arm section code = "RAMCODE"
static uint8_t ExecRamCmd (uint8_t *cmd, uint8_t len)
{
}
#pragma arm section
然后添加链接文件:
RW_m_data m_data_start m_data_size { ; RW data
*.o(RAMCODE)
.ANY (+RW +ZI)
}
v6编译器:
#pragma clang section text = "RAMCODE"
static uint8_t ExecRamCmd (uint8_t *cmd, uint8_t len)
{
}
#pragma clang section
同样V5修改链接文件
内容来源于网络如有侵权请私信删除
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)