[STM32]

const char _info[] = "hello world"; 怎么强制编译链接进 bin 文件里面去

[复制链接]
591|8
手机看帖
扫描二维码
随时随地手机跟帖
taobaofarmer| | 2021-2-2 12:00 | 显示全部楼层
char code _info[]  = "hello world";

使用特权

评论回复
ayb_ice| | 2021-2-2 13:28 | 显示全部楼层
static volatile const char info[] = "hello world";

使用特权

评论回复
chongdongchen| | 2021-2-2 13:29 | 显示全部楼层
用不到的话,就是没意义的,会被优化掉。
实在要编译进去,可以专门写个调用它的函数,至少执行一次这个函数。
不过我好像明白楼主的苦心了。

使用特权

评论回复
fcccc| | 2021-2-2 14:06 | 显示全部楼层
本帖最后由 fcccc 于 2021-2-3 21:06 编辑

1,直接修改bin文件

2,阅读链接器器手册,根据格式定义一个文件不使用优化.
   以Keil 为例:
  工程中添加一个源文件,比如CopyRight.c 将你的字符串变量放在CopyRight.c中;
  在工程选项的linker命令窗口添加linker命令--keep=CopyRight.o

  这样链接时保留CopyRight.c的所有内容.里面放的东西有没有用到都会被保留.


3,最简单直接的指定一个地址:
以Arm Keil为例
#define VERSION_ADDR xxxx;//xxxx是一个flash地址
const uint8_t version[] __attribute__((at( VERSION_ADDR )))="Hello World";
你都特意指定地址了,链接器肯定不敢把这个给你丢弃了.


使用特权

评论回复
diweo| | 2021-2-2 17:06 | 显示全部楼层
函数和变量都可以绝对定位,参考以下代码:
void  SomeFunction()  __attribute__((section(".ARM.__at_0x0800D000")));  
uint32_t  SomeVariable[]  __attribute__((section(".ARM.__at_0x08001100")));

使用特权

评论回复
评论
diweo 2021-2-4 15:57 回复TA
@xiaofei558008 :变量前面可能要加volatile 
xiaofei558008 2021-2-3 19:10 回复TA
试过不行啊 
Prry| | 2021-2-2 17:44 | 显示全部楼层
没地方调用,编译器认为是没用的,优化掉了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

939

帖子

13

粉丝