中级会员
- 积分
- 455
- 金钱
- 455
- 注册时间
- 2018-10-12
- 在线时间
- 62 小时
|
发表于 2020-1-3 22:36:34
|
显示全部楼层
嗨,我是新手,刚好也遇到了这个问题。目前我学习的是ucosII的291版本,也是想用OS_TaskIdle的钩子函数App_TaskIdleHook。上述条件版本号已经符合,再把OS_APP_HOOKS_EN设置为1,的确有许多错误。追踪发现是这个开关还控制着其他的一些钩子函数,而这些钩子函数相当于连坑它也没预留。需要咱们自己写,由于有好几个,我就偷懒,OS_APP_HOOKS_EN依然为0,如图片这样,就可以用了。就是不太清楚这个钩子函数App_TaskIdleHook该写在哪里比较好?我现在写在了os_task.c的最下面,
void App_TaskIdleHook (void)
{
static int num;
num++;
if(num%50000==0)
{
printf("Idle Task Running 50000 times!\r\n");
}
}
但是它与空闲任务OS_TaskIdle里面我屏蔽的那几行,效果一样!
void OS_TaskIdle (void *p_arg)
{
#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0u;
#endif
p_arg = p_arg; /* Prevent compiler warning for not using 'p_arg' */
for (;;) {
OS_ENTER_CRITICAL();
OSIdleCtr++;
// if(OSIdleCtr%500000 == 0)
// {
// printf("Idle Task Running 500000 times!\r\n");
// }
OS_EXIT_CRITICAL();
OSTaskIdleHook(); /* Call user definable HOOK */
}
}
目前我还不清楚,哪种方法合适
|
|