zephyr笔记 2.1.4 系统线程

我正在学习 Zephyr,一个很可能会用到很多物联网设备上的操作系统,如果你也感兴趣,可点此查看帖子zephyr学习笔记汇总

1 前言

系统线程是内核在系统初始化时自动产生的线程。

http://docs.zephyrproject.org/kernel/threads/system_threads.html

2 概念

内核产生以下系统线程。

2.1 主线程

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

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

主线程是执行内核初始化或执行应用程序的 main() 函数时的基本线程;这意味着如果线程中止,则会引发致命的系统错误。如果没有定义 main() ,或者如果它执行然后执行正常返回,主线程会正常终止并且不会引发错误。

2.2 空闲线程

此线程在系统没有其他工作要执行时执行。如果可能,空闲线程激活板子上的电源管理支持以节省电量;否则,空闲线程只是执行一个“无所事事”循环。只要系统正在运行并且永不终止,空闲线程就会一直存在。

空闲线程始终使用最低配置的线程优先级。如果这使它成为一个合作的线程,空闲线程会重复产生CPU以允许应用程序的其他线程在需要时运行。

空闲线程是一个重要的线程,这意味着如果线程中止,会引发致命的系统错误。

额外的系统线程也可能被派生,这取决于应用程序指定的内核和板配置选项。例如,启用系统工作队列会产生一个系统线程来为提交给它的工作项提供服务。 (请参阅工作队列线程。)

3 操作

3.1 写个 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 */
        ...
    }
}

4 建议用法

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

5 配置选项

  • CONFIG_MAIN_THREAD_PRIORITY
  • CONFIG_MAIN_STACK_SIZE
  • CONFIG_IDLE_STACK_SIZE

6 API

End


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值