打印
[软件资料]

关于CW32外设库中FLASH_SetReadOutLevel(uint16_t RdLevel)函数的一些疑惑

[复制链接]
310|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LY-Bear|  楼主 | 2025-5-29 10:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在官方提供的L010外设库函数中,FLASH这部分的源文件中的void FLASH_SetReadOutLevel(uint16_t RdLevel)函数中,
发现这个函数中出现了几个魔法数字,分别是

类似秘钥的 0x5A50
可能为设置读保护地址的 0x4000431C
可能为MCU软复位地址的 0x40004370
可能为软复位命令数字的 0x5A5AABCD

这几个数字我在数据手册和用户手册中都没有找到,且这两个裸地址指向
SYSCTRL的地址范围内,且在寄存器列表中并未标出这个地址的寄存器定义

此外,无法在用户手册和数据手册中找到SYSRESETREQ复位怎么去触发,
而只看到设置完读保护等级后,对这块对着未知的0x40004370地址写了0x5A5AABCD
表示能触发MCU复位,很疑惑。

搞这几个魔法数字,真的很迷~
希望官方的人能帮我解答上述问题。

使用特权

评论回复
沙发
LY-Bear|  楼主 | 2025-5-29 12:31 | 只看该作者
本帖最后由 LY-Bear 于 2025-5-29 13:02 编辑

在core_cm0plus.h找到SCB结构体,找到SYSRESETREQ在哪里定义了。但是那个0x4000431C和0x40004370地址是啥还没搞清楚。

使用特权

评论回复
板凳
dffzh| | 2025-5-29 13:29 | 只看该作者
本帖最后由 dffzh 于 2025-5-29 13:36 编辑

确实,我也看了一下,库函数里直接通过将数值写入地址的方式操作了,更合理的应该是加上寄存器宏定义来实现;
使用手册里也没有这几个地址对应的寄存器的说明;魔法数字,一点不假!

实际使用倒是不影响。

使用特权

评论回复
地板
dffzh| | 2025-5-29 13:31 | 只看该作者
如果你要使用读保护功能,下面这个帖子你最好是看一下,有读保护操作次数限制的:
https://bbs.21ic.com/icview-3454654-1-1.html

使用特权

评论回复
5
LY-Bear|  楼主 | 2025-5-29 14:15 | 只看该作者
本帖最后由 LY-Bear 于 2025-5-29 14:16 编辑
dffzh 发表于 2025-5-29 13:31
如果你要使用读保护功能,下面这个帖子你最好是看一下,有读保护操作次数限制的:
https://bbs.21ic.com/ic ...

怎么感觉官方有些地方藏着掖着的?读保护有次数限制也不在用户手册里说,此外,还搞这种魔法数字,挺难评的~

使用特权

评论回复
6
dffzh| | 2025-5-29 14:38 | 只看该作者
LY-Bear 发表于 2025-5-29 14:15
怎么感觉官方有些地方藏着掖着的?读保护有次数限制也不在用户手册里说,此外,还搞这种魔法数字,挺难评 ...
厂商可能有自己的见解和原因吧,就看后续此帖有木有专业人士解答了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