系统线程

来源:互联网 发布:云计算概念股 编辑:程序博客网 时间:2024/06/07 18:05

系统线程

   系统线程指的是在系统初始化期间有内核自动派生的线程

系统线程相关概念

   内核会派生出两个系统线程,它们分别是主线程和空闲线程

   主线程:

   这个线程在执行完内核初始化后调用应用程序的主函数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

   无

   

原创粉丝点击