请选择 进入手机版 | 继续访问电脑版

芯虎论坛

 找回密码
 立即注册
查看: 733|回复: 0

HC32F460官方连续写Flash例子不好用的修改

[复制链接]

18

主题

27

帖子

216

积分

虎背熊腰

Rank: 3Rank: 3

积分
216
发表于 2021-4-15 12:34:58 | 显示全部楼层 |阅读模式
本帖最后由 yowen_2007 于 2021-4-15 12:34 编辑


客户询问HC32F460 sdk里官方EFM Flash连续写模式例子(efm_seqence_program)写入错误问题。
为什么要用这个连续写模式?因为官方手册中写到连续写Flash模式要比单字写效率高50%以上。


官方例子 实际上编译后直接运行确实是不可以的,这个原因可以看一下F460的EMF章节中连续写模式的步骤:

手册上第4步写到,需要把几个步骤放在非Flash里执行,那么非Flash里执行就是放在内部RAM里执行或者外部Flash/ram。
我们不讨论在外部FLash或RAM里执行的情况,只把这个连续写的官方驱动函数(EFM_SequenceProgram)放在内部RAM里执行。

我们有两个方法:
1.把整个hc32f46x_efm.c代码放在RAM内。
2.把单独的EFM_SequenceProgram放在RAM内。
   第二个方法比第一个稍微麻烦一些,具体就是使用#pragma arm section 把EFM_SequenceProgram整个函数作为一段放在RAM里。
   具体方法请参考论坛里的帖子:"华大单片机低频运行时Flash擦写容易出现的问题及解决"

第一个方法简单,但需要占用更多的RAM空间,因为是把具体驱动整个文件内的代码都放在RAM里。
方法如下:先打开F460的sdk内官方例子 efm_seqence_program
1)在左侧Project里找到efm的驱动.c文件

2.鼠标右键点击这个文件点开选项

3.点开后,选择”Code/Const“的下拉菜单:把这个文件整个代码放在IRAM1内。
这个IRAM1就是F460的内部RAM地址空间。


然后编译后看一下out目录下生成的.map文件,找hc32f46x_efm.o,看这个.o文件内的函数是不是都被映射到了IRAM1内地址范围。

可以看到上图.map里hc32f46x_efm.o内的Flash相关函数都被映射到了IRAM1地址范围内,这就说明我们把flash操作相关驱动已经都放在了内部RAM里。
下载程序,再去执行efm_seqence_program这个例子代码,FLASH连续写功能成功。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|芯虎论坛 ( 辽ICP备18019618号 )

GMT+8, 2021-6-22 22:27 , Processed in 0.102731 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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