# NCS-OS系列8 :系统线程

NCS-OS系列8 :系统线程

文章目录

  • NCS-OS系列8 :系统线程
  • 前言
  • 概念
  • 实现
    • 写一个`main()`函数
    • 推荐用法

前言

ncs 相关文章,部分为原始文档翻译,水平有限,如果有错误,欢迎指出。

本文参考链接:
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/reference/kernel/threads/system_threads.html

概念

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

系统生成如下的系统线程:

  • 主线程 Main thread
    这个线程执行内核初始化,然后调用应用程序的main()函数。默认情况下,主线程使用最高配置的可抢占线程优先级(即0),如果内核没有配置支持可抢占线程,主线程使用最低配置的协作线程优先级(即-1)。在执行内核初始化或执行应用程序的main()函数时,主线程是一个必要线程;这意味着如果线程中止,将引发一个致命的系统错误。如果main()未定义,或者它执行后正常返回,主线程正常终止,则不会引发错误。
  • 休眠线程 Idle thread
    这个线程在系统没有其他工作时执行。如果可以的话,空闲线程可以激活板子的电源管理,以节省电源;否则,空闲线程只是执行一个“不做任何事情”循环。空闲线程在系统运行时一直存在,永远不会终止。

其他的系统线程也有可能产生,这取决于应用程序指定的内核和板配置选项。例如,启用系统工作队列会生成一个系统线程,该线程为提交给它的工作项提供服务。

实现

写一个main()函数

应用程序提供的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 */
        ...
    }
}

推荐用法

使用主线程在只需要单个线程的应用程序中执行基于线程的处理,而不是定义额特定应用程序的线程。

你可能感兴趣的:(nRF,Connect,SDK)