CMSIS-RTOS2 文档翻译 之 参考(RTX5 特定的 API 之 函数)

RTX5 函数。更多...

函数

uint32_t osRtxErrorNotify (uint32_t code, void *object_id)
 OS 错误回调函数。更多...
 
void osRtxIdleThread (void *argument)
 OS 空闲线程。更多...
 

描述

函数文档

uint32_t osRtxErrorNotify(uint32_t code,
  void * object_id 
 )  

运行时可以检测到一些系统错误情况。如果 RTX 内核检测到运行时错误,则会为参数 object_id 指定的对象调用运行时错误函数 osRtxErrorNotify 。

参数代码将实际的错误代码传递给此函数:

错误代码描述
osRtxErrorStackUnderflow检测到线程堆栈溢出(thread_id = object_id)
osRtxErrorISRQueueOverflow插入对象时检测到 ISR 队列溢出(object_id)
osRtxErrorTimerQueueOverflow用户定时器回调计时器检测到队列溢出(timer_id = object_id)
osRtxErrorClibSpace标准 C/C ++ 库 libspace 不可用:增加 OS_THREAD_LIBSPACE_NUM
osRtxErrorClibMutex标准 C/C ++ 库互斥锁初始化失败

函数 osRtxErrorNotify 必须包含一个无限循环以防止进一步的程序执行。您可以使用模拟器跨越无限循环并追踪引入运行时错误的代码。对于溢出错误,这意味着您需要增加导致溢出的对象的大小。

注意
不能从中断服务程序调用。

代码示例

#include "rtx_os.h"
uint32_t osRtxErrorNotify (uint32_t code, void *object_id) {
(void)object_id;
switch (code) {
// Stack overflow detected for thread (thread_id=object_id)
break;
// ISR Queue overflow detected when inserting object (object_id)
break;
// User Timer Callback Queue overflow detected for timer (timer_id=object_id)
break;
// Standard C/C++ library libspace not available: increase OS_THREAD_LIBSPACE_NUM
break;
// Standard C/C++ library mutex initialization failed
break;
default:
break;
}
for (;;) {}
//return 0U;
}
osRtxErrorClibMutexvoid osRtxIdleThread(void * argument) 

当没有其他线程准备运行时,函数 osRtxIdleThread 由 RTX 内核执行。默认情况下,该线程是一个空白的无终止循环,它什么都不做。它只是等待另一个任务准备运行。您可以更改 osRtxIdleThread 函数的代码,使 CPU 进入省电模式或空闲模式,请参阅无节拍低功耗操作。

该线程的默认堆栈大小在文件 RTX_Config.h 中定义。请参阅线程配置。

注意
不能从中断服务程序调用。

代码示例

#include "rtx_os.h"
__NO_RETURN void osRtxIdleThread ( void *argument) {
(void)argument;
for (;;) {}
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值