函数
函数 | |
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) {
case
osRtxErrorStackUnderflow:
// 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;
case
osRtxErrorClibSpace:
// Standard C/C++ library libspace not available: increase OS_THREAD_LIBSPACE_NUM
break;
case
osRtxErrorClibMutex:
// Standard C/C++ library mutex initialization failed
break;
default:
break;
}
for (;;) {}
//return 0U;
}
osRtxErrorClibMutexvoid osRtxIdleThread | ( | void * | argument | ) |
当没有其他线程准备运行时,函数 osRtxIdleThread 由 RTX 内核执行。默认情况下,该线程是一个空白的无终止循环,它什么都不做。它只是等待另一个任务准备运行。您可以更改 osRtxIdleThread 函数的代码,使 CPU 进入省电模式或空闲模式,请参阅无节拍低功耗操作。
该线程的默认堆栈大小在文件 RTX_Config.h 中定义。请参阅线程配置。
-
注意
- 不能从中断服务程序调用。
代码示例