0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用ucosii创建任务时,堆栈实际使用情况!

Q4MP_gh_c472c21 来源:互联网 作者:佚名 2018-04-30 09:37 次阅读

不少同学都有类似经历吧,在使用ucosii创建任务时,关于任务堆栈大小设为多大合适搞的不清不楚,郁闷之下就随便整个数,比如就1024吧,反正也没见得出问题,那就不多想了。

我想大多数同学都是这样做的吧。这样只是因为在一般情况下,1024确实已经足够大了,堆栈溢出的可能性很小而已。那么,如果你任务实际使用率只有很小的百分之几,一旦被你知道了,你会痛心不?我想你不痛心,μC/OS-II也会痛心的,它会觉得这个coder真是浪费啊,哈哈,这其实还好,至少只是太大导致浪费而已,万一小了那可就堆栈溢出——惨啦!顺便提醒下大家,堆和栈是完全不同的两个概念,出于国内习惯,还是称之为堆栈罢了!

下面,我就来告诉大家怎么知道运行中任务的堆栈实际使用情况,然后就知道应该分配多少堆栈大小合适了!开始正题。

1、首先需要知道,μC/OS-II中创建任务的函数有两个: OSTaskCreate()和OSTaskCreateExt()

(1)OSTaskCreate() //创建普通任务

由于重点在下面的创建扩展任务函数,故本函数就不多说了!确实,要想实现检测目标任务栈实际使用情况的功能,是不能使用这个函数来创建目标任务的,必须使用OSTaskCreateExt() 。

(2)OSTaskCreateExt() //创建扩展任务

函数接口原型为:

#if OS_TASK_CREATE_EXT_EN > 0

INT8U OSTaskCreateExt

(

void (*task)(void *pd), //建立扩展任务(任务代码指针

void *pdata, //传递参数指针

OS_STK *ptos, //分配任务堆栈栈顶指针

INT8U prio, //分配任务优先级

INT16U id, //(未来的)优先级标识(与优先级相同)

OS_STK *pbos, //分配任务堆栈栈底指针

INT32U stk_size, //指定堆栈的容量(检验用)

void *pext, //指向用户附加的数据域的指针

INT16U opt //建立任务设定选项

)

#endif

2、其次需要知道μC/OS-II中有这么个函数:OSTaskStkChk()

不错,检测任务堆栈实际使用情况正是用的这个函数,下面来本函数的接口原型:

INT8U OSTaskStkChk

(

INT8U prio,//待测任务的优先级

OS_STK_DATA *pdata //指向一个类型为OS_STK_DATA的结构体

)

3、再次需要知道一个结构体:

#if OS_TASK_CREATE_EXT_EN > 0

typedef struct

{

INT32U OSFree; //堆栈中未使用的字节数

INT32U OSUsed;//堆栈中已使用的字节数

} OS_STK_DATA;

#endif

参数: prio 为指定要获取堆栈信息的任务优先级,也可以指定参数OS_PRIO_SELF,获取调用任务本身的信息。

pdata 指向一个类型为OS_STK_DATA的数据结构,其中包含如下信息:

INT32U OSFree; // 堆栈中未使用的字节数

INT32U OSUsed; // 堆栈中已使用的字节数

4、有了上述三个知识点后就可以啦,具体方法为:

(1)将函数的最后一个参数opt 设置为:

OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR

(2)定义一个变量:OS_STK_DATA StackBytes;

(3)调用函数OSTaskStkChk(TestTaskPRIO, &StackBytes)

(4)StackBytes.OSFree的值即为被测任务堆栈未使用的字节数,

StackBytes.OSUsed的值即为被测任务堆栈已使用的字节数。

5、需要设置宏:OS_TASK_OPT_STK_CLR为1

6、最后一点建议:

(1)将被测任务经历最坏的堆栈使用状态,测出来的使用率才可靠

(2)堆栈使用率最好在%50~%80之间,太小浪费空间,太大不安全

(3)最好在工程中单独建立一个优先级较低延时较长的任务来测试其它任务的堆栈使用情况,不用时可以挂起该任务


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19126

    浏览量

    305171
  • μC/OS
    +关注

    关注

    1

    文章

    14

    浏览量

    7933

