0
点赞
收藏
分享

微信扫一扫

物联网操作系统Zephyr(内核篇)之2.1 内核服务之线程(API)(2)


 ​​Zephyr物联网操作系统专栏汇总​​ 

 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-指向用户数据的指针。


 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。 



举报

相关推荐

0 条评论