32G8K64的 static 变量复位不会清0,仿真也不能正常显示
请教一下32G8K64 的 static 变量,复位后,变量不会自动清 0,仿真时,变量总是显示 0x00。请问,能不能给个 A251 文件和教程,保证芯片复位时,包含软件指令复位时,全局变量都能可靠的清零。同时,仿真能正常显示。如图
A251文件编写与使用教程
1. A251文件的结构与功能
A251文件用于指导STM32 microcontroller在复位时如何设置默认值。该文件用于在复位时自动清除全局变量,确保复位后变量值为0。
2. A251文件的编写内容
A251文件的格式为:
binary
A251
0000000000000000
文件内容应包含以下部分:
A251文件头:包含文件编号和版本号。
默认值部分:列出所有全局变量在复位时的默认值(以十六进制表示)。
注意事项:说明复位时如何使用默认值,以及在某些情况下如何手动更改。
3. A251文件的编写步骤
1. 打开A251文件:将A251文件打开,选择“新建”。
2. 填写文件头:在“A251”字段中输入文件编号和版本号,例如:
0x11111111
3. 填写默认值部分:
对所有全局变量(如A0000到F0000)列出对应的十六进制值。
例如,复位时应清除所有全局变量的值:
0x00000000
0x00000001
...
0x11111111
4. 填写注意事项:说明在复位时如何使用默认值,并提醒用户在某些情况下可能需要手动更改。
5. 保存并关闭:保存文件并关闭A251程序。
4. A251文件的使用示例
假设STM32 microcontroller有全局变量A0000到F0000,复位时应清除所有这些变量的值。则A251文件应如下:
A251
0000000000000000
00000000
00000001
...
11111111
每个变量对应一行,以十六进制表示。
5. 实现复位的步骤
1. 进入复位模式:
在STM32 microcontroller中,按下复位键(通常为“R”或“000”)。
2. 执行A251文件:
按下复位键后,按下A251文件(在A251文件中输入的十六进制值)。
带入SWB0000的值(默认情况下为0)。
3. 复位完成后:
按下复位键再次复位,此时所有全局变量将被清除。
例如,复位后所有全局变量为0x00000000。
6. 注意事项
默认值的设置:默认值应与STM32的硬件配置一致,以确保复位时变量的值与预期一致。
特殊情况处理:在某些情况下,可能需要手动更改复位后的默认值(例如,某些程序依赖于特定的变量值)。
仿真测试:在仿真中,复位后变量应显示为0x00,以验证A251文件的正确性。
7. A251文件的应用场景
单片机仿真:用于复位单片机后,清除所有全局变量。
嵌入式开发:用于单片机嵌入式开发,确保复位后程序运行正确。
8. 延伸阅读
STM32文档:查阅STM32 microcontroller的官方文档,了解复位操作和默认值的详细说明。
调试工具:在仿真中使用调试工具(如JTAG)检查变量值,确保复位后的变量清除正确。
9. 参考资源
STM32 documentation:官方文档提供了复位操作和默认值的详细说明。
A251文件示例:查找STM32内部的A251文件示例,了解如何正确编写和使用A251文件。
10. 总结
通过编写和使用A251文件,可以确保单片机在复位后清除所有全局变量,从而使仿真和开发实现预期效果。
[本文内容由国芯人工智能辅助生成,仅供参考] 请问能不能给个现成的 A251 文件? STC32G8K64,多谢。
还有,请问那个 static 修饰符,在仿真里面,不能正确显示,这个要怎样解决?我上面的工程文件就可以复现那个现象的。 panxiaoyi 发表于 2025-6-5 10:45
请问能不能给个现成的 A251 文件? STC32G8K64,多谢。
还有,请问那个 static 修饰符,在仿真里面,不能正 ...
static就是静态变量,如果修饰于全局变量,则其他c文件不能访问这个变量,所以仿真不能显示,同样的,局部变量在仿真中也没法查看。
如果想要查看,可以使用一个不修饰的全局变量,然后利用赋值,间接查看变量。
仿真时,如果点击了复位,此时并不会触发全局变量的更新,可以将鼠标点击main函数的第一行,然后选择运行到此处,此时的变量就会更新且变成0了 首先,库文件根据自身项目配置选择,不要各种不同模式的库文件都添加到项目里:
其次,keil仿真设置里面 "Update Target before Debugging" 选项需要勾选:
"Run to main()"也建议勾上:
接下来可以从keil安装目录C251\LIB下面复制"START251.A51"文件到项目目录并添加到项目里,然后根据芯片的edata大小修改edata长度:
不添加或者修改"START251.A51"文件的话,编译器默认清除420H(1056)个字节的edata空间:
而你的代码edata使用了1340字节,MainStep变量地址又在442H地址,超出了编译器默认清除范围,所以初始化才不会清零:
多谢 STC 的工程师在这里回复了关于 START251.A51 文件的修改,
修改后,复位时,全局变量清 0 正常了,感谢!
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=15610&page=1#pid169511
但是,关于 static 修饰符的变量的仿真,显示不正常的问题,还请大家再次的看看,如图,还有代码,谢谢 或者,大家能不能提供一个最简单的,硬件仿真时,能正常显示 static 变量的测试工程看看,C251,STC32G8K64。多谢
页:
[1]