MounRiverStudio 如何将变量放在flash的指定位置

如题,自己制做bootloader,需要在app代码区域的指定位置放一个变量,用于指示bootloader目前是处理升级模式,还是处理正常运行模式。使用keil比较方便,const boot_info_t boot_info __attribute__((at(0x80000400))),就能将boot_info固定在0x80000400的flash中。

请教MounRiverStudio中要如何处理,最好变量能放在app代码区域,这样制作升级程序、烧录和升级判断比较方便。

您好,变量一般放在RAM,关于将变量放在RAM指定位置,可以参考一下下帖介绍

https://www.cnblogs.com/liaigu/p/17319352.html



你好,数据确定是放在指定位置了,但是想要访问或者修改,编译不通过,提示overlaps


您好,不好意思,没注意,变量一般是放在RAM里的,我发你的链接是将常量之类的放在FLASH当中的,变量一般是在RAM中的,可将变量放在指定RAM地址,可参考下链接配置介绍:

https://www.cnblogs.com/liaigu/p/17319352.html

 


你理解的没错,是将常量放在flash中的,不是放在RAM中;但是放在flash中,应该也可以访问,通过flash操作函数,也可以修改才对。比如升级程序的时候,就是直接对flash进行操作。按照你给的链接,常量确实放在flash中了,但是在程序中访问不了。


您好,若你要将变量的值保存在FLASH某个位置,可以直接通过FLASH编程将其写在某个位置,然后直接读取FLASH该地址获取对应的值。关于FLASH的编程操作,可以参考EVT的FLASH操作例程。后续若有问题,可通过邮箱(lzs@wch.cn)进行沟通。


这个最正规的操作是写自己的Linker Script。

但你要考虑Flash是页擦除而不是字节擦除的,对变量的位置存放要自己当心的。

像你所说的Keil,编译器可不会关心页边界在哪里。


回复6楼

有的初始值,在编译的时候就希望确定下来的,并不是程序运行之后才去读写的;比如我在程序的某个位置,加入自己板子的名称和板号,在升级的时候,升级软件直接在指定位置读取信息,判断这个bin文件是否与设备匹配,防止下载了不匹配的文件。


回复7楼

确实是需要修改ld文件,但是对MounRiverStudio不是太熟悉,不知道怎么修改。按照前面提供的一些方法,达不到需要的效果。

至于写的问题,大多东西不需要修改,其中一个标志需要修改,我默认给它0xFFFFFFFF;修改的时候,直接写0,或者修改为0xF0F0F0F0之类的,就不需要重新擦除了。


您好,你可以参考附件工程试一下

icon_rar.gifCH32V307.zipimage.png


感谢回复,用你这种方式需要占用一个页,读写数据才不会影响程序,我最终也是使用这样方式了。

WCH的支持还是不错的,谢谢


只有登录才能回复,可以选择微信账号登录