|
发表于 2022-10-10 13:34:06
|
显示全部楼层
实在不好意思,以下两种方式还是不行,请帮忙看看,是不是用 osRtxInfo 来实现任务信息统计这思路有问题
第一种方式:
int32_t sl = osKernelLock();
memcpy((uint8_t *)&rtxInfo, (uint8_t *)&osRtxInfo, sizeof(osRtxInfo_t));
int32_t su = osKernelUnlock();
osKernelRestoreLock(su);
// ... critical code
osKernelRestoreLock(sl);
结果:加锁与不加锁一样,会出现有的任务被统计了两次,有的没有统计
第二种方式:
int32_t sl = osKernelLock();
memcpy((uint8_t *)&rtxInfo, (uint8_t *)&osRtxInfo, sizeof(osRtxInfo_t));
// Running Thread
p_tcb = rtxInfo.thread.run.curr;
// Ready List
遍历 p_tcb = rtxInfo.thread.ready.thread_list
// Delay List
遍历 p_tcb = rtxInfo.thread.delay_list
// Wait List
遍历 p_tcb = rtxInfo.thread.wait_list
int32_t su = osKernelUnlock();
osKernelRestoreLock(su);
// ... critical code
osKernelRestoreLock(sl);
结果:每次都少2个任务,分别是 timer 对应的任务, Delay List里的一个任务
|
|