打印

stm32的堆和栈问题

[复制链接]
4401|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 | 只看该作者
自己顶起来

使用特权

评论回复
5
airwill| | 2012-9-25 22:41 | 只看该作者
不知道你用的库是什么版本. 什么调用函数.
我怀疑库函数里使用了堆.
在以前的 MDK 3.8A 里, startup 文件里堆的空间为0
但是在 MDK 4.54 里, stm32 各芯片的 startup 文件里, 堆的空间都设定了 512 字节.
所以怀疑是库, 很可能是编译器带的库里有使用堆的情况.

使用特权

评论回复
6
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可以用到堆

使用特权

评论回复
7
ilovezeno| | 2012-9-30 20:50 | 只看该作者
这个,貌似没有什么程序的写法可以用到堆吧
os-less系统中,无可想象

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

printf之类的会用到堆吧

使用特权

评论回复
8
sedatefire|  楼主 | 2012-10-4 23:34 | 只看该作者
printf之类的会用到堆吧
ilovezeno 发表于 2012-9-30 20:50

这个,第一次听说哦,我百度搜索一下看看

使用特权

评论回复
9
sedatefire|  楼主 | 2012-10-4 23:34 | 只看该作者
printf之类的会用到堆吧
ilovezeno 发表于 2012-9-30 20:50

这个,第一次听说哦,我百度搜索一下看看

使用特权

评论回复
10
sedatefire|  楼主 | 2012-10-4 23:55 | 只看该作者
没啦,函数传参,用的都是栈,没有用堆的

使用特权

评论回复
11
sedatefire|  楼主 | 2012-10-17 14:23 | 只看该作者
找到原因了,
1.为了防止栈覆盖了系统变量,我把栈空间调整到ram空间的最后面。
2.函数指针跳转前的pop“恢复现场”指令,导致地址空间越界,导致系统崩溃。

这个问题,我后期会在
“一线研发之声: keil uvision4默认scat文件的重大隐患”
重点讲解

使用特权

评论回复
12
sedatefire|  楼主 | 2012-10-17 14:25 | 只看该作者
5# airwill 求MDK 4.54的软件包:L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4393

主题

5935

帖子

33

粉丝