Zephyr OS之线程

   Zephyr 是 Linux 基金会推出的一个适用于物联网的小型可伸缩的实时操作系统,支持多种处理器架构。Zephyr 是安全的、开源的、模块化的以及支持多种连接方式,将支持 Bluetooth, Bluetooth LE, WiFi, 802.15.4 以及 6Lowpan, CoAP, IPv4, IPv6, and NFC.。参考: https://www.zephyrproject.org/

第1章    线程

1.1    线程定义

       线程是操作系统内核调度任务的一种处理方式,通常用于处理由于执行时间太长或者太复杂而不能在中断( ISR) 内执行的任务。在zephyr中,系统线程是由内核定义且完成特定功能的必须线程,而应用线程则由用户应用程序根据需要而创建,数量不限。

       每个线程都拥有自已独立的栈空间、处理函数、优先级等。要想让内核调度该线程之前,必须先创建这个线程。线程创建时可以定义为立即启动,或者延时一段时间后启动。

1.2    动态创建线程

    1) 声明线程堆栈以及处理函数

#define STACKSIZE                          4096
K_THREAD_STACK_DEFINE(stack_area, STACKSIZE)

static struct k_thread  task_id;

static void producer_thread(void)
{
        while(1)
        {
            k_sleep(10);
        }
}

k_thread_create(&task_id, stack_area, K_THREAD_STACK_SIZEOF(stack_area),
                (k_thread_entry_t)producer_thread,NULL,NULL,NULL,
                K_PRIO_PREEMPT(1), 0, K_NO_WAIT);


 1.3    结束线程 

       线程一旦创建且启动后就会由内核调度一直运行下去,要想结束一个线程有三种办法:

1) 正常结束
       从线程处理函数中正常返回。在返回前,应释放它所曾占用的资源(例如动态分配的内存等)。

2) 异常结束
       线程触发一个致命的异常错误(有异常中断的处理器,例如Cortex ARM),将导致内核终止该线程。

3) 调用API结束
       可以由线程自身或者其它线程调用k_thread_abort()来终止该线程。但不建议这么做,最好的方式是发送一个信号给到该线程,让其自已正常结束。

       线程结束后,应用程序还可以重新创建该线程。

1.5    线程选项字

       在创建线程时内核支持选项字定义,使得内核能够特殊处理线程。选项字为整型,目前使用了三个选项BIT位:K_ESSENTIALK_FP_REGSK_SSE_REGS

 1) K_ESSENTIAL
       必须线程,表明线程是不可以被终止的。否则内核视为产生了一个致命的系统错误。

 2) K_FP_REGSK_SSE_REGS
       这些选项表示线程分别使用CPU的浮点寄存器和SSE寄存器(例如x86架构处理器)。默认情况下,内核在处理线程时不会处理这些寄存器。用该选项可以指示内核在调度线程时采取额外的步骤来保存和恢复这些寄存器的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值