【经验】Micrium OS操作系统中如何动态检测线程栈使用率?
Micrium OS的前身是大名鼎鼎的ucOSIII。SILICON LABS的开发环境Simplicity IDE创建的默认工程,很多就包含了移植好的Micrium OS。因此使用EFR32或EFM32系列单片机做开发,最好了解Micrium OS操作系统使用方法。而最让新手工程师不知所措的问题之一就是线程创建时线程栈的大小设定,但由于单片机的RAM资源很有限,因此合理的设定线程栈的大小至关重要。本文将说明如何动态检测线程栈使用率。
首先从代码的角度分析一下动态检测线程栈使用率的实现。
想要使用系统中动态检测线程栈使用率的功能,需要将系统的配置宏OS_CFG_STAT_TASK_STK_CHK_EN使能(即定义为DEF_ENABLED)。
我们可以看到OS_CFG_STAT_TASK_STK_CHK_EN宏使能的情况下,线程的TCB数据结构中会添加StkBasePtr指针的定义。并且在线程创建的时候,该指针会指向线程栈的基地址。
与此同时,我们可以看到OS_CFG_STAT_TASK_STK_CHK_EN宏使能的情况下,在OSTaskStkChk()函数中,p_stk指针被赋值为上文描述的StkBasePtr指针值。因为线程栈的填充是FIFO的形式,并且该内核的数据增长方向是由高地址向低地址增长。并且定义线程栈时,我们多用static CPU_STK数据类型来定义栈的存储空间。有经验的程序员知道使用static定义的变量,编译器会默认将之初始化为0。因此OSTaskStkChk()函数是通过判断线程栈基地址空间方向的数据是否为0来判断协议栈到底用到过的最大地址是多少。因此应用程序可以通过调用OSTaskStkChk()函数并检测函数返回的数据,从而确定未使用的栈空间,到底还有多少。
原理分析如上,现在在代码中验证一下实际使用效果。
首先新建一个带有Micrium OS的例程,例如SOC-Thermometer-RTOS。(注:笔者采用的是EFR32BG13系列芯片,不过因为我们这里讨论的是纯OS应用层面的实现,与硬件平台无关,因此不再描述芯片以及硬件的相关内容)
之后我们在工程的主线程循环中添加OSTaskStkChk()函数调用,并将返回的变量打印出来。
RTOS_ERR err;
CPU_STK_SIZE free,used;
// Start the Thermometer Loop. This call does NOT return.
while (DEF_TRUE)
{
OSTimeDlyHMSM(0, 0, 1, 0,
OS_OPT_TIME_DLY | OS_OPT_TIME_HMSM_NON_STRICT,
&err);
OSTaskStkChk (&App_Main_Task_TCB, &free, &used, &err);
DBG("App_Main_Task used/free:%d/%d usage:%%%d\r\n",used,free,(used*100)/(used+free));
}
其中App_Main_Task_TCB就是主线程的TCB数据。free/ used分别是当前线程栈空闲的和使用的字数。
编译成功后,看打印信息可以看到当前主线程栈使用了177个字,未使用的是79个字,使用率是69%。
(注:笔者是使用的SWD接口进行的RTT信息打印,有关RTT信息打印的实现,请参考笔者的另一篇文章:如何在蓝牙SoC EFR32BG22工程代码中添加SEGGER_RTT打印功能?)
- |
- +1 赞 0
- 收藏
- 评论 0
本文由skywalker_lee提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】EFR32BG系列蓝牙SoC之低功耗测试操作指导
很多的蓝牙设备都是电池供电的,因此对蓝牙SoC功耗水平测试与评估就非常有必要。Silicon Labs公司提供的蓝牙评估板底板,都带有电流功耗测试功能,搭配Simplicity studio v4开发平台的energy profile功耗测试上位机,非常容易测试出EFR32BG系列蓝牙SoC的功耗水平。我们详细介绍功耗测试需要的软件和硬件以及测试操作。本文就将具体进行说明。
【经验】Silicon Labs 蓝牙SOC EFR32BG系列IADC与ADC的区别
Silicon Labs蓝牙SOC EFR32BG系列包括有EFR32BG12/13和EFR32BG21两个子系列,其中EFR32BG12/13采用的是Cortex-M4内核,EFR32BG21采用的是Cortex-M33内核,二者的内核不同,另外,EFR32BG12/13集成有IADC,EFR32BG21集成的是ADC,两个ADC还是有一些区别的,在使用时需要注意一下,本文介绍其区别。
【经验】蓝牙SOC EFR32BG13测试通信距离的实现方法
在使用Silicon Labs 蓝牙SOCEFR32BG13做好PCB板后,首先要测试射频的性能,使用相关的仪器测试性能是最精确的,但不是每个人都有条件使用仪器测试,这种情况下使用两个PCB模块进行通信距离测试就是最简便的方法。
【技术】网状网络技术三分天下,蓝牙Mesh欲异军突起
随着2009年蓝牙低功耗(BluetoothLowEnergy)的切入,再到现在的蓝牙网状网络(Mesh),我们正看到并将看到有更多的新应用出现。早期,家庭/楼宇自动化、信标、照明和资产追踪/管理等组网应用主要采用Zigbee网络。然而,Zigbee需要设计路由器/网关,这对开发者形成负担,因此行业也进一步提出了基于IPv6的Thread网状网络标准,形成目前技术三分天下的局面。
AN1400:低功耗蓝牙互操作性测试报告
型号- ERF32XG21,EFR32XG13,ERF32XG13,EFR32XG21,EFR32BG22,EFR32,EFR32XG22,EFR32BG21,EFR32BG13
AN1114:将Silicon Labs Bluetooth®应用程序与Micrium RTOS集成
型号- EFR32MG13,EFR32XG12,EFR32XG13,BRD4159A,EFR32,EFR32BG13
【经验】EFR32BG13系列在SOC模式下使用内部flash进行固件升级的方法
本文根据笔者使用EFR32BG13P632F512GM48进行开发的经历,从函数调用及部分代码分析的角度,总结出EFR32BG13系列在SOC模式下使用内部flash进行固件升级的方法。
UG279:EFR32BG13 2.4 GHz 10 dBm无线电板用户指南
描述- 本资料介绍了EFR32BG13 2.4 GHz 10 dBm无线射频板(BRD4104A)及其与无线启动套件主板(BRD4001A或BRD4002A)的配合使用。资料详细描述了硬件布局、连接器、调试功能、软件支持等信息,旨在帮助用户进行无线应用的开发和调试。
型号- SLWSTK6020B,BRD4104A,BRD4002A,BRD4001A,SLWRB4104A,EFR32,EFR32BG13P632F512GM48,EFR32BG13
【经验】蓝牙SOC EFR32BG13系列soc_ibeacon程序中修改发射功率的方法
本文主要介绍Silicon Labs蓝牙SOC EFR32BG13芯片在soc_ibeacon程序中修改发射功率遇到的问题,介绍设置蓝牙发射功率的函数及相关的参数设置。
【经验】为什么Bluetooth Mesh(蓝牙网状网络)是家用和商用无线网络的最佳解决方案?
在创建低功耗无线技术网络时,开发人员有多种选择。 在本次技术讲座中,Silicon Labs现场应用工程师Kris Young解释了为什么Bluetooth Mesh(蓝牙网状网络)是家用和商用无线网络的最佳解决方案。
在使用Silicon Labs的SLWSTK6020的开发板时,开发板上的开源开关是否可以拔到USB上供电?
不可以,Silicon Labs的SLWSTK6020开发板上的电源开关有三个档位,分别是BAT、USB、AEM,BAT是由板上的Coin Cell Battery电池接口供电,USB是使用 扩展板的USB接口供电(需要扩展板有USB接口),AEM是由增强型能量监视部分供电,这个是由板内提供电源。所以电源开关拔到BAT时,需要有接入电池才能供电,拔到 USB时需要扩展板有USB接口才能供电(EFR32BG13的小板没有USB接口),所以接到USB时SOC是不工作的,正确的接法是接到AEM接口,即可以供电,也可 以监控SOC的耗电情况。
开发必备:超全的蓝牙MESH技术规范,参考设计,开发资料,一站式下载集合!
Silicon Labs EFR32BG13系列低功耗蓝牙soc鉴于其Flash容量(512kB)和RAM大小(64kB),非常适合低功耗蓝牙网状网络应用,EFR32BG21系列蓝牙SoC,具备更高的性价比,非常适合有线供电的产品应用;这两个型号都支持蓝牙5.0。我们也为此整理一份超全的设计开发资料,一站式提供给蓝牙mesh开发人员下载。【世强硬创沙龙2019】
EFR32BG13 软件开发规格书有吗? PWM 输出IO口是否可以自己定义,还是固定IO口输出?
Silicon Labs EFR32BG13系列SoC 软件开发规格书下载地址:https://www.sekorm.com/doc/347916.html。 PWM输出I/O端口可以通过寄存器来自定义。也可以固定I/O端口输出。
电子商城
品牌:SILICON LABS
品类:Wireless Gecko SoC
价格:¥8.1764
现货: 102,628
品牌:SILICON LABS
品类:Mighty Gecko Multi-Protocol Wireless SoC
价格:¥27.0929
现货: 90,767
现货市场
品牌:SILICON LABS
品类:Switch Hall Effect Magnetic Position Sensor
价格:¥2.2924
现货:126,000
登录 | 立即注册
提交评论