k_thread_foreach
函数原型:
void k_thread_foreach(k_thread_user_cb_t user_cb, void *user_data)
函数功能说明:
遍历系统中的所有线程。
这个例程遍历系统中的所有线程,并为每个线程调用user_cb函数。
注意:必须设置CONFIG_THREAD_MONITOR才能使此函数有效。
注意:这个API使用k_spin_lock来保护_kernel.threads列表,这意味着创建新的线程和现有线程的终止将被阻止,直到这个API返回为止。
参数说明
user_cb-指向用户回调函数的指针
user_data-指向用户数据的指针。
扫描二维码关注公众号,回复: 14870600 查看本文章
k_thread_foreach_unlocked
函数原型
void k_thread_foreach_unlocked(k_thread_user_cb_t user_cb, void *user_data)
函数功能说明
锁定系统中的所有线程。
这个例程的工作原理与k_thread_foreach完全相同,但在执行user_cb时解锁中断。
注意:必须设置CONFIG_THREAD_MONITOR才能使此函数有效。
注意:此API仅在访问_内核时使用k_spin_lock。线程对元素进行排队。它在用户回调函数处理期间解锁。如果在执行此foreach函数时创建了新任务,则添加的新任务将不包括在枚举中。如果在此枚举过程中中止了某个任务,则此处将存在竞争,并且此中止的任务可能会包含在枚举中。
注意:如果任务被中止,并且在k_thread_foreach_unlocked进行时k_thread结构占用的内存被重用,甚至可能导致系统行为不稳定。这个函数可能永远不会返回,因为它会跟随下一个任务指针处理给定的指针作为指向k_thread结构的指针,而它现在是不同的。如果在任何上下文中调用该函数后它被中止,请不要重用中止任务的k_thread结构所占用的内存。
参数说明
user_cb-指向用户回调函数的指针。
user_data-指向用户数据的指针
k_thread_create
函数原型
k_tid_t k_thread_create(struct k_thread *new_thread, k_thread_stack_t *stack, size_t
stack_size, k_thread_entry_t entry, void *p1, void *p2, void *p3, int
prio, uint32_t options, k_timeout_t delay)
函数功能说明
创建线程。
这个例程初始化一个线程,然后安排它来执行。
新线程可能被计划立即执行或延迟启动。如果新生成的线程没有延迟启动,那么内核调度程序可能会优先使用当前线程来允许执行新线程。
线程选项是特定于架构的,可以包括K_ESSENTIAL、K_FP_REGS和K_SSE_REGS。可以通过使用“|”(逻辑OR运算符)来分离它们来指定多个选项。
传递给这个函数的堆栈对象最初必须用这些宏来定义,才能被移植:
- K_THREAD_STACK_DEFINE()——用于可能支持用户或主管线程的堆栈。
- K_KERNEL_STACK_DEFINE()-对于可能仅支持主管线程的堆栈。如果启用了CONFIG_USERSPACE,这些堆栈使用的内存就会更少。
stack_size参数带有约束条件。它必须是:
- 传递给K_THREAD_STACK_DEFINE()或K_KERNEL_STACK_DEFINE()的原始大小值
- 如果堆栈是用K_THREAD_STACK_DEFINE()定义的,则K_THREAD_STACK_SIZEOF(堆栈)的返回值
- 如果堆栈是用K_KERNEL_STACK_DEFINE()定义,则K_KERNEL_STACK_SIZEOF(堆栈)的返回值。
使用其他值或大小(堆栈)可能会产生未定义的行为。
参数说明
new_thread-指向未初始化的结构体k_thread的指针
stack-指向堆栈空间的指针。
stack_size-以字节表示的堆栈大小。
entry-线程输入功能
p1-第1个指针输入参数。
p2-第二指针输入参数。
p3-第三个指针输入参数。
prio-任务优先级
options-线程选项。
delay-计划延迟,或K_NO_WAIT(对于无延迟)
返回值
返回新线程的ID。
k_thread_user_mode_enter
函数原型
FUNC_NORETURN void k_thread_user_mode_enter(k_thread_entry_t entry, void *p1, void *p2,
void *p3)
函数功能说明
将线程的特权永久删除到用户模式
参数说明
entry-从开始执行的函数
p1-1入口点参数
p2-2入口点参数
p3-3入口点参数
k_thread_heap_assign
函数原型
static inline void k_thread_heap_assign(struct k_thread *thread, struct k_heap *heap)
函数功能说明
将一个资源内存池分配给一个线程。
参数说明
thread 要为资源请求分配内存池的目标线程。
heap 用于资源的堆对象,如果线程不再有内存池,则为空。
k_thread_system_pool_assign
函数原型
void k_thread_system_pool_assign(struct k_thread *thread)
函数功能说明
将系统堆指定为线程的资源池。
参数说明
要为资源请求分配系统堆的目标线程。
k_thread_join
函数原型
int k_thread_join(struct k_thread *thread, k_timeout_t timeout)
函数功能
睡眠,直到一个线程退出。
调用这个函数的线程将休眠,直到目标线程退出,原因是中止、自我退出或发生致命错误。如果线程没有运行,此API将立即返回。
这个API只能从具有K_NO_WAIT超时的ISRs中调用,其中它可以作为一个谓词,用于检测线程何时中止。
参数说明
thread-将要退出休眠的线程
timeout- 线程将要退出时间
返回值说明
0-成功,目标线程已退出或未运行
-EBUSY-没有等待就返回了
EAGAIN-等待时间超时
EDAEALK-目标线程加入调用者,或者目标线程是调用者
k_sleep
函数原型
int32_t k_sleep(k_timeout_t timeout)
函数功能说明
使当前的线程休眠。
参数说明
timeout-期望的睡眠时间。
未完待续