你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
技术帖
话题
资源
创客秀
视频
标签
积分商城
每日签到
freertos任务创建的问题
[复制链接]
zhangyada
提问时间:2019-3-4 11:44 /
问答
是否解决:
小白刚刚接触freertos,想问一下就创建任务而言,每一个任务分配的内存是多大才好,怎么计算呢?
另外,每个任务的执行周期怎么确定?在任务里面放延时函数吗?
赞
0
收藏
0
评论
4
分享
发布时间:2019-3-4 11:44
举报
请先
登录
后回复
4个回答
Kevin_G
回答时间:2019-3-4 13:17:41
a0a.1 32b0c
堆栈大小跟任务对应的变量数据有关,可以看看map文件在分配。每个任务的执行周期会受很多因素影响,尤其是其他任务的优先级及任务数量影响。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
STMCU
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
edmundlee
回答时间:2019-3-22 22:51:52
a0a.1 32b0c
栈空间跟你任用了多少局部变量有关, 任务中再调用其它函数也要计算。
任务里放延迟函数是很经常, 但别误会, 这延迟函数不是你在学校里那种死循环的延迟函数, 而是系统自带的延迟函数。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
STMCU
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
xiaojie0513
回答时间:2019-3-23 07:49:00
a0a.1 32b0c
参考
http://blog.csdn.net/jiejiemcu/article/details/87174666
评分
参与人数
1
蝴蝶豆
+3
收起
理由
STMCU
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
xiaojie0513
回答时间:2019-3-23 07:50:35
a0a.1 32b0c
首先,一般人计算任务栈是很难计算的,一般使用FreeRTOS提供的统计去统计任务栈使用最坏的情况每个任务都独立维护自己的栈空间, 任务栈空间总量在任务创建时进行设定。uxTaskGetStackHighWaterMark()主要用来查询指定任务的运行历史中, 其栈空间还差多少就要溢出。这个值被称为栈空间的High Water Mark。
函数原型:
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )
想要使用它,需要将对应的宏定义打开:INCLUDE_uxTaskGetStackHighWaterMark
函数描述:
参数
说明
xTask
被查询任务的句柄如果传入 NULL 句柄,则任务查询的是自身栈空间的高水线
返回值
任务栈空间的实际使用量会随着任务执行和中断处理过程上下浮动。uxTaskGetStackHighWaterMark()返回从任务启动执行开始的运行历史中,栈空间具有的最小剩余量。这个值即是栈空间使用达到最深时的剩下的未使用的栈空间。这个值越是接近 0,则这个任务就越是离栈溢出不远。
如果不知道怎么计算任务栈大小,就使用这个函数进行统计一下,然后将任务运行时最大的栈空间作为任务栈空间的80%大小即可。即假设统计得到的任务栈大小为常量 A ,那么在创建线程的时候需要 X 大小的空间,那么 X * 80% = A,算到的 X 作为任务栈大小就差不多了。
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
任务里放延迟函数是很经常, 但别误会, 这延迟函数不是你在学校里那种死循环的延迟函数, 而是系统自带的延迟函数。
评分
查看全部评分
评分
查看全部评分
函数原型:
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )
想要使用它,需要将对应的宏定义打开:INCLUDE_uxTaskGetStackHighWaterMark
函数描述:
如果不知道怎么计算任务栈大小,就使用这个函数进行统计一下,然后将任务运行时最大的栈空间作为任务栈空间的80%大小即可。即假设统计得到的任务栈大小为常量 A ,那么在创建线程的时候需要 X 大小的空间,那么 X * 80% = A,算到的 X 作为任务栈大小就差不多了。