OS_TASK_STAT_STK_CHK_EN
时间: 2023-07-14 16:07:14 浏览: 48
OS_TASK_STAT_STK_CHK_EN是一个操作系统的配置选项。它表示是否在任务状态查询中启用堆栈检查功能。堆栈检查功能可以用于检测任务堆栈的溢出情况,以防止任务因为堆栈溢出而导致系统崩溃。如果该选项被启用,操作系统将在任务状态查询时检查任务的堆栈使用情况。如果该选项被禁用,操作系统将不会进行堆栈检查。
相关问题
#if OS_TASK_STAT_EN > 0 void OS_TaskStat (void *p_arg) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0; #endif (void)p_arg; /* Prevent compiler warning for not using 'p_arg' */ while (OSStatRdy == OS_FALSE) { OSTimeDly(2 * OS_TICKS_PER_SEC / 10); /* Wait until statistic task is ready */ } OSIdleCtrMax /= 100L; if (OSIdleCtrMax == 0L) { OSCPUUsage = 0; (void)OSTaskSuspend(OS_PRIO_SELF); } for (;;) { OS_ENTER_CRITICAL(); OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */ OSIdleCtr = 0L; /* Reset the idle counter for the next second */ OS_EXIT_CRITICAL(); OSCPUUsage = (INT8U)(100L - OSIdleCtrRun / OSIdleCtrMax); OSTaskStatHook(); /* Invoke user definable hook */ #if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) OS_TaskStatStkChk(); /* Check the stacks for each task */ #endif OSTimeDly(OS_TICKS_PER_SEC / 10); /* Accumulate OSIdleCtr for the next 1/10 second */ } } #endif
这段代码是嵌入式操作系统中的任务统计函数。它的作用是定期统计系统中每个任务的CPU使用率,并进行一些其他的统计工作。
代码中的一些关键点解释如下:
- `OS_TASK_STAT_EN` 是一个宏定义,用于判断任务统计功能是否开启。
- `OS_CRITICAL_METHOD` 是一个宏定义,用于选择操作系统中临界区保护的方法。
- `OSStatRdy` 是一个全局变量,表示任务统计功能是否准备就绪。
- `OSIdleCtrMax` 是一个全局变量,表示系统空闲时的计数器最大值。
- `OSIdleCtr` 和 `OSIdleCtrRun` 是全局变量,用于记录系统空闲时的计数器值。
在任务统计函数中,首先会等待任务统计功能准备就绪。然后,将空闲计数器的最大值除以100,并判断是否为0。如果为0,则表示系统一直处于空闲状态,将CPU使用率设置为0,并挂起任务本身。
接下来,进入一个无限循环,在循环中获取过去一秒钟内的空闲计数器值,并重置计数器。根据空闲计数器值计算CPU使用率,并调用用户定义的钩子函数。
如果开启了任务堆栈检查功能,并且开启了扩展任务创建功能,则会检查每个任务的堆栈使用情况。
最后,通过延时函数等待一段时间,以便累积下一次的空闲计数器值。
以上就是这段代码的大致功能和逻辑。如果有其他问题,请继续提问。
阅读全文