在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 9382|回复: 1

[求助] freeRTOS任务堆栈分配问题

[复制链接]
发表于 2013-11-24 22:09:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在学freeRTOS,遇到一个关于任务堆栈分配的问题:
在创建一个task时需要预分配栈空间,这可以使用uxtaskgetstackhighwatermark()这个函数,我看到http://www.freertos.org/uxTaskGetStackHighWaterMark.html这上面是这么用的:





  1. void vTask1( void * pvParameters )
  2.     {
  3.     unsigned portBASE_TYPE uxHighWaterMark;
  4.         /* Inspect our own high water mark on entering the task. */
  5.         uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );
  6.         for( ;; )
  7.         {
  8.             /* Call any function. */
  9.             vTaskDelay( 1000 );
  10.             /* Calling the function will have used some stack space, we would
  11.             therefore now expect uxTaskGetStackHighWaterMark() to return a
  12.             value lower than when it was called on entering the task. */
  13.             uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );
  14.         }
  15.     }




复制代码

请问一下前后两个uxtaskgetstackhighwatermark()分别测出的是这个任务的什么使用空间呢?
发表于 2014-3-30 08:56:03 | 显示全部楼层
这个函数测出的是当前任务栈空间的剩余空间,任务的栈空间可能存储着自己的C语言函数调用的上下文,或者该任务正在运行时发生中断时刻的任务上下文,原则上中断单栈(CPU中断使能并且只有一个栈指针)系统程序在运行的时刻无法判断是否会栈溢出,这个函数的作用是提供给任务代码一个栈空间余量的指示,必须配合任务的其他逻辑才能完成一定的目标,比如减小栈溢出的可能性等。栈空间以及TCB等的分配是在任务创建的过程中做的,而绝非在任务代码中做的,具体的分配方法不同的port不同,一般是直接采用C标准库的mallo等函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-7 17:17 , Processed in 0.021181 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表