本文共 2118 字,大约阅读时间需要 7 分钟。
任务:
优先级:
调度:
创建动态线程
/* 1. 线程栈(字节) */#define THREAD_STACK_SIZE 512/* 2. 线程优先级 */#define THREAD_PRIORITY 25/* 3. 时间片(tick) */#define THREAD_TIMESLICE 5/* 4. 动态线程句柄 */static rt_thread_t tid1 = RT_NULL;/* 5. 线程 1 的入口函数 */static void thread1_entry(void *parameter){ rt_uint32_t count = 0; while (1) { /* 线程 1 采用低优先级运行,一直打印计数值 */ rt_kprintf("thread1 count: %d\n", count ++); rt_thread_mdelay(500); }}
初始化静态线程
/* 静态线程特有,线程栈初始化 */static char thread2_stack[1024];/* 注意句柄类型,区别于动态线程 */static struct rt_thread thread2;/* 线程 2 入口函数 */static void thread2_entry(void *param){ rt_uint32_t count = 0; /* 线程 2 拥有较高的优先级,以抢占线程 1 而获得执行 */ for (count = 0; count < 10 ; count++) { /* 线程 2 打印计数值 */ rt_kprintf("thread2 count: %d\n", count); } rt_kprintf("thread2 exit\n"); /* 线程 2 运行结束后也将自动被系统脱离 */}
创建线程
/* 线程示例 */int thread_sample(void){ /* 创建线程 1,名称是 thread1,入口是 thread1_entry*/ tid1 = rt_thread_create("thread1", thread1_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); /* 如果获得线程控制块,启动这个线程 */ if (tid1 != RT_NULL) rt_thread_startup(tid1); /* 初始化线程 2,名称是 thread2,入口是 thread2_entry */ rt_thread_init(&thread2, //有取地址符 "thread2", thread2_entry, RT_NULL, &thread2_stack[0], sizeof(thread2_stack), THREAD_PRIORITY - 1, THREAD_TIMESLICE); rt_thread_startup(&thread2); //有取地址符 return 0;}/* 导出到 msh 命令列表中 */MSH_CMD_EXPORT(thread_sample, thread sample);
转载地址:http://tmogn.baihongyu.com/