找回密码
 立即注册
查看: 127|回复: 6

32G8K64的 static 变量复位不会清0,仿真也不能正常显示

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-06 08:37:56
已绑定手机

1

主题

5

回帖

25

积分

新手上路

积分
25
发表于 2025-6-5 09:40:36 | 显示全部楼层 |阅读模式
请教一下

32G8K64 的 static 变量,复位后,变量不会自动清 0,仿真时,变量总是显示 0x00。请问,能不能给个 A251 文件和教程,保证芯片复位时,包含软件指令复位时,全局变量都能可靠的清零。同时,仿真能正常显示。如图

微信图片_20250605093051.png

STC32G全局变量请教.rar

341.42 KB, 下载次数: 1

回复

使用道具 举报 送花

3

主题

722

回帖

155

积分

等待验证会员

积分
155
发表于 2025-6-5 09:43:00 | 显示全部楼层
A251文件编写与使用教程

1. A251文件的结构与功能
A251文件用于指导STM32 microcontroller在复位时如何设置默认值。该文件用于在复位时自动清除全局变量,确保复位后变量值为0。

2. A251文件的编写内容
A251文件的格式为:
  1. binary
  2. A251
  3. 0000000000000000
复制代码
文件内容应包含以下部分:
A251文件头:包含文件编号和版本号。
默认值部分:列出所有全局变量在复位时的默认值(以十六进制表示)。
注意事项:说明复位时如何使用默认值,以及在某些情况下如何手动更改。

3. A251文件的编写步骤
1. 打开A251文件:将A251文件打开,选择“新建”。
2. 填写文件头:在“A251”字段中输入文件编号和版本号,例如:
  
  1. 0x11111111
复制代码
3. 填写默认值部分:
对所有全局变量(如A0000到F0000)列出对应的十六进制值。
例如,复位时应清除所有全局变量的值:
   
  1. 0x00000000
  2.      0x00000001
  3.      ...
  4.      0x11111111
复制代码
4. 填写注意事项:说明在复位时如何使用默认值,并提醒用户在某些情况下可能需要手动更改。
5. 保存并关闭:保存文件并关闭A251程序。

4. A251文件的使用示例
假设STM32 microcontroller有全局变量A0000到F0000,复位时应清除所有这些变量的值。则A251文件应如下:
  1. A251
  2. 0000000000000000
  3. 00000000
  4. 00000001
  5. ...
  6. 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文件,可以确保单片机在复位后清除所有全局变量,从而使仿真和开发实现预期效果。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-06 08:37:56
已绑定手机

1

主题

5

回帖

25

积分

新手上路

积分
25
发表于 2025-6-5 10:45:44 | 显示全部楼层
请问能不能给个现成的 A251 文件? STC32G8K64,多谢。
还有,请问那个 static 修饰符,在仿真里面,不能正确显示,这个要怎样解决?我上面的工程文件就可以复现那个现象的。

点评

static就是静态变量,如果修饰于全局变量,则其他c文件不能访问这个变量,所以仿真不能显示,同样的,局部变量在仿真中也没法查看。 如果想要查看,可以使用一个不修饰的全局变量,然后利用赋值,间接查看变量。 仿  详情 回复 发表于 2025-6-5 10:57
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:499
  • 最近打卡:2025-06-16 10:06:31
已绑定手机
已实名认证

112

主题

2390

回帖

6014

积分

版主

积分
6014
发表于 2025-6-5 10:57:47 | 显示全部楼层
panxi*** 发表于 2025-6-5 10:45
请问能不能给个现成的 A251 文件? STC32G8K64,多谢。
还有,请问那个 static 修饰符,在仿真里面,不能正 ...

static就是静态变量,如果修饰于全局变量,则其他c文件不能访问这个变量,所以仿真不能显示,同样的,局部变量在仿真中也没法查看。
如果想要查看,可以使用一个不修饰的全局变量,然后利用赋值,间接查看变量。
仿真时,如果点击了复位,此时并不会触发全局变量的更新,可以将鼠标点击main函数的第一行,然后选择运行到此处,此时的变量就会更新且变成0了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:444
  • 最近打卡:2025-06-16 09:26:42
已绑定手机

39

主题

2057

回帖

7066

积分

论坛元老

积分
7066
发表于 2025-6-5 12:07:05 | 显示全部楼层
首先,库文件根据自身项目配置选择,不要各种不同模式的库文件都添加到项目里:
截图202506051039208583.jpg

其次,keil仿真设置里面 "Update Target before Debugging" 选项需要勾选:
截图202506051047071975.jpg

"Run to main()"也建议勾上:
截图202506051049017197.jpg

接下来可以从keil安装目录C251\LIB下面复制"START251.A51"文件到项目目录并添加到项目里,然后根据芯片的edata大小修改edata长度:
截图202506051200008227.jpg

不添加或者修改"START251.A51"文件的话,编译器默认清除420H(1056)个字节的edata空间:
截图202506051202131335.jpg

而你的代码edata使用了1340字节,MainStep变量地址又在442H地址,超出了编译器默认清除范围,所以初始化才不会清零:
截图202506051205515123.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-06 08:37:56
已绑定手机

1

主题

5

回帖

25

积分

新手上路

积分
25
发表于 2025-6-6 08:37:56 | 显示全部楼层
多谢 STC 的工程师在这里回复了关于 START251.A51 文件的修改,
修改后,复位时,全局变量清 0 正常了,感谢!
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=15610&page=1#pid169511
但是,关于 static 修饰符的变量的仿真,显示不正常的问题,还请大家再次的看看,如图,还有代码,谢谢
微信截图_20250606082910.png

STC32G.rar

339.59 KB, 下载次数: 1

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-06 08:37:56
已绑定手机

1

主题

5

回帖

25

积分

新手上路

积分
25
发表于 2025-6-6 08:44:26 | 显示全部楼层
或者,大家能不能提供一个最简单的,硬件仿真时,能正常显示 static 变量的测试工程看看,C251,STC32G8K64。多谢
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 13:05 , Processed in 0.266394 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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