华大HC32 flash擦除未生效的解决方法

参考资料

  1. https://www.xhsc.com.cn/Productlist/info.aspx?itemid=1780&parent
  2. https://blog.csdn.net/weixin_43895102/article/details/119084248

关键信息

在应用手册 《AN_FLASH操作说明_Rev1.1.pdf》可看到如下描述

3.5 基于FLASH安全特性的编程方法
在实际应用中,对于容量大于32K的MCU,如果需要将FLASH的操作函数、安全功能函数等放置在FLASH的32K安全区,可通过以下便捷的方式实现。
说明:

  • 本例为说明需要,主要示例将函数“Flash_SectorErase()”放置在安全区“0x400”地址的方法,实际应用当中可以将“示例函数”和“地址”根据自己的需求进行替换。

3.5.1 基于Keil MDK的编程方法
在Keil MDK中,可以简单通过如下方式实现对安全函数的执行地址映射:
在目标函数的声明处增加以下代码:
en_result_t Flash_SectorErase(uint32_t u32SectorAddr) attribute((section(“.ARM.__at_0x400”)));
3.5.2 基于IAR的编程方法
1、在目标函数定义处增加以下代码:
en_result_t Flash_SectorErase(uint32_t u32SectorAddr) @“.Flash_SectorErase”
2、在工程“*.icf”文件中增加以下代码:
place at address mem:0x00000400 { readonly section .Flash_SectorErase};

要求函数在前32kb里面,怎么操作呢

这里给出iar的配置方案 已经测试通过的,直接修改icf文件即可

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__   = 0x0003FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define exported symbol __ICFEDIT_region_RAM_end__   = 0x20007FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x0400;
define symbol __ICFEDIT_size_heap__   = 0x0100;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region      = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region      = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define region ROM_safe_region      = mem:[from 0x00000400   to 0x00008000];//这里就是安全区

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,  block CSTACK,last block HEAP};
place in ROM_safe_region { readonly object hc32l196_flash.o};//这里flash的函数都放里面完事 ,否则无法正常使用

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值