第一次用430芯片,也是第一次接触IAR编译器。
事情是这样的:
我在FLASH中预留了一段(512bytes)空间当EEPROM使用。但随着程序的不断增加,FLASH剩余空间越来越小,编译后的CODE地址已经到了我预留的FLASH空间,事实上预留空间后还有FLASH空间。
我试着将预留空间定义一个绝对地址变量,使程序CODE代码越过这段预留空间,但始终不成功。
那位兄弟遇到过这种情况,请指点一二。
__no_init char_arr_static[512]@0xFC00;
上面的定义方式貌似没用,CODE依旧会被编译连接到0xFC00所在段中。
没用过430
arm有icf文件控制变量分配
430也有类似的吧
430貌似没有icf文件,我找过,没看到。不过还是多谢!
那就看看Project -> Options -> Linker的设置,应该就在那里配置的
430不需预留FLASH,多数型号本身都有预留信息段0x1000-0x10FF作为数据存储用,共256字节,每64字节为一块,可按块擦除。不仔细看数据手册的错。
info flash这块是知道的。
当初考虑到存储的这个变量是累计流量,需要频繁读写,所以就专门开辟了一段flash(非info段)。
将这段flash做一个环形操作,只在数据储存到段开始时执行擦除操作,其他位置直接执行写操作即可,这样减少此段flash的擦除操作,增加flash使用寿命。
这样啊,IAR FOR 430里面不是icf,是xcl后缀的,用法跟icf差不多,自己看看应该就能明白。
多谢!我先找找看!
__no_init uint32_t eepromdata[128]@0x20003E00;
这个是我现在在用的,正常。用在新唐IC上。