搜索
bottom↓
回复: 14

stm32用了FreeRTOS后,启动文件里的堆栈大小设置还有用么?

[复制链接]

出130入129汤圆

发表于 2014-8-7 18:44:50 | 显示全部楼层 |阅读模式
stm32用了FreeRTOS后,启动文件里的堆栈大小设置还有用么?

将启动文件的堆栈设置为0了,程序还能正常运行

stm32f10x_vector.s启动文件里
  1. .........................
  2. Stack_Size       EQU     0x00000000
  3. Heap_Size        EQU     0x00000000
  4. .........................
复制代码


FreeRTOS的FreeRTOSConfig.h
  1. .........................
  2. #define configUSE_PREEMPTION                1
  3. #define configUSE_IDLE_HOOK                        0
  4. #define configUSE_TICK_HOOK                        0
  5. #define configCPU_CLOCK_HZ                        ( ( unsigned long ) 48000000 )       
  6. #define configTICK_RATE_HZ                        ( ( TickType_t ) 1000 )
  7. #define configMAX_PRIORITIES                ( 5 )
  8. #define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 128 )
  9. #define configTOTAL_HEAP_SIZE                ( ( size_t ) ( 4 * 1024 ) )
  10. #define configMAX_TASK_NAME_LEN                ( 16 )
  11. #define configUSE_TRACE_FACILITY        0
  12. #define configUSE_16_BIT_TICKS                0
  13. #define configIDLE_SHOULD_YIELD                1
  14. .........................
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-8-7 18:55:10 | 显示全部楼层
l两个不是一回事吧
印象中ucos的堆栈是定义成全局数组的

出130入129汤圆

 楼主| 发表于 2014-8-7 19:05:11 | 显示全部楼层
bbglx 发表于 2014-8-7 18:55
l两个不是一回事吧
印象中ucos的堆栈是定义成全局数组的

的确不是一回事,但是裸奔的时候,栈不是得设置一个合适的值么,不然程序可能跑不起来。
但是现在用上FREERTOS了,将栈设置为0,程序还能跑

出0入0汤圆

发表于 2014-8-8 08:19:15 | 显示全部楼层
改一下linker文件看看 估计不行吧
对于main rtos也算是一个app吧

出0入0汤圆

发表于 2014-8-8 08:23:03 | 显示全部楼层
本帖最后由 abbott 于 2014-8-8 08:26 编辑

Cortex M3有两个栈指针,OS中,一般是在中断中使用MSP,在普通任务中使用PSP!
你那个设置,只能改变MSP!
另Cortex M3是无法设置栈大小的,只能设置栈指针!如果栈指针设置在RAM最后的位置,栈空间设置为0,编译器不会报错,程序也能运行,只要不与实际使用区域冲突就可以!

出130入129汤圆

 楼主| 发表于 2014-8-8 10:50:39 | 显示全部楼层
abbott 发表于 2014-8-8 08:23
Cortex M3有两个栈指针,OS中,一般是在中断中使用MSP,在普通任务中使用PSP!
你那个设置,只能改变MSP!
...

呵呵,多谢,你是对的。
我刚才看了下map文件,刚好STACK段在FreeRTOS configTOTAL_HEAP_SIZE定义的堆后面,即使启动文件的Stack_Size设置为0,但configTOTAL_HEAP_SIZE定义的堆比较大,所以也能运行起来。

出0入0汤圆

发表于 2014-8-8 11:31:15 | 显示全部楼层
设置0还能运行,是把堆的空间给挤掉了吧?

不过堆用处没那么大吧,程序里也没malloc,所以栈溢出进了堆之后,即使破坏了堆的控制结构,也没什么影响。

出130入129汤圆

 楼主| 发表于 2014-8-8 11:33:12 | 显示全部楼层
lyyyuna 发表于 2014-8-8 11:31
设置0还能运行,是把堆的空间给挤掉了吧?

不过堆用处没那么大吧,程序里也没malloc,所以栈溢出进了堆之 ...

栈大小设置为0,刚好占用了freertos开辟的堆,所以没出错

出0入0汤圆

发表于 2014-8-8 11:37:18 | 显示全部楼层
68336016 发表于 2014-8-8 11:33
栈大小设置为0,刚好占用了freertos开辟的堆,所以没出错

是freertos开辟的堆?

你这样会破坏堆的结构吧,空闲块都破坏了。

出0入0汤圆

发表于 2014-8-8 21:34:53 来自手机 | 显示全部楼层
努力学习中

出0入0汤圆

发表于 2014-8-8 23:16:15 | 显示全部楼层
如果你用的keil的rtx的话,启动文件里的栈大小就是msp,还是有用的哦,中断例程用的这个栈,rtx的任务栈最小可以做大200字节以下

出0入0汤圆

发表于 2014-8-8 23:18:30 | 显示全部楼层
如果你用的keil的rtx的话,启动文件里的栈大小就是msp,还是有用的哦,中断例程用的这个栈,rtx的任务栈最小可以做大200字节以下

出0入0汤圆

发表于 2014-8-8 23:22:21 | 显示全部楼层
应该还是有用的吧。。

出0入0汤圆

发表于 2014-8-8 23:25:03 | 显示全部楼层
如果你用的keil的rtx的话,启动文件里的栈大小就是msp,还是有用的哦,中断例程用的这个栈,rtx的任务栈最小可以做大200字节以下

出0入0汤圆

发表于 2020-9-15 19:17:45 | 显示全部楼层
学习了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 22:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表