原文标题:μC/OS-II创建任务时,任务堆栈大小设置搞不清楚?看这里

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    rtthread编译后如何查看堆栈空间使用情况

    rtthread编译后如何查看堆栈空间使用情况,现在只能在编译完成后看到总大小,有没有办法能看到详细的使用情况。 由于RAM只有128K,除去内存池32k,想看看剩余的RAM在哪用了
    发表于 03-05 07:58

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?以及负载情况? 图片是运行完可以看RAM使用情况,是否可以运行中实时查看?是不是cubemonito
    发表于 03-12 07:56

    详解μC/OS-II如何检测任务堆栈实际使用情况——即如何设置ucosii任务堆栈大小

    ,我就来告诉大家怎么知道运行中任务堆栈实际使用情况,然后就知道应该分配多少堆栈大小合适了!开始正题。1、首先需要知道,μC/OS-II中创建
    发表于 09-23 17:00

    如何查看RAM使用情况

    嗨, 我正在使用STM32L053 Nucleo,我已经为它运行了一些代码,我希望做一个RAM估计来查看当前固件的RAM使用情况。如何查看RAM使用情况? 问候#记忆
    发表于 08-05 10:08

    ucosiii堆栈使用情况检测使用率100%?

    用OSTaskStkChk函数检测堆栈使用情况,发现有两个任务使用情况为100%,堆栈设置为1024,增大堆栈到2048,依然使用率100
    发表于 04-20 22:56

    STM32 FreeRTOS RAM 使用情况及优化方法实用资料分享~

    ,当然还提供可选的软件定时器(事实上,多数 RTOS 提供的组件都是这几项)。因此对 RAM 的使用情况的评估也与这几项直接相关。内存管理单元提供内存管理办法,直接消耗内存的包括调度器,任务间通讯方法
    发表于 01-26 14:10

    FreeRTOS中的任务堆栈溢出检测机制

    余多少空间,如果函数返回0则说明可能发生了任务堆栈溢出。在应用中调用该函数可以帮助了解任务堆栈的一个实际使用情况。FreeRTOS中还提供了
    发表于 10-15 13:51

    介绍嵌入式软件堆栈使用情况的估算方法

    介绍了嵌入式软件堆栈使用情况的估算方法。为了方便理解这种估算方法,还对相应的堆栈操作汇编代码(ARM Cortex-M处理器)进行分析和说明
    发表于 12-14 07:25

    电池使用情况统计信息

    电池使用情况信息根据电池使用情况统计信息和电源配置文件中的值计算得出。电池使用情况统计信息框架可通过跟踪设备组件在不同状态下维持的时间来自动确定电池使用情况统计信息。当组件(WLAN
    发表于 12-31 07:01

    如何在Windows 10的任务管理器中查看电源使用情况

    system. This feature is new in the October 2018 Update.Windows 10的任务管理器现在向您显示系统上每个进程的电源使用情况。 该功能是2018年10月更...
    发表于 01-03 07:29

    SoC如何查看内存使用情况

    查看系统内存: free -h 查看ION内存 NPU内存使用情况: cat /sys/kernel/debug/ion/bm_npu_heap_dump/summary | head -2VPU
    发表于 09-19 07:23

    主流GPS芯片使用情况

    主流GPS芯片使用情况
    发表于 11-27 14:34 13次下载

    单片机整体的CPU使用情况详细介绍

    打开电脑的任务管理器,看着跳动的 CPU 使用率,发现很舒服。每一个线程占用了多少 CPU 清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了。今天这篇笔记不讲每个任务(或线程)CPU 的使用情况,而是单片机整体的 CPU
    发表于 11-25 15:58 12次下载
    单片机整体的CPU<b class='flag-5'>使用情况</b>详细介绍

    STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情况

    STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情况
    发表于 12-02 09:06 13次下载
    STM32/KEIL/MDK 查看 FLASH 和 RAM <b class='flag-5'>使用情况</b>

    浅谈如何评估TI C2000系列微控制器程序的堆栈使用情况

    浅谈如何评估TI C2000系列微控制器程序的堆栈使用情况
    发表于 10-31 08:23 0次下载
    浅谈如何评估TI C2000系列微控制器程序的<b class='flag-5'>堆栈</b><b class='flag-5'>使用情况</b>