HC32F460的Flash连续编辑功能用法

2025-05-21 05:47:37

1、在工程中写好flash编程代码,硬件仿真全速调试后,发现存储区乱码,汇编指针跑飞。

HC32F460的Flash连续编辑功能用法
HC32F460的Flash连续编辑功能用法
HC32F460的Flash连续编辑功能用法

2、查阅资料后知道使用连续编辑函数"EFM_SequenceProgram"时,需要占用flash总线,从而不能读取flash里的指令。

HC32F460的Flash连续编辑功能用法

3、仿真单步运行后,发现运行指针从&孥恶膈茯quot;EFM_SequenceProgram"函数中的"EFM_ClearFlag"处开始跑飞。

HC32F460的Flash连续编辑功能用法

4、由于运行跑飞,而不是代码优化导致的问题。在请求了技术支持后得出,“EFM_SequenceProgram”不能在flash中运行。那么只能在RAM中运行了。下图为map中函数地址,都在flash上。

HC32F460的Flash连续编辑功能用法

5、解决方法有两个:1、将代码全部放在ram上运行;2、将与“EFM_SequenceProgram”相关的函数放到RAM中运行个人选择第2个方案

6、需要在RAM上申请一个区域作为函数运行区在“工程\Objects”下修改.sct文件在“RW_IRAM1”中申请区域“*.o(RAMCODE)”

HC32F460的Flash连续编辑功能用法

7、工旯皱镢涛程中使用前修改配置“魔法棒-Linker”,取消“Use Memory Layout form Target Dialog”,“Scatter File”中选择修改的.sct文件

HC32F460的Flash连续编辑功能用法

8、在需要调用的函数前使用“__attribute__((section("RAMCODE")))”,并将其内部其他调用函数前均添加“__attribute__((section("RAMCODE")))”。

HC32F460的Flash连续编辑功能用法
HC32F460的Flash连续编辑功能用法

9、查看.map,可以看到函数地址都位于ram区域了

HC32F460的Flash连续编辑功能用法

10、仿真全速运行调试后,发现系统运行正常。

HC32F460的Flash连续编辑功能用法
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