Zephyr 的动态thread怎么使用

在 Zephyr RTOS 中,动态线程可以在运行时创建和管理,适用于线程数量或内存需求在编译时无法确定的场景。以下是创建动态线程的关键步骤:

  • 动态分配堆栈内存

        使用 k_thread_stack_alloc 分配线程堆栈的内存:

k_thread_stack_t *stack;
size_t stack_size = 1024; // 定义堆栈大小
stack = k_thread_stack_alloc(stack_size, IS_ENABLED( CONFIG_USERSPACE ) ? K_USER : 0 );
  • 创建线程

​​​​​        使用 k_thread_create 创建线程,指定堆栈内存和其他参数:

struct k_thread my_thread;
k_tid_t thread_id;
thread_id = k_thread_create(&my_thread, stack, stack_size,
                            my_thread_func, NULL, NULL, NULL,
                            7, 0, K_NO_WAIT);
  • &my_thread:线程控制块。
  • stack:指向堆栈内存的指针。
  • stack_size:堆栈内存的大小。
  • my_thread_func:线程执行的函数。
  • NULL:线程函数的参数(在此示例中不使用)。
  • 7:线程优先级(可根据需要调整)。
  • 0:线程选项(如 K_ESSENTIAL 用于重要线程)。
  • K_NO_WAIT:线程创建的等待时间。
  1. 其中my_thread也可以用k_malloc来申请内存, 这样在删除任务的时候, 可以将其k_free.
  2. stack_size不能使用K_THREAD_STACK_SIZEOF()来获取.
  • prj.conf的设置
CONFIG_HEAP_MEM_POOL_SIZE=20480
CONFIG_INIT_STACKS=y
CONFIG_THREAD_STACK_INFO=y
CONFIG_MAX_THREAD_BYTES=5
CONFIG_DYNAMIC_THREAD=y
CONFIG_DYNAMIC_THREAD_POOL_SIZE=2
CONFIG_DYNAMIC_THREAD_ALLOC=y

by Ryan.xh

thanks~

留言你的点评或疑问, 有空会看看~~~

欢迎联系及关注,一起探讨技术一起合作项目!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值