系统线程

系统线程 是内核在系统初始化期间自动创建的线程。

内核会创建以下系统线程:

主线程

此线程执行内核初始化,然后调用应用程序的 main() 函数(如果已定义)。

默认情况下,主线程使用配置的最高抢占式线程优先级(即 0)。如果内核未配置为支持抢占式线程,主线程则使用配置的最低协作式线程优先级(即 -1)。

主线程在执行内核初始化或应用程序的 main() 函数期间属于关键线程;这意味着线程中止会引发致命系统错误。如果未定义 main(),或者该函数执行后正常返回,主线程将正常终止,不会引发错误。

空闲线程

系统没有其他工作可做时,此线程便会执行。如果可能,空闲线程会启用开发板的电源管理支持以节省功耗;否则,它只执行一个“什么也不做”的循环。只要系统仍在运行,空闲线程就一直存在,永不终止。

空闲线程始终使用配置的最低线程优先级。

空闲线程属于关键线程,这意味着线程中止会引发致命系统错误。

根据应用程序指定的内核和开发板配置选项,还可能创建其他系统线程。例如,启用系统工作队列会创建一个系统线程,处理提交到该队列的工作项。(参见 工作队列线程。)

实现

编写 main() 函数

内核初始化完成后,应用程序提供的 main() 函数开始执行。除非选择了 CONFIG_BOOTARGS,否则内核不会向该函数传递任何参数。选择此选项后,内核会向其传递参数,此时可以使用 main(int, char **)。

以下代码展示了一个简单的 main(void) 函数。实际应用程序中的函数可以根据需要实现更复杂的逻辑。

int 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 */
        ...
    }
}

使用建议

对于只需要一个线程的应用程序,使用主线程完成基于线程的处理,无需再定义一个应用程序专用线程。