关于ucos的任务栈和stm32启动文件的栈

2019-07-21 04:22发布

在启动文件中
Stack_Size      EQU     0x00000c00
堆设置如下
Heap_Size       EQU     0x00000400


在ucos的main文件中,设置任务栈如下
#define LED1_STK_SIZE   1024*4;
OS_STK LED1_TASK_STK[LED1_STK_SIZE];


另外我把可malloc可分配的堆大小设置成60k的内部ram
#define MEM1_MAX_SIZE 60*1024  

任务栈已经超过了系统启动文件中设置的栈大小,但是编译和运行都没问题

不太明白啊,有谁好心能帮忙解释一下吗,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 06:14
默认就是用的内部sram,128K总共有。
所以,你malloc定义80K,还剩下48K可以作为他用。完全够你这个堆栈大小啊。
taizonglai
2楼-- · 2019-07-21 11:23
首先UCOS中的任务栈并不是用的启动文件中的栈空间,跟这个没关系。不过经过计算,你用的总RAM为:0XC00+0X400+1024*4*4+60*1024=81920=80K。已经远超过了F103ZET6的64kram,但是竟然没有报错!!!!这个也太奇怪了吧,你用的是什么片子?
echo12211
3楼-- · 2019-07-21 16:26
回复【2楼】zuozhongkai:
---------------------------------
感谢你的回复,我用的是407,所以内部ram大一些
echo12211
4楼-- · 2019-07-21 16:52
 精彩回答 2  元偷偷看……
taizonglai
5楼-- · 2019-07-21 19:07
回复【4楼】echo12211:
---------------------------------
1、额额额额,407的啊,就说嘛,以后最好把你的平台写出来,要不然别人不好回答啊。
2、这两个是不同的空间,启动文件中的栈空间和堆空间、任务堆栈(也就是全局数组),我们的malloc中的内存池,这些的地位是一样的,都是编译器从MCU的RAM中分配的。
echo12211
6楼-- · 2019-07-21 19:26
回复【5楼】zuozhongkai:
---------------------------------
非常感谢
下次一定注意把问题背景说明白了

一周热门 更多>