文章目录
- 前言
- 操作系统分类
- 编程风格纠正
- FreeRTOS介绍
- 任务调度方式
- 任务状态
- 总结
前言
最近买了把75系列的机械键盘,没有数字区域,想起来稚辉君曾经做过一把客制化键盘,于是下载了资料准备学一学,网上很多开源的都是用的ATMEGA32U4制作的,稚辉君用stm32f103cbtx就做出来了,让我很佩服,打开资料后发现软件部分涉及到了操作系统,于是打算学一下FreeRTOS。
大部分还是参考正点原子的教程,本篇只是一些基本概念,无具体代码内容学习
操作系统分类
实时操作系统:能及时的响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对事件的处理。(按系统完成任务的时间的严格程序分为强实时与弱实时)
分时操作系统:按时间片轮转完成各个任务,任务没有优先级,这种系统就称为分时操作系统。(感觉像平时的while循环里面放一堆,裸机开发)
编程风格纠正
-
变量定义
一般前面加上该变量的类型,如:char cTemp;
char:c,short:s,long:l,无符号类型加u,指针加p,结构体或者任务句柄加x。 -
函数名
函数名包含了函数返回值的类型、函数所在的文件名以及函数的功能,如果是私有的函数,还会加prv前缀。
举例:
xTaskCreate()函数的返回值为任务句柄,在Task.c中定义,作用是创建任务;
vTaskPrioritySet()函数的返回值为void,在Task.c中定义,作用是设置优先级; -
宏
在FreeRTOS中,宏用大写字母表示,并配有小写字母前缀,指示该宏在哪个头文件定义。
举例
portMAXDELAY,位于portable.h;
贯穿FreeRTOS的整个代码表示0与1的宏如下:
pdTRUE 1
pdFALSE 0
pdPASS 1
pdFAIL 0
FreeRTOS介绍
全称:免费的实时操作系统(Real-time operating system for microcontrollers)
内核4k-9k之间,大部分器件都放的下,可裁剪,轻量级,易移植
裸机开发需要精心设计程序流执行,多任务系统反而简单了,这种逻辑设计被简化了
内部任务也有各自的优先级,通过不停调度实现分时执行各个任务,中断可以打断任意任务。
任务的数值越大优先级越高,与中断相反,且实现优先级的方法有硬件和软件
任务数量没有限制,但是因为要分配器件的内存给任务堆栈保存数据用,所以还是有硬件限制
任务调度方式
抢占式调度:整个过程就是在高优先级任务抢占,阻塞挂起等操作,任务在就绪和运行之间切换
时间片轮换:设置同优先级的任务享有同等的CPU时间,即时间片,一个时间片即SysTick中断周期
没有用完的时间片不再使用了,如Task3遇到阻塞的话,剩下的时间片就丢了。
还有一种叫协程式调度(轮询,变回裸机开发了),不常用吧。
任务状态
不同状态之间的转换:
任务的列表:当某个位置为1时,代表所对应的优先级就绪列表有任务存在
系统运行会从上往下找,上面的优先级高,寻找就绪态的任务
总结
先简单了解一下RTOS的基本情况,后面关于移植有直接手动移植的,还有利用HAL库生成的,我偏向第二种,简单学习了一下发现内容还很多,之后详细总结一篇。