stm32的堆和栈问题

[复制链接]
5203|11
 楼主| sedatefire 发表于 2012-9-18 10:18 | 显示全部楼层 |阅读模式
1.os-less“裸奔”系统中,堆貌似没任何用处,可以设置为0吧2.一个相当奇怪问题。
我做了引导程序boot和应用程序app
在app中,如果我在scat把栈空间调整得刚刚好。那boot跳转过去就当机。
如果预留8个字节,那就可以跳转过去正常运行。
ps:
1.跳转程序官方的。初始化堆栈啥的都做到位了。
2.应用程序,单独烧录可以执行的。
3.中断表有重新映射了,确定无误。
研发之声 发表于 2012-9-18 23:00 | 显示全部楼层
帮顶,界面有些奇怪哦,重新编辑下
beyond696 发表于 2012-9-18 23:06 | 显示全部楼层
我做跳转的时候没去管那么多,好像也可以的
 楼主| sedatefire 发表于 2012-9-25 22:09 | 显示全部楼层
自己顶起来
airwill 发表于 2012-9-25 22:41 | 显示全部楼层
不知道你用的库是什么版本. 什么调用函数.
我怀疑库函数里使用了堆.
在以前的 MDK 3.8A 里, startup 文件里堆的空间为0
但是在 MDK 4.54 里, stm32 各芯片的 startup 文件里, 堆的空间都设定了 512 字节.
所以怀疑是库, 很可能是编译器带的库里有使用堆的情况.
 楼主| sedatefire 发表于 2012-9-30 14:04 | 显示全部楼层
不知道你用的库是什么版本. 什么调用函数.
我怀疑库函数里使用了堆.
在以前的 MDK 3.8A 里, startup 文件里堆的空间为0
但是在 MDK 4.54 里, stm32 各芯片的 startup 文件里, 堆的空间都设定了 512 字节.
所以怀疑是 ...
airwill 发表于 2012-9-25 22:41

这个,貌似没有什么程序的写法可以用到堆吧
os-less系统中,无可想象

在带os系统中,才有malloc可以用到堆
ilovezeno 发表于 2012-9-30 20:50 | 显示全部楼层
这个,貌似没有什么程序的写法可以用到堆吧
os-less系统中,无可想象

在带os系统中,才有malloc可以用到堆
sedatefire 发表于 2012-9-30 14:04

printf之类的会用到堆吧
 楼主| sedatefire 发表于 2012-10-4 23:34 | 显示全部楼层
printf之类的会用到堆吧
ilovezeno 发表于 2012-9-30 20:50

这个,第一次听说哦,我百度搜索一下看看
 楼主| sedatefire 发表于 2012-10-4 23:34 | 显示全部楼层
printf之类的会用到堆吧
ilovezeno 发表于 2012-9-30 20:50

这个,第一次听说哦,我百度搜索一下看看
 楼主| sedatefire 发表于 2012-10-4 23:55 | 显示全部楼层
没啦,函数传参,用的都是栈,没有用堆的
 楼主| sedatefire 发表于 2012-10-17 14:23 | 显示全部楼层
找到原因了,
1.为了防止栈覆盖了系统变量,我把栈空间调整到ram空间的最后面。
2.函数指针跳转前的pop“恢复现场”指令,导致地址空间越界,导致系统崩溃。

这个问题,我后期会在
“一线研发之声: keil uvision4默认scat文件的重大隐患”
重点讲解
 楼主| sedatefire 发表于 2012-10-17 14:25 | 显示全部楼层
5# airwill 求MDK 4.54的软件包:L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4393

主题

5935

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部