没有合适的资源?快使用搜索试试~ 我知道了~
首页rt thread自学笔记
基于rt-thread官网上的内核说明文档,自己做了详细的注释,希望对大家学习有所帮助。 RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。
资源详情
资源评论
资源推荐

RT-THREAD 编程指南
RT-THREAD 文档中心
上海睿赛德电子科技有限公司版权 @2019
WWW.RT-THREAD.ORG
Sunday 1
st
March, 2020

版本和修订
Date Version Author Note
2013-05-14 v1.0.0 bernard 初始版本
2018-12-29 v2.0.0 yangjie 内核内容修订
2018-12.29 v2.0.0 misonyo 组件及设备内容修订

目录
版本和修订 i
目录 ii
1 RT-Thread 简介 1
1.1 RT-Thread 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 许可协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 RT-Thread 的架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 内核基础 4
2.1 RT-Thread 内核介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1 线程调度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 时钟管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.3 线程间同步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.4 线程间通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.5 内存管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.6 I/O 设备管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 RT-Thread 启动流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 RT-Thread 程序内存分布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 RT-Thread 自动初始化机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 RT-Thread 内核对象模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5.1 静态对象和动态对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5.2 内核对象管理架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.3 对象控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.4 内核对象管理方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5.4.1 初始化对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5.4.2 脱离对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.5.4.3 分配对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.4.4 删除对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.4.5 辨别对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6 RT-Thread 内核配置示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7 常见宏定义说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3 线程管理 23
3.1 线程管理的功能特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 线程的工作机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.1 线程控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.2 线程重要属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2.1 线程栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2.2 线程状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.2.3 线程优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.2.4 时间片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.2.5 线程的入口函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.2.6 线程错误码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.3 线程状态切换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.4 系统线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.4.1 空闲线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.4.2 主线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3 线程的管理方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.1 创建和删除线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.2 初始化和脱离线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.3 启动线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.4 获得当前线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.5 使线程让出处理器资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.6 使线程睡眠 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.7 挂起和恢复线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.8 控制线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.9 设置和删除空闲钩子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.10 设置调度器钩子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4 线程应用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.4.1 创建线程示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4.2 线程时间片轮转调度示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.3 线程调度器钩子示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 时钟管理 44
4.1 时钟节拍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.1.1 时钟节拍的实现方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.1.2 获取时钟节拍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2 定时器管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.1 RT-Thread 定时器介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.1.1 HARD_TIMER 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.1.2 SOFT_TIMER 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2.2 定时器工作机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2.2.1 定时器控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2.2.2 定时器跳表 (Skip List) 算法 . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2.3 定时器的管理方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2.3.1 创建和删除定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2.3.2 初始化和脱离定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2.3.3 启动和停止定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2.3.4 控制定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3 定时器应用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.4 高精度延时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5 线程间同步 59
5.1 信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.1 信号量工作机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.2 信号量控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.3 信号量的管理方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.3.1 创建和删除信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.3.2 初始化和脱离信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.1.3.3 获取信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1.3.4 无等待获取信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1.3.5 释放信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1.4 信号量应用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
剩余560页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0