在线时间794 小时
UID3067179
注册时间2014-10-23
NXP金币981
TA的每日心情 | 开心 前天 08:28 |
---|
签到天数: 1313 天 [LV.10]以坛为家III
版主
- 积分
- 7552
- 最后登录
- 2024-3-27
|
本帖最后由 TLLED 于 2022-11-15 22:38 编辑
根据网上的资料,来学习 zephyr OS的多线程例程在LPC55S36开发板上的测试,通过串口输出的方式。
一、例程源码
测试代码是在helloworld的基础上进行修改的,修改的部分如下。
1.1、main.c
创建了三个线程(任务),通过串口输出三个任务的执行情况。
- #include <zephyr/zephyr.h>
- #include <zephyr/kernel.h>
- #define STACKSIZE 256
- #define PRIORITY 7
- //task1
- void taska(void *dummy1, void *dummy2, void *dummy3 )
- {
- while(1)
- {
- printk("taska runing...\n");
- k_msleep(100);
- }
- }
- //task2
- void taskb(void *dummy1, void *dummy2, void *dummy3 )
- {
- while(1)
- {
- printk("taskb runing...\n");
- k_msleep(200);
- }
- }
- //task3
- void taskc(void *dummy1, void *dummy2, void *dummy3 )
- {
- while(1)
- {
- printk("taskc runing...\n");
- k_msleep(500);
- }
- }
- K_THREAD_STACK_DEFINE(taska_stack_area, STACKSIZE);
- static struct k_thread taska_data;
- K_THREAD_STACK_DEFINE(taskb_stack_area, STACKSIZE);
- static struct k_thread taskb_data;
- K_THREAD_STACK_DEFINE(taskc_stack_area, STACKSIZE);
- static struct k_thread taskc_data;
- void main(void)
- {
- k_thread_create(&taska_data, taska_stack_area,
- K_THREAD_STACK_SIZEOF(taska_stack_area),
- taska,NULL,NULL,NULL,
- PRIORITY,0,K_FOREVER
- );
- k_thread_name_set(&taska_data, "task_a");
- k_thread_create(&taskb_data, taskb_stack_area,
- K_THREAD_STACK_SIZEOF(taskb_stack_area),
- taskb,NULL,NULL,NULL,
- PRIORITY+1,0,K_FOREVER
- );
- k_thread_name_set(&taskb_data, "task_b");
- k_thread_create(&taskc_data, taskc_stack_area,
- K_THREAD_STACK_SIZEOF(taskc_stack_area),
- taskc,NULL,NULL,NULL,
- PRIORITY+2,0,K_FOREVER
- );
- k_thread_name_set(&taskc_data, "task_c");
- k_thread_start(&taska_data);
- k_thread_start(&taskb_data);
- k_thread_start(&taskc_data);
- }
复制代码
1.2、修改配置文件
在prj.conf文件中增加下面内容:
- CONFIG_STDOUT_CONSOLE=y
- # enable to use thread names
- CONFIG_THREAD_NAME=y
- CONFIG_SCHED_CPU_MASK=y
复制代码
二、编译和下载
这个和上篇的一样,执行命令
root@ubuntu:~/zephyrproject/zephyr# west build -p auto -b lpcxpresso55s36 /opt/zephyrprj/task_test/
root@ubuntu:~/zephyrproject/zephyr# west flash
三、程序运行
程序烧写完成后,开发板串口输出
串口输出的任务内容的时序和程序是一致的。以上就是测试多线程的步骤。
|
|