嵌入式技术论坛
直播中

熊本熊

9年用户 1492经验值
擅长:处理器/DSP
私信 关注
[问答]

请问怎样去修改STM32F2中ROM分区的分散加载文件呢

由于STM32F2系列的flash分区是前面小,后面大,所以如果想要把一些配置参数保存在芯片flash中只能考虑保存在前面的小sector中。 而如此一来,要么写一个小小的跳转程序跳过那个保存参数的sector。应用程序跑在后面。但是这样的作法弊端就是需要两份程序。 另一个方法是我在想,通过修改链接文件,例如MDK下修改分散加载文件让其中保存参数的sector不放任何东西。修改例如下面这样:

ER_IROM1 0x08000000 0x00004000 { ; load address = execution address

.o (RESET, +First) (InRoot$Sections)

}

RW_IRAM1 0x20000000 0x00020000 { ; RW data

.ANY (+RW +ZI)

}

}

LR_IROM2 0x08008000 0x00038000 { ; load region size_region

ER_IROM2 0x08008000 0x00038000 { ; load address = execution address

.ANY (+RO)

.ANY (+XO)

}

}

上面这种方式可以成功链接空出 [table] [tr][td=206]0x0800 4000 - 0x0800 7FFF[/td][/tr] [/table]这段ROM区域。但是我遇到一个问题,就是在最后的fromelf --bin !L --output xxx.bin的时候出现了问题,这条指令无法生成一个bin文件,而是生成了一个文件夹,文件里面包含了如上两个执行区名的文件。 然后我又想到另一个方法,修改执行地址,只用一个加载段,sct文件如下:LR_IROM1 0x08000000 0x000040000 { ; load region size_region

ER_IROM1 0x08000000 0x00004000 { ; load address = execution address

.o (RESET, +First) (InRoot$Sections)

}

ER_IROM2 0x08008000 0x00038000 { ; load address = execution address

.ANY (+RO)

.ANY (+XO)

}

RW_IRAM1 0x20000000 0x00020000 { ; RW data

.ANY (+RW +ZI)

}

}```


这样一来,链接时就报错了:.\build\keil\Obj 3z_station_mcu.axf: Error: L6788E: Scatter-loading of execution region ER_IROM2 to execution address [0x08008000,0x0801e308) will cause the contents of execution region ER_IROM2 at load-address [0x0800020c,0x08016514) to be corrupted at run-time.

哪位大神来指教一下如何解决我这两个问题?

回帖(2)

LL-LING宁

2022-7-22 10:10:53
我在项目中也是这样用地,就让他生成一个目录共2份BIN文件。
量产时用一小段python就打包了。
举报

abdkjshd

2022-7-22 10:11:03
用一个加载区,两个执行空间,也就是第二种方法解决的。需要在第二个知行区加上FIXED属性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分