请选择 进入手机版 | 继续访问电脑版
查看: 631|回复: 9

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

[复制链接]

该用户从未签到

5

主题

13

帖子

0

蝴蝶豆

初级会员

最后登录
2018-10-14
发表于 2018-8-10 09:10:45 | 显示全部楼层 |阅读模式
各位老司机,各位大虾,各位高手。本人是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的平台如何实现类似的方案。

小弟谢过先

  ST全新域名已上线,大家奔走相告>>                    
回复

使用道具 举报

该用户从未签到

13

主题

403

帖子

7

蝴蝶豆

论坛元老

最后登录
2018-10-22
发表于 2018-8-10 09:28:48 | 显示全部楼层
直接jlink 烧写即可

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

133

主题

4154

帖子

379

蝴蝶豆

版主

最后登录
2018-10-23
发表于 2018-8-10 09:33:58 | 显示全部楼层
ST可以自己写少写工具来写数据到指定的位置,楼主可以定义指针到指定的FLASH地址进行读取。也可以考虑用上位机软件通过应用程序的串口来实现,应用程序将这段数据写到指定的位置。其实解决方案特别多,自己列一些出来,选择一个最合适的。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

  ST全新域名已上线,大家奔走相告>>                    
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

836

帖子

280

蝴蝶豆

版主

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

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

148

帖子

47

蝴蝶豆

高级会员

最后登录
2018-10-23
发表于 2018-8-10 10:31:38 | 显示全部楼层
1.串口助手+txt文件,mcu解析txt文件数据保存至指定flash地址
2.STVP可以指定flash地址烧写hex和s19文件,但是.bin好像不行,jlink不清楚。
3.自己写上位机,串口通讯,制定简单数据传输协议,这个最稳妥。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

  ST全新域名已上线,大家奔走相告>>                    
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    31

    主题

    2096

    帖子

    1534

    蝴蝶豆

    论坛元老

    最后登录
    2018-10-23
    发表于 2018-8-10 14:37:16 | 显示全部楼层
    指定地址保存数据会。保存程序还不会,程序只会指到ROM段存储,精确不到地址。

    unsigned char const DataStr[] __attribute__((at(0X08008000)))=__DATE__;
    傲游截图20180810142756.png

    傲游截图20180810142943.png

    傲游截图20180810143129.png




    评分

    参与人数 1蝴蝶豆 +3 收起 理由
    zero99 + 3

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    13

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2018-10-14
     楼主| 发表于 2018-8-10 15:23:13 | 显示全部楼层
    非常感谢之前大家的回答。
    按各位的方法,现在能明确可以通过__attribute__(at())来指定位置。
    请问如果用户想通过flash仅含INSTANT_A数据块 hex来重新作些特定配置, 我应该怎样根据现在完整的hex文件,重新构建仅含INSTANT_A数据块的hex文件呢?

      ST全新域名已上线,大家奔走相告>>                    
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    81

    主题

    4111

    帖子

    1099

    蝴蝶豆

    论坛元老

    最后登录
    2018-10-22
    发表于 2018-8-11 00:51:12 | 显示全部楼层
    通过单片机串口或者其他的方式接收你要烧录的程序,并通过你写好的写入flash代码程序将接收到程序写入flash。设置Nor Flash的地址,地址是十六进制数。

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    915

    帖子

    194

    蝴蝶豆

    论坛元老

    最后登录
    2018-10-23
    发表于 2018-8-11 10:39:31 | 显示全部楼层
    一种方法是用Jlink或者STlink自带烧写工具烧写到指定的位置,也可以按照文件的地址把两个程序合并到一起,之后一次烧写到flash里。

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2

    查看全部评分

      ST全新域名已上线,大家奔走相告>>                    
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    13

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2018-10-14
     楼主| 发表于 2018-8-15 08:19:18 | 显示全部楼层
    非常感谢各位。根据大家的指导,方案已经实现了。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|意法半导体STM32/STM8技术社区

    GMT+8, 2018-10-23 23:04 , Processed in 0.146051 second(s), 13 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表