涉及的配置宏:
Main thread:
在内核的初始化时候执行,然后调用main()函数。
Main thread 默认情况下是最高配置的可强占的优先级。如果内核没有配置为可强占的线程,main thread就会使用最低配置的cooperative thread。
执行应用的main()函数;如果这个线程终止将引发致命的错误。
Idle thread:
当系统没有其他工作需要做时,就会执行这个idle thread。这个线程会一直执行不会中断,只要系统一直自运行。这个使线程使用的最低配置的线程优先级,当有其他线程就绪时,就会马上执行其他线程。
线程的生命周期(线程的创建,挂起和恢复等操作):
http://docs.zephyrproject.org/kernel/threads/lifecycle.html
1. 堆栈区
2. 线程控制块 struct k_thread
3. 线程的入口函数
4. 调度的优先级
5. 线程的选择,在特殊环境下的特殊处理
6. 开始延迟,线程的等待时间开始后的等待时间。
7. 线程运行的模式,线程可以运行在管理员模式或者用户模式。默认情况下是管理员模式,可以访问特权CPU指令。
原文地址链接:
http://docs.zephyrproject.org/kernel/threads/lifecycle.html#thread-termination
zephyr线程操作的接口:
K_THREAD_DEFINE
线程的创建:
k_thread_create();
内核将会初始化线程控制块和堆栈的一段。
线程的终止,线程在执行时可能会因为同步等问题儿终止,终止释放申请到的内存空间,或者是互斥锁等。
线程的异常:
k_thread_abort();
如果线程触发了一个致命的错误例如操作空指针,内核会制动终止这个线程。一个线程可能通过自己或者其他线程调用k_thread_abort()而终止。
k_thread_suspend();
k_thread_resume();
线程在执行过程中可能被挂起,k_thread_suspend()会被挂起,直到调用k_thread_resume().使线程取消挂起状态。
线程属性的选择:
Thread options
可供选择的选项:K_ESSENTIAL,K_FP_REGS,K_SSE_REGS,K_USER和K_inherit_perms
K_THREAD_STACK_DEFINE
K_THREAD_STACK_ARRAY_DEFINE
K_THREAD_STACK_MEMBER
K_THREAD_STACK_SIZEOF
K_THREAD_STACK_BUFFER
在zephyr的线程创建中,有两种方法:
方法1:
#define MY_STACK_SIZE 500
#define MY_PRIORITY 5
extern void my_entry_point(void *, void *, void *);
K_THREAD_STACK_DEFINE(my_stack_area, MY_STACK_SIZE);
struct k_thread my_thread_data;
k_tid_t my_tid = k_thread_create(&my_thread_data, my_stack_area,
K_THREAD_STACK_SIZEOF(my_stack_area),
my_entry_point,
NULL, NULL, NULL,
MY_PRIORITY, 0, K_NO_WAIT);
方法2:
#define MY_STACK_SIZE 500
#define MY_PRIORITY 5
extern void my_entry_point(void *, void *, void *);
K_THREAD_DEFINE(my_tid, MY_STACK_SIZE,
my_entry_point, NULL, NULL, NULL,
MY_PRIORITY, 0, K_NO_WAIT);