你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

freertos任务创建的问题

[复制链接]
zhangyada 提问时间:2019-3-4 11:44 /
小白刚刚接触freertos,想问一下就创建任务而言,每一个任务分配的内存是多大才好,怎么计算呢?
另外,每个任务的执行周期怎么确定?在任务里面放延时函数吗?
收藏 评论4 发布时间:2019-3-4 11:44

举报

4个回答
Kevin_G 回答时间:2019-3-4 13:17:41
堆栈大小跟任务对应的变量数据有关,可以看看map文件在分配。每个任务的执行周期会受很多因素影响,尤其是其他任务的优先级及任务数量影响。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

edmundlee 回答时间:2019-3-22 22:51:52
栈空间跟你任用了多少局部变量有关, 任务中再调用其它函数也要计算。
任务里放延迟函数是很经常, 但别误会, 这延迟函数不是你在学校里那种死循环的延迟函数, 而是系统自带的延迟函数。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

xiaojie0513 回答时间:2019-3-23 07:50:35
首先,一般人计算任务栈是很难计算的,一般使用FreeRTOS提供的统计去统计任务栈使用最坏的情况每个任务都独立维护自己的栈空间, 任务栈空间总量在任务创建时进行设定。uxTaskGetStackHighWaterMark()主要用来查询指定任务的运行历史中, 其栈空间还差多少就要溢出。这个值被称为栈空间的High Water Mark。
函数原型:

UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )

想要使用它,需要将对应的宏定义打开:INCLUDE_uxTaskGetStackHighWaterMark

函数描述:
      
参数 说明
xTask 被查询任务的句柄如果传入 NULL 句柄,则任务查询的是自身栈空间的高水线
返回值 任务栈空间的实际使用量会随着任务执行和中断处理过程上下浮动。uxTaskGetStackHighWaterMark()返回从任务启动执行开始的运行历史中,栈空间具有的最小剩余量。这个值即是栈空间使用达到最深时的剩下的未使用的栈空间。这个值越是接近 0,则这个任务就越是离栈溢出不远。

如果不知道怎么计算任务栈大小,就使用这个函数进行统计一下,然后将任务运行时最大的栈空间作为任务栈空间的80%大小即可。即假设统计得到的任务栈大小为常量 A ,那么在创建线程的时候需要 X 大小的空间,那么 X * 80% = A,算到的 X 作为任务栈大小就差不多了。



所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版