热搜关键词: MATLAB天线OpenCVVHDL

pdf

FreeRTOS 内核实现与应用开发实战—基于RT1052 (野火)

  • 1星
  • 2022-07-01
  • 7.57MB
  • 需要1积分
  • 3次下载
  • favicon收藏
  • rep举报
  • free评论
标签: FreeRTOS

FreeRTOS

FreeRTOS  内核实现与应用开发实战—基于RT1052  (野火)

[野火]FreeRTOS
内核实现与应用开发实战—
基于
i.MX RT
EmbedFire
野火电子
2021
01
21
[野火]FreeRTOS
内核实现与应用开发实战
Contents
关于本项目.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
关于野火
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
开源共享,共同进步
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
联系方式
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.1
1.2
1.3
1.4
1.5
2
2.1
2.2
2.3
3
3.1
3.2
前言
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
如½学习本书
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的参考资料
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的编写风格
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的配套硬件
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的技术论坛
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
2
2
3
3
4
4
4
8
9
10
11
11
12
12
12
13
13
14
15
16
17
17
17
TODO
和悬赏任务
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
为什么要学习
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
如½学习
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
选择什么
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FreeRTOS
版权
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FreeRTOS
收费问题
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1
3.2.2
3.2.3
3.3
3.3.1
3.3.2
3.3.3
3.4
3.4.1
FreeRTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OpenRTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SaveRTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
获取源码
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
获取书籍
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
快速入门
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
数据类型
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
引言
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
初识
FreeRTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
FreeRTOS
资料获取
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FreeRTOS
的编程风格
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
论坛:https://www.firebbs.cn
天猫:https://yehuosm.tmall.com
[野火]FreeRTOS
内核实现与应用开发实战
3.4.2
3.4.3
3.4.4
3.4.5
4
5
5.1
5.2
变量名
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
½数名
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
格式
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
21
21
22
第一部分:从
0
1
教½写
FreeRTOS
内核.
. . . . . . . . . . . . . . . . . . . . . . . . . 23
新建
FreeRTOS
工程—½件仿真
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
新建本地工程文件夹
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
½用
KEIL
新建工程
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1
5.2.2
5.2.3
New Progect
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Select Device For Target
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Manage Run-Time Environment
. . . . . . . . . . . . . . . . . . . . . . . . .
24
26
26
26
29
31
32
33
34
34
35
36
39
39
40
43
47
48
51
51
52
52
56
5.3
5.4
5.5
KEIL
工程里面新建文件组
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
KEIL
工程里面添加文件
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1
5.5.1
5.5.2
5.5.3
编写
main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
设½½件仿真
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
修改时钟大小
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
添加头文件路径
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
调试配½
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6.1
裸机系统与多任务系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
裸机系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1
6.1.2
½询系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
前后台系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2
7
7.1
多任务系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C
语言链表简介
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.1
7.1.2
7.1.3
单向链表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
双向链表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
链表与数组的对比
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
实现链表节点
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
实现链表根节点
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
数据结构—列表与列表项讲解.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.2
FreeRTOS
中链表的实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1
7.2.2
论坛:https://www.firebbs.cn
ii
天猫:https://yehuosm.tmall.com
[野火]FreeRTOS
内核实现与应用开发实战
7.3
8
8.1
8.2
8.3
链表节点插入实验实验
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
71
72
74
75
75
77
78
80
89
89
92
94
96
97
任务的定义与任务切换的实现.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
本章目标
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
什么是任务
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
创建任务
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.1
8.3.2
8.3.3
8.3.4
定义任务栈
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定义任务½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定义任务控制块
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
实现任务创建½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定义就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
就绪列表初始化
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
将任务插入到就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
启动调度器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4
实现就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.1
8.4.2
8.4.3
8.5
实现调度器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5.1
8.5.2
任务切换
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.6
8.7
8.8
9
9.1
9.2
9.3
main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
本章涉及的汇编指令讲解
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
临界段的保护
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
什么是临界段
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Cortex-M
内核快速关中断指令
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
关中断
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.3.1
9.3.2
不带返回值的关中断½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
带返回值的关中断½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.4
9.5
开中断
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
进入/退出临界段的宏
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
9.5.1
9.5.2
进入临界段
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
退出临界段
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
9.6
临界段代码的应用
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
论坛:https://www.firebbs.cn
iii
天猫:https://yehuosm.tmall.com
[野火]FreeRTOS
内核实现与应用开发实战
9.7
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10
章 空闲任务与阻塞延时的实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.1
实现空闲任务
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.1.1
定义空闲任务的栈
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.1.2
定义空闲任务的任务控制块
. . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.1.3
创建空闲任务
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.2
实现阻塞延时
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
10.2.1
vTaskDelay()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
10.2.2
修改
vTaskSwitchContext()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . 141
10.3 SysTick
中断服务½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
10.3.1
xTaskIncrementTick()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
10.4 SysTick
初始化½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
10.5 main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.6
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
11
章 支持多优先级
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
11.1
如½支持多优先级
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
11.2
讲解查找最高优先级的就绪任务相关代码
. . . . . . . . . . . . . . . . . . . . . . . 158
11.2.1
通用方法
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
11.2.2
优化方法
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
11.3
修改代码,支持多优先级
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
11.3.1
修改任务控制块
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
11.3.2
修改
xTaskCreateStatic()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . 165
11.3.3
修改
vTaskStartScheduler()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . 171
11.3.4
修改
vTaskDelay()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
11.3.5
修改
vTaskSwitchContext()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . 174
11.3.6
修改
xTaskIncrementTick()
½数
. . . . . . . . . . . . . . . . . . . . . . . . . 176
11.4 main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
11.5
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
12
章 任务延时列表的实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
12.1
任务延时列表的工½原理
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
12.2
实现任务延时列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
论坛:https://www.firebbs.cn
iv
天猫:https://yehuosm.tmall.com
展开预览

