没有合适的资源?快使用搜索试试~ 我知道了~
首页RT-Thread.pdf
RT-Thread.pdf
需积分: 12 297 浏览量
更新于2023-05-25
评论
收藏 5.24MB PDF 举报
RT-Thread单片机微操作系统电子书教程,单片机初学者值得下载收藏! RT-Thread单片机微操作系统电子书教程,单片机初学者值得下载收藏!
资源详情
资源评论
资源推荐

RT-THREAD 编程指南
RT-THREAD 文档中心
上海睿赛德电子科技有限公司版权 @2019
WWW.RT-THREAD.ORG
Thursday 14
th
November, 2019

版本和修订
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