void rt_application_init(void)
{
rt_thread_t tid;
#ifdef RT_USING_HEAP
tid = rt_thread_create("main", main_thread_entry, RT_NULL,
RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);
RT_ASSERT(tid != RT_NULL);
#else
rt_err_t result;
tid = &main_thread;
result =rt_thread_init(tid, "main", main_thread_entry, RT_NULL,
main_stack, sizeof(main_stack),RT_MAIN_THREAD_PRIORITY, 20);
RT_ASSERT(result == RT_EOK);
/* if not define RT_USING_HEAP, using toeliminate the warning */
(void)result;
#endif
rt_thread_startup(tid);
}
void task(void *parameter)
{
while (1)
{
// do_work();
}
}
关于资源释放通常是任务的析构过程,这就是任务的结束。例如上例中的main_thread_entry任务之所以称为小任务的原因就是它做完事情就结束了。那么可能就会想,既然任务都结束了那么它的资源如何释放呢?比如栈空间,TCB等。这就是idle该干的事情。即使所有的用户任务都结束,最后也会剩下idle任务在运行。如果有必要的话,可以在idle任务中可以通过调用低功耗组件进入低功耗或者干脆调用电源开关控制来关机。
其次idle任务占用了最低优先级。虽然用户任务也可以使用和idle任务相同的优先级,但是并不建议这样做,比如在低功耗设计时就会出问题。另外我个人在思考一个问题,idel任务既然以经在设计之初就明确了其获得运行的条件,那么何不做成无需优先级的任务,唯一的调度决策就是:当调度器没有任务处于ready状态时就切换到idel任务运行。这就无需关注最低优先级被idle霸占的问题了。