由于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.
哪位大神来指教一下如何解决我这两个问题?
举报
举报
更多回帖