cortex m3 R13堆栈指针

以Cortex-M3 SoC芯片的hello_world软件仿真为例:

「MCU」Cortex-M3 SoC的主栈指针

我们先以keil编译结果为例说明,gcc的编译另文讲。

「MCU」Cortex-M3 SoC的主栈指针

放大看:

Program Size:

Code=664

RO-data=224

RW-data=8

ZI-data=864

「MCU」Cortex-M3 SoC的主栈指针

  • ① Code为一堆ARM指令代码,存放在eflash;
  • ② RO DATA为只读数据;
  • ③ RW DATA为非0初始化的全局和静态变量,需从flash搬运到sram;
  • ④ ZI DATA(zero initialize)为0初始化的内存区的大小(包含0初始化的全局和静态变量+堆区+栈区)。

简单的说,程序运行时,

芯片FLASH占用的空间为:Code + RO Data + RW Data,

芯片RAM 占用的空间为:RW Data + ZI Data;

打开hex文件,看一下前四个字节0x2000_0368。

很惊喜,hex文件的前4个字节为主堆栈指针MSP的初值。

主堆栈指针大小:

0x2000_0368 – 0x2000_0000(SRAM起始地址)

= 0x368(十进制872),

刚好是 RW-data(8) + ZI-data(864) = 872 的大小。

这就解释了MSP主堆栈指针是怎么产生的疑惑了。同时,也证明了RAM的大小确实=RW+ZI的大小。

「MCU」Cortex-M3 SoC的主栈指针

理论上初始化时给堆栈指针赋值为RAM的最高地址即可,如下图,初始化时给堆栈指针赋值0x2000_0000 + 0x10000 = 0x2001_0000;

但是用keil编译时,keil并不是按RAM的最高地址生成的HEX前4字节(也即MSP的初值),而是按照:

全局和静态变量的容量+Heap_Size+Stack_Size三者之和,作为HEX文件的前4字节。

「MCU」Cortex-M3 SoC的主栈指针

通常还是把0x10000+0x2000_0000(RAM起始地址)作为MSP的初值更好,但keil不是这么做的,keil仅把这个值用作编译检测:检查全局和局部静态变量(含0初始化和非0初始化两部分)所占的空间+堆区+栈区,它们所占空间之和是否超过了上图红框里0x10000值,如果超了就编译报错。

「MCU」Cortex-M3 SoC的主栈指针

「MCU」Cortex-M3 SoC的主栈指针

Heap Size:

keil编译时,会把C库函数支持的malloc、free所需的内存指向heap内存区,当我们不断的malloc吃内存堆时,malloc函数会检测程序已吃掉的内存堆是否超过了Heap_Size,超了的话就会返回NULL。

如果我们不打算使用C库提供的动态内存分配,而打算使用自己写的内存堆管理程序,甚至干脆不打算使用动态内配功能,这些情况下,没有用到标准库的malloc,直接设置heap size为0即可。

补充一下,还有个重要问题,中断向量表中的向量值是多少呢?怎么指向中断服务函数的入口地址呢?

比如复位中断服务函数:Reset_Handler,这个函数的命名不能是随意的,中断服务函数的命名必须和xx_start.s里面对应的向量名相同,这样cpu才能从向量表中查找到对应中断的中断服务函数的入口地址,也就是说,从向量表中对应中断位置读出的向量值就是PC值,CPU从该PC值地址去取中断服务函数指令。

还有一点,xx_start.s里面对应的向量名后面都有个WEAK,也就是各中断服务函数都可以被软件人员开发的中断服务函数自动覆盖。

感谢阅读文章,如果文章有用,麻烦点个“在看”或转发分享。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 9月 22日 下午12:03
下一篇 2023年 9月 22日 下午12:09

相关推荐

  • 日本著名的相机品牌

    宾得(PENTAX)是一家世界著名的光学品牌,产品覆盖天文望远镜、医用内视镜、眼镜等范围。 宾得的品牌文化可以追溯到1919年成立于日本东京的旭光学合资公司。 旭光学公司是日本著名…

    2022年 11月 16日
  • 天猫双十一购物车的产品有哪些(天猫双十一最新产品有哪些)

    这几天看到天猫双十一10月24日晚八点预售,对我这个不能熬夜的人来说确实是个好消息,我眼睛不太好,近几年一直不能熬夜,却又喜欢在双十一购物,每到这个时间,第二天眼睛总是红的,被老妈…

    2023年 5月 25日
  • 李隆基皇后,王菱:唐玄宗结发之妻,一生为李隆基付出一切,最后却被爱人赐死

    公元724年,唐朝开元十二年。这一年,唐玄宗李隆基忽然下诏,将自己的发妻,和自己同甘共苦多年的原配皇后王氏废黜,同时将王皇后的哥哥赐死。很多和王家有关的大臣,也同时受到了株连。 王…

    2022年 11月 8日
  • 女排世联赛赛程表自由人

    7月28日至8月8日世界大学生运动会将在四川省会成都举行,中国女排大运队对外公布了参赛的12人名单,刚刚参加完世界女排联赛的许晓婷、高意、仲慧转战大运会,另外许嘉楠、解盛钰、王文涵…

    2023年 10月 9日
  • 科普荷花知识,科普荷花

    荷花 荷花,又称“莲花”,原产亚洲,是一种多年生水生植物,在我国有3000年以上的栽培历史。 荷花的根状茎被称为“藕”,藕横生于水底的泥土中,肥大而多节,叶自根茎与根茎之间的节处抽…

    2023年 11月 19日
  • cf幸运转盘活动怎么样奖品重复么

    在CF游戏中,大家知道绝对不亏的幸运转盘活动怎么玩吗,相信还有很多小伙伴都还不知道吧,感兴趣的小伙伴就跟随小编一起来看看吧。 CF绝对不亏的幸运转盘活动玩法指南 CF绝对不亏的幸运…

    2023年 3月 9日
  • 大太监中安德海为什么骂慈禧

    安德海(1844年-1869年),又称“小安子”,清末宦官,直隶南皮人。他在八九岁时净身,进宫后在咸丰帝身边为御前太监。安德海为人办事八面玲珑,善于揣摩,很快就赢得了慈禧和咸丰帝的…

    2024年 1月 17日
  • 名侦探柯南中哪些名场面(名侦探柯南只出现一集的男人)

    《名侦探柯南》这部动漫在播出时,一直惹人非议。距今为止已更新一千多集,同时也会发现很多令人意想不到的梗。剧中时偶尔用梗调剂一下,也无可厚非。可有些梗刷出现次数过于频繁了,也会有反效…

    2022年 12月 24日
  • 从精密制造到改变生命,被低估的纳米机器人是什么

    文|观察未来科技 当前,随着人们更深入地探索由分子和纳米粒子构成的表层量子宇宙,科技的发展正朝着微观世界延伸而去,并重新想象各种可能性。许多人可能并没有意识到,纳米技术已经在为我们…

    2023年 1月 7日
  • 笔字什么意思

    接着我们的《说文解字》课程,本课讲“聿”部的两个汉字“聿、筆”。“聿”是部首汉字,“筆”在现代汉语简化为“笔”,是现代汉语常用汉字,收录在1988年国家语委颁布的《现代汉语常用字表…

    2023年 3月 10日