小233宋 发表于 2024-3-16 19:30:22

小白求助,怎样才能多获得一些任务堆栈空间

小白求助,怎样才能多获得一些任务堆栈空间?

任务创建时堆栈内存设置小了任务不能正常运行然后系统重启。
任务创建时堆栈内存设置大了任务不能正常启动。
设置总任务堆栈空间提示EDATA溢出。

可不可以出一个带片外内存的开发板版本啊QAQ,要不然堆栈内存不够用……
不如ESP32的FreeRTOS上个4096大小的任务都没事……

llyymm 发表于 2024-3-16 21:03:08

我也关注学习一下

lzl1okOK 发表于 2024-3-16 21:14:39

试试能不能划分Xdata给他

tzz1983 发表于 2024-3-16 21:23:55

本帖最后由 tzz1983 于 2024-3-16 21:26 编辑

外挂的内存不能用于堆栈.堆栈只能在EDATA区间.

你什么应用啊,为什么要那么多堆栈?

虽然不能用外挂的RAM扩大总的堆栈,但是有另外的办法解决.

如果单个任务用栈量非常大,可能是由于调用的某些函数定义了较大的局部变量,数组或大结构都有可能.
找到这个地方,直接定义为全局xdata.  即可减少用栈量.
或都是把一片xdata的内存交给内存管理,用申请内存替代局部变量.
我不太熟悉FreeRTOS, 不知道FreeRTOS内存管理功能能不能管理xdata区域.uCOSII是可以的.



CosyOS 发表于 2024-3-16 22:23:21

CosyOS-II 可以解决你的问题!
CosyOS-II for STC32 有两种不同的任务栈模式选择:PSP模式、MSP模式。
如果edata内存足够大,可以采用PSP模式,提高任务切换效率;
如果edata内存不够用,可以采用MSP模式。
PSP模式,任务栈只能在edata中,且每个任务栈都是主栈(需保存中断入栈),对edata的需求比较大,但任务切换时仅是任务栈指针的切换,效率高。
MSP模式,任务栈即可以在edata中,也可以在xdata中,可有效解决edata不够用的问题。但缺点是任务切换时需要拷贝数据,效率低。MSP模式需注意,主栈也必须足够大(在启动文件中修改)。

tzz1983 发表于 2024-3-16 22:53:42

CosyOS 发表于 2024-3-16 22:23
CosyOS-II 可以解决你的问题!
CosyOS-II for STC32 有两种不同的任务栈模式选择:PSP模式、MSP模式。
如果 ...

CosyOS越来越强了,MSP是这么玩的啊

CosyOS 发表于 2024-3-16 23:10:52

本帖最后由 CosyOS 于 2024-3-16 23:12 编辑

tzz1983 发表于 2024-3-16 22:53
CosyOS越来越强了,MSP是这么玩的啊
MSP模式,即可以内存模型为Large,静态创建任务,任务栈在xdata中;
也可以动态创建任务,内存池指针指向xdata(0x10000 以后),任务栈在xdata中。

神农鼎 发表于 2024-3-16 23:17:15



全局不关总中断的RTOS / CosyOS-II for STC MCU,最新版本2024/2/6更新说明 - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

页: [1]
查看完整版本: 小白求助,怎样才能多获得一些任务堆栈空间