记录一下在KEIL中修改STM32的栈顶地址

news/2024/9/22 9:36:49

STM32的启动文件中定义的栈和堆的大小,由于栈是向下生长的。所以我们一般希望将栈顶设置为RAM的最高有效地址。这样就可以最大限度保护栈不会溢出。但是STM32的启动文件居然不是这样的思路。

那STM32的启动文件的分配思路是怎么样的呢。它其实是先确定用户使用RAM的情况,然后在未使用的RAM地址开始分配一段RAM区域来做为栈使用。也就是说它并不是将栈顶设置在RAM地址的最高分缘处。这样其实有大部分RAM被浪费掉,随着用户程序的复杂度加大,有可能会引启栈溢出的风险。

现在我们来自定义栈顶地址,修改启动文件:

可复制以下代码,其中ARM.__AT_0x2001FC00指定了栈区域的启始地址,并不是栈顶地址:

Stack_Size EQU 0x00000400

ADDR_STACK_TOP EQU 0x20020000

; 0x2001FC00 = ADDR_STACK_TOP - Stack_Size

AREA |.ARM.__AT_0x2001FC00|, DATA, NOINIT, READWRITE, ALIGN=3

参考博文:www.zhangshilong.cn/work/46137.html

Stack_Mem SPACE Stack_Size

__initial_sp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31465.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C#使用PuTTY加密上传文件

需求:加密通过SFPT上传文件 1.安装PuTTY 2.生成文件,文件不用后缀名 3.上代码class Program{private static string file = "C:\\Users\\3859\\Desktop\\RODHoldToRepairOrScrapList KSZRODHL2022-10-28\\T326\\ReceivingReport-20240510100.xlsx";static void Ma…

python类函数定义第一个参数必须是self

如果不写self,则会报错 加上之后错误就会消失

第 5 篇 Scrum 冲刺博客

这个作业属于哪个课程 软件工程2024这个作业要求在哪里 团队作业4——项目冲刺这个作业的目标 记录敏捷流程下第五天的项目开发进展,对团队昨日的项目进度进行总结一、每日站立式会议 1、每日站立式会议照片2、会议摘要本次会议为第五次Scrum Meeting会议~ 由于本次会议队长召…

TEE 开发 禁止大内存TA加载

我们会经常遇到一些 TA , 把自己的TA_STACK_SIZE 和 TA_HEAP_SIZE 设置的太大 ,从而无法成功被load的情况。因为ta ram 一共就这些内存, 但是 TA的这两个宏配置是 由用户去决定的,为了避免这些TA owner 方便自己害了他人考虑,我们在可以做出如下限制。在 bl32 里面 load …

爬虫 python的第一天

1、安装pycharm及python相关的安装 2、新建python项目 3、引包 import requestspip install requests4、打开网页,找打你想要爬的数据URL 5、写代码获取到对应的数据,保存到本地。import requestsurl = "https://sns-video-al.xhscdn.com/stream/110/259/01e640315b0ef…

第 4 节 多元复合函数的求导法则

第四节 多元复合函数的求导法则 1. 一元函数与多元函数复合的情形2. 多元函数与多元函数复合的情形

MinIO入门教程

是什么? MinIO 是一种高性能、S3 兼容的对象存储。它是为 大规模 AI/ML、数据湖和数据库工作负载。它是软件定义的 并在任何云或本地基础设施上运行。 MinIO 具有双重许可 根据开源 GNU AGPL v3 和商业企业许可证 特点简单 简单性是百亿亿次数据基础设施的基础——无论是技术上…

shell条件语句

一、测试 文件测试testtest的语法 test 条件表达式 [ 条件表达式 ] test 选项 文件 -d :判断是否是目录(Directory) -f :判断是否是普通文件(File) -b :判断是否是块设备(block) -c :判断是否是字符设备 -e :判断是否存在 (Exist) -a :判断是否存在 -r :判断…