博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RT-Thread 学习笔记:一、通俗易懂学会创建线程
阅读量:3934 次
发布时间:2019-05-23

本文共 2118 字,大约阅读时间需要 7 分钟。

任务:

  1. 在多线程操作系统中,需要开发人员把一个复杂的应用分解成多个小的、可调度的、序列化的程序单元。
  2. 线程中不能陷入死循环操作,必须要有让出 CPU 使用权的动作,如循环中调用延时函数或者主动挂起。
  3. 在空闲线程运行时可以调用钩子函数,合适钩入功耗管理、看门狗喂狗等工作。

优先级:

  1. 重要的任务可设置相对较高的优先级,非重要的任务可以设置较低的优先级,不用的任务还可以设置相同的优先级,轮流运行。
  2. RT-Thread 最大支持 256 个线程优先级,数值越小的优先级越高,0 为最高优先级。

调度:

  1. 当一个运行着的线程使一个比它优先级高的线程满足运行条件,当前线程的 CPU 使用权被让出,高优先级的线程立刻得到了 CPU 的使用权。
  2. 如果是中断服务程序使一个高优先级的线程满足运行条件,中断完成时,被中断的线程挂起,优先级高的线程开始运行。
  3. 当调度器调度线程切换时,先将当前线程上下文保存起来,当再切回到这个线程时,线程调度器将该线程的上下文信息恢复。

创建动态线程

/* 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);

——END——
在这里插入图片描述

欢迎扫描上方二维码,获取更多编程技巧

转载地址:http://tmogn.baihongyu.com/

你可能感兴趣的文章
linux文件与目录管理问题与回答(整理篇)
查看>>
java 数组笔记整理
查看>>
java IO/NIO 下载上传的笔记
查看>>
对行为的描述---一般系统论读书笔记
查看>>
贪心算法
查看>>
分支限界法
查看>>
随机化算法
查看>>
项目整体管理(一)
查看>>
项目整体管理(二)
查看>>
推荐阅读书籍
查看>>
外包管理
查看>>
项目管理师职业道德规范
查看>>
战略管理概述
查看>>
业务流程管理和重组
查看>>
知识管理
查看>>
项目整体绩效评估
查看>>
信息安全系统和安全体系
查看>>
信息系统安全风险识别与评估
查看>>
信息安全系统的组织管理
查看>>
项目时间管理脉络
查看>>