Zephyr 操作系统主题
第1章 线程
1.1 线程定义
线程是操作系统内核调度任务的一种处理方式,通常用于处理由于执行时间太长或者太复杂而不能在中断( ISR) 内执行的任务。在zephyr中,系统线程是由内核定义且完成特定功能的必须线程,而应用线程则由用户应用程序根据需要而创建,数量不限。
每个线程都拥有自已独立的栈空间、处理函数、优先级等。要想让内核调度该线程之前,必须先创建这个线程。线程创建时可以定义为立即启动,或者延时一段时间后启动。
1.2 动态创建线程
1) 声明线程堆栈以及处理函数
#define USER_STACK_SIZE (K_THREAD_SIZEOF + 100)
char __noinit __stack user_stack_area[USER_STACK_SIZE];
void user_task(void*, void*, void*) // zephyr线程处理函数原型
{
// user application code
...
}
zephyr符号定义 | zephyr源码位置 | 功能描述 |
K_THREAD_SIZEOF | kernel\include\kernel_offsets.h | zephyr线程控制块大小 |
__noinit | include\section_tags.h | 非初始化段修饰符 |
__stack | include\toolchain\common.h | 4字节对齐修饰符 |
2) 调用创建线程API
k_tid_t user_task_tid = k_thread_spawn(user_stack_area, USER_STACK_SIZE, // 线程堆栈指针及栈大小
user_task, NULL, NULL, NULL, // 线程处理函数和入参
1, // 线程优先级
0, // 不使用选项字
K_NO_WAIT); // 立即启动
zephyr符号定义 | zephyr源码位置 | 功能描述 |
k_tid_t | include\kernel.h | 线程标识 |
k_thread_spawn | include\kernel.h | 创建线程并初始化 |
1.3 静态创建线程
zephyr允许代码里以宏定义方式静态地在代码编译时创建一个线程。
#define USER_STACK_SIZE (K_THREAD_SIZEOF + 100)
extern void user_task(void*, void*, void*);
K_THREAD_DEFINE(user_task_tid, // 线程标识命名
USER_STACK_SIZE, // 线程堆栈大小
user_task, NULL, NULL, NULL, // 线程处理函数和入参
1, // 线程优先级
0, // 不使用选项字
1000); // 延时1000毫秒后启动
zephyr符号定义 | zephyr源码位置 | 功能描述 |
K_THREAD_DEFINE | include\kernel.h | 宏定义创建线程 |
1.4 结束线程
线程一旦创建且启动后就会由内核调度一直运行下去,要想结束一个线程有三种办法:
1) 正常结束
从线程处理函数中正常返回。在返回前,应释放它所曾占用的资源(例如动态分配的内存等)。
2) 异常结束
线程触发一个致命的异常错误(有异常中断的处理器,例如Cortex ARM),将导致内核终止该线程。
3) 调用API结束
可以由线程自身或者其它线程调用k_thread_abort()来终止该线程。但不建议这么做,最好的方式是发送一个信号给到该线程,让其自已正常结束。
线程结束后,应用程序还可以重新创建该线程。
1.5 线程选项字
在创建线程时内核支持选项字定义,使得内核能够特殊处理线程。选项字为整型,目前使用了三个选项BIT位:K_ESSENTIAL、K_FP_REGS、K_SSE_REGS。
1) K_ESSENTIAL
必须线程,表明线程是不可以被终止的。否则内核视为产生了一个致命的系统错误。
2) K_FP_REGS、K_SSE_REGS
这些选项表示线程分别使用CPU的浮点寄存器和SSE寄存器(例如x86架构处理器)。默认情况下,内核在处理线程时不会处理这些寄存器。用该选项可以指示内核在调度线程时采取额外的步骤来保存和恢复这些寄存器的内容。
推荐阅读
-
22 款最受欢迎的 3D 重建软件 [2022] - 3DF Zephyr
-
Zephyr 操作系统主题
-
安装、编译并运行操作系统 GeekOS
-
Puter:宇宙中最有趣的操作系统!不要点击进入,我保证你会笑到喷饭!!!????????
-
ES 解释 + TypeScript + Nodejs 主题
-
4D 动感车主题影厅登陆万达影城
-
基于 Androi 的万达灯饰预订系统(源代码+开放主题)-开放主题报告内容
-
万达影院票务管理系统(源代码 + 开放式主题) - 开放式主题报告内容
-
使用 winzip 生成的扩展名为 -ZIP 的压缩文件通常使用".zip "扩展名,其 MIME 格式为 application/zip。(推荐学习:phpstorm) 目前,ZIP 格式属于几种主流压缩格式之一,其竞争对手包括 RAR 格式和开源的 7z 格式。 从性能对比来看,RAR 和 7z 格式比 ZIP 格式压缩率更高,而 7-Zip 由于提供免费压缩工具而逐渐在更多领域得到应用。 微软从 Windows ME 操作系统开始就内置了对 zip 格式的支持,即使用户没有在电脑上安装解压软件,也可以打开和创建 zip 格式的压缩文件,OS X 和流行的 Linux 操作系统也提供了类似的 zip 格式支持。 因此,如果要在网络上传播和分发文件,zip 格式往往是最常见的选择。
-
不是这个主题的标题"不是这个主题的标题。