推荐帖子 最新更新时间:2022-08-04 18:39

有源晶振输出串联电阻的作用讲解
一般大公司硬件电路都有最小化设计,是长期经验总结出来的,为的是减少重复性劳动和确保产品质量。大家画图基本上直接抄模块电路,审查的人也按照标准电路检查,这样就不用每次都考虑如何设计。你说的晶振输出串电阻就来自于最小化设计,对于数字电路里最重要的时钟源部分,应该特别注意保证信号完整性,最小化设计中晶振外围电路除了电阻还要有一些其他器件。 串电阻是为了减小反射波,避免反射波叠加引起过冲。有时,
fish001 模拟与混合信号
LPC1768与LPC54102数据处理速度对比讨论
1、目的:对比1768和54102在100MHz时数据处理的速度 2、数据:                posdata_sum = 0x0;                 for(i=6;i>0;i--)                 {                                posdata_sum += posdata_tmp;          
liuyuedeyu NXP MCU
晒WEBENCH设计的过程+画一个LDC线圈真
LDC1000 是世界上第一个电感数字转换器,可以在无磁的条件下实现线性/角位置、位移、运动、压缩、振动、金属成分测量,可以使用一个非常小的PCB线圈做为感测元件, 问题是如果使用现有的PCB软件画一个线圈可能要花很长时间,WEBENCH集成了线圈的设计功能,只需简单几步就能设计出一个完美的元件并导入到现有PCB工程。 打开WEBENCH设计页面 找到“感应传感器设计器”点击进入。 选择合
littleshrimp 模拟与混合信号
定时器中央对齐模式时怎么在中点进中断或者操作
定时器比如说TIM1,设置成中央对齐模式,从0,1,2,3,4,5,4,3,2,1……怎么样可以在4或者5的时候,进入中断,或者直接开启ADC的dma中断,或者可以写代码,都可以。参考手册上写了一个计数器溢出,和更新事件(UEV),有法进行操作吗?或者给个思路,或者往哪个方面研究都可以,谢谢!比如说第二张图的中点附近进入中断,或者是可以操作都可以。两个定时器同步的话,也可以考虑,但是尝试了一下,总
daolong1989 stm32/stm8
更换内存容量和挂载bank需要修改的地方
本帖最后由 Wince.Android 于 2015-5-15 16:49 编辑           很久没有写一篇比较完整的技术文章,今天刚好遇到一个问题,解决了感触比较大:这个问题明明是我以前遇到过的,但是我却记不得,我还一筹莫展,没意识到问题所在,只怪我当时没有写当时的解决办法,一年后在写出来亡羊补牢也不迟。          问题是这样的:我们自己做的电路板,在wince 下没有任何
Wince.Android 嵌入式系统
瑞萨程序经常出现的问题
编译时总是出错,不知道这个数组出现了什么问题,请大家帮忙。 inv_mpu_dmp_motion_drivera.c(391) : CC78K0R error E0737: Undeclared structure/union/enum tag inv_mpu_dmp_motion_drivera.c(392) : CC78K0R error E0301: Syntax error
chonglanger 瑞萨电子MCU

评论

登录/注册

意见反馈

求资源

回顶部
查找数据手册?

EEWorld Datasheet 技术支持

热门活动

相关视频

可能感兴趣器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
×