硬汉嵌入式论坛

 找回密码
 立即注册
查看: 131|回复: 1
收起左侧

[STM32H7] 关于初始化时sp寄存器赋值问题

[复制链接]

9

主题

28

回帖

55

积分

初级会员

积分
55
QQ
发表于 2024-5-14 18:07:55 | 显示全部楼层 |阅读模式
sp寄存器是系统堆栈指针,这个堆栈指针是向下生长的。


我使用arm_gcc编译器,依据链接脚本示例,将_estack设置为任意RAM空间的结尾地址,这个值会在startup_xx.s的Reset_Handler,也就是整个程序开始运行时赋值给sp寄存器

示例sp寄存器.png

但是我自己的链接器脚本,这个值不能是任何一个RAM空间结尾地址,而必须减少16字节。否则Reset_Handler赋值sp寄存器时,会跑飞。
链接器脚本.png

因为我是有bootload程序的(跳转部分抄的论坛),是否是bootload程序中的堆栈空间没有清空,导致了程序认为堆栈中有值。但是很奇怪的啊,程序开始运行应该会认为是空堆栈才对,内存有数据也不影响堆栈啊。
bootload跳转.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2024-5-15 09:49:06 | 显示全部楼层
1、放在末尾的问题,可以用别的IDE测试下,比如MDK或者IARK看看是否正常。
2、你这个BOOT的判断部分,如果你用的是D2或者D3,这个判断是无效的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-31 06:45 , Processed in 0.157660 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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