xhx321 发表于 2018-8-10 09:10:45

如何将特殊的数据块放在flash指定位置,并分开烧写?

各位老司机,各位大虾,各位高手。本人是MCU小白,如果问题太弱请勿喷。
事情是这样的:针对STM32L0的参考板NUCLEO-L073RZ请教一个综合性的方案。参考板烧写debug都是用得ST-LINK接口。
需求是这样的:程序有一片特殊的数据(const structure TYPE_A INSTANT_A),由于这片数据区最终用户需要用其他工具修改并重新烧回Flash,因此需要生成的image文件,其内容要将INSTANT_A和程序其他部分(DATA+CODE)分成两部分并连续摆放。请问如何来实现 (需要知道如何coding, link, flash)?之前有一个其他MCU平台的参考。 他是把INSTANT_A放到flash 的头部,然后用另外的烧写工具配合来烧写实现。但是不知道在STM32的平台如何实现类似的方案。
小弟谢过先

原来的你 发表于 2018-8-10 09:28:48

直接jlink 烧写即可

发表于 2018-8-10 09:33:58

ST可以自己写少写工具来写数据到指定的位置,楼主可以定义指针到指定的FLASH地址进行读取。也可以考虑用上位机软件通过应用程序的串口来实现,应用程序将这段数据写到指定的位置。其实解决方案特别多,自己列一些出来,选择一个最合适的。

MrJiu 发表于 2018-8-10 10:04:02

我好像以前在哪里看过,把数据通过iar/keil某些关键字,然后可以定义到绝对地址上面。。。虽然这忘了,但是我还有另外一个办法。。。先用const定义你所需要得数据。。。然后程序里面在写入到指定flash上面不就可以啦。。。当然了,肯定要加一个读取指定地方,来验证是否曾经写过,不可能每次开机都写一次,仅仅只需要第一次烧写程序后,程序会自动写一次。。。:lol:lol:lol

tanic 发表于 2018-8-10 10:31:38

1.串口助手+txt文件,mcu解析txt文件数据保存至指定flash地址
2.STVP可以指定flash地址烧写hex和s19文件,但是.bin好像不行,jlink不清楚。
3.自己写上位机,串口通讯,制定简单数据传输协议,这个最稳妥。

toofree 发表于 2018-8-10 14:37:16

指定地址保存数据会。保存程序还不会,程序只会指到ROM段存储,精确不到地址。

unsigned char const DataStr[] __attribute__((at(0X08008000)))=__DATE__;









xhx321 发表于 2018-8-10 15:23:13

非常感谢之前大家的回答。
按各位的方法,现在能明确可以通过__attribute__(at())来指定位置。
请问如果用户想通过flash仅含INSTANT_A数据块 hex来重新作些特定配置, 我应该怎样根据现在完整的hex文件,重新构建仅含INSTANT_A数据块的hex文件呢?

feixiang20 发表于 2018-8-11 00:51:12

通过单片机串口或者其他的方式接收你要烧录的程序,并通过你写好的写入flash代码程序将接收到程序写入flash。设置Nor Flash的地址,地址是十六进制数。

andeyqi 发表于 2018-8-11 10:39:31

一种方法是用Jlink或者STlink自带烧写工具烧写到指定的位置,也可以按照文件的地址把两个程序合并到一起,之后一次烧写到flash里。

xhx321 发表于 2018-8-15 08:19:18

非常感谢各位。根据大家的指导,方案已经实现了。:)
页: [1]
查看完整版本: 如何将特殊的数据块放在flash指定位置,并分开烧写?