#include<rtthread.h>#defineTHREAD_STACK_SIZE512#defineTHREAD_PRIORITY25#defineTHREAD_TIMESLICE5// 线程控制块staticstructrt_thread thread1;staticstructrt_thread thread2;staticstructrt_thread thread3;// 线程堆栈ALIGN(RT_ALIGN_SIZE)staticrt_uint8_t thread1_stack[THREAD_STACK_SIZE];staticrt_uint8_t thread2_stack[THREAD_STACK_SIZE];staticrt_uint8_t thread3_stack[THREAD_STACK_SIZE];// 线程入口函数staticvoidthread_entry1(void*parameter){while(1){rt_kprintf("Thread 1: I am the first thread.\n");rt_thread_mdelay(3000);// 3秒延时}}staticvoidthread_entry2(void*parameter){while(1){rt_kprintf("Thread 2: I am the second thread.\n");rt_thread_mdelay(3000);// 3秒延时}}staticvoidthread_entry3(void*parameter){while(1){rt_kprintf("Thread 3: I am the third thread.\n");rt_thread_mdelay(3000);// 3秒延时}}// 主函数intmain(void){// 初始化线程rt_thread_init(&thread1,"thread1",
thread_entry1,
RT_NULL,&thread1_stack[0],sizeof(thread1_stack),
THREAD_PRIORITY,
THREAD_TIMESLICE);rt_thread_init(&thread2,"thread2",
thread_entry2,
RT_NULL,&thread2_stack[0],sizeof(thread2_stack),
THREAD_PRIORITY,
THREAD_TIMESLICE);rt_thread_init(&thread3,"thread3",
thread_entry3,
RT_NULL,&thread3_stack[0],sizeof(thread3_stack),
THREAD_PRIORITY,
THREAD_TIMESLICE);// 启动线程rt_thread_startup(&thread1);rt_thread_startup(&thread2);rt_thread_startup(&thread3);return0;}
逐行代码解释
#include<rtthread.h>/*
|定义|
- 这三行定义了线程的栈大小、优先级和时间片。
- 栈大小是线程可以使用的内存量;
- 优先级决定了线程相对于其他线程的运行优先权;
- 时间片是线程在被强制切换之前可以运行的时间量。
*/#defineTHREAD_STACK_SIZE512#defineTHREAD_PRIORITY25#defineTHREAD_TIMESLICE5/*
|线程控制块|
- 定义了三个线程控制块
- 这些是RT-Thread用来管理线程的内部结构。
*/staticstructrt_thread thread1;staticstructrt_thread thread2;staticstructrt_thread thread3;/*
|线程堆栈|
- 定义了三个线程的堆栈数组
- 并确保它们按RT-Thread要求的对齐方式对齐
- 这些堆栈用于存储线程的局部变量和调用历史。
*/ALIGN(RT_ALIGN_SIZE)staticrt_uint8_t thread1_stack[THREAD_STACK_SIZE];staticrt_uint8_t thread2_stack[THREAD_STACK_SIZE];staticrt_uint8_t thread3_stack[THREAD_STACK_SIZE];/*
|线程入口函数|
- 定义了第一个线程的入口函数
- 这个函数无限循环,每次循环都打印一条消息然后延迟3秒。
*/staticvoidthread_entry1(void*parameter){while(1){rt_kprintf("Thread 1: I am the first thread.\n");rt_thread_mdelay(3000);// 3秒延时}}/*
|线程入口函数|
- 定义了第一二个线程的入口函数
- 这个函数无限循环,每次循环都打印一条消息然后延迟3秒。
*/staticvoidthread_entry2(void*parameter){while(1){rt_kprintf("Thread 2: I am the second thread.\n");rt_thread_mdelay(3000);// 3秒延时}}/*
|线程入口函数|
- 定义了第三个线程的入口函数
- 这个函数无限循环,每次循环都打印一条消息然后延迟3秒。
*/staticvoidthread_entry3(void*parameter){while(1){rt_kprintf("Thread 3: I am the third thread.\n");rt_thread_mdelay(3000);// 3秒延时}}// 主函数intmain(void){/*
|初始化线程|
- 线程指针
- 线程名称
- 入口函数
- 参数
- 堆栈
- 堆栈大小
- 优先级 - 具体查询 RT-Thread 文档,不同芯片有不同等级划分
- 时间片 - 具体查询 RT-Thread 文档
*/rt_thread_init(&thread1,"thread1",
thread_entry1,
RT_NULL,&thread1_stack[0],sizeof(thread1_stack),
THREAD_PRIORITY,
THREAD_TIMESLICE);/*
|初始化线程|
- 同理
*/rt_thread_init(&thread2,"thread2",
thread_entry2,
RT_NULL,&thread2_stack[0],sizeof(thread2_stack),
THREAD_PRIORITY,
THREAD_TIMESLICE);/*
|初始化线程|
- 同理
*/rt_thread_init(&thread3,"thread3",
thread_entry3,
RT_NULL,&thread3_stack[0],sizeof(thread3_stack),
THREAD_PRIORITY,
THREAD_TIMESLICE);// 启动线程rt_thread_startup(&thread1);rt_thread_startup(&thread2);rt_thread_startup(&thread3);return0;}