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 (;;) {}
}

猜你喜欢

转载自blog.csdn.net/u012325601/article/details/80210452