系统线程
系统线程指的是在系统初始化期间有内核自动派生的线程
系统线程相关概念
内核会派生出两个系统线程,它们分别是主线程和空闲线程
主线程:
这个线程在执行完内核初始化后调用应用程序的主函数mian()(如果定义了主函数)
默认情况下,主线程是优先级最高的抢占式线程。如果内核配置为不支持抢占式线程,那么主线程会被配置为优先级最低的协作式线程
主线程在执行内核初始化或调用应用程序的主函数main()时是一个至关重要的线程。这意味着如果线程被异步中止就出现了一个致命的系统错误,如果主函数main()没被定义,或者执行了主函数main()时在主函数mian()中正常返回了(同步的方式),那么主线程会以同步终止的方式结束,不会出现任何错误
空闲线程:
空闲线程会在系统没有其他工作执行时运行,如果可以的话可以在空闲线程中启动电源管理来节省功耗。否者的话空闲线程会一直做空循环操作。只要系统运行,那么空闲线程就会一直运行永远不会结束
空闲线程总是被配置成优先级最低的线程。如果它是一个协作式线程,空闲线程会周期性的让出CPU,这样其他线程在需要的时候就可以运行了
空闲线程也是至关重要的线程,所以在线程被异步中止时会出现一个致命的系统错误
或许还会有其他的系统线程被派生出来,这是由应用程序指定的内核和板级配置选项决定的。例如,使能系统工作队列时将会派生出一个提交工作项服务的线程
系统线程的实现
写一个主函数功能
一个应用程序会提供一个主函数main()功能在内核初始化完成后被调用。内核不会传任何参数给它
下面的代码大概描述了主函数main()的功能。在真正应用时这个函数功能复杂度会根据需求变化而变化
void main(void) { /* initialize a semaphore */ ... /* register an ISR that gives the semaphore */ ... /* monitor the semaphore forever */ while (1) { /* wait for the semaphore to be given by the ISR */ ... /* do whatever processing is now needed */ ... } }
推荐用法
在应用程序中通过主线程执行只需要一个单一线程的处理,不需要应用程序指定额外的线程
配置选项
相关的配置选项如下:
CONFIG_MAIN_THREAD_PRIORITY
CONFIG_MAIN_STACK_SIZE
CONFIG_IDLE_STACK_SIZE
APIs
无