目录
一、简介
二、堆的概念
三、栈的概念
四、从官方源码中精简出第一个FreeRTOS程序
五、修改官方源码增加串口打印
一、简介
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。
作为双系统RTOS并且免费开源可裁剪,所以市场占有率很高。常见的双系统RTOS还有RT-Thread纯国产且免费开源。
二、堆的概念
堆就是一块空闲的内存,内核来管理他,我们用的时候申请不用就释放它。
char __buf[1024];
int pos = 0;
void *my_malloc(int size)
{
int old_pos = pos;
pos += size;
return &__buf[old_pos];
}
void my_free(void *buf)
{
/* err */
}
int main ()
{
//char ch = 65;
int i;
char *buf = my_malloc(100);
//unsigned char uch = 200;
for(i = 0; i < 26 ; i++ )
buf[i] = 'A' + i;
return 0;
}
模拟一个申请堆的过程
SystemInit显示这个没定义是因为没加入一个文件,不要把启动文件注释掉
![]()
debug报错,因为没有硬件所以选择使用模拟器
打两个断点。
三、栈的概念
栈是RTOS的核心
栈有保护现场的作用,在前面学ARM架构的时候已经和细致的用程序介绍了。操作系统其实都是基于栈的,每个任务都有自己的栈,任务是操作系统的基本单位。栈中会保存LR寄存器和局部变量的值。
四、从官方源码中精简出第一个FreeRTOS程序
我用的韦东山老师的git库里的源码,也可以从官网下载
🛠Git简明教程 — 百问网资料下载中心 3.0 文档
这有windows上的gitbash的教程会这点就够了
还有一个tools文件是和亚马逊有关的文件我们不需要也把他删掉
还有剩下的和M3架构MKD5无关的也都可以删掉,精简后不超过10MB具体精简过程可以去B站
五、修改官方源码增加串口打印
我们学习使用的是Keil仿真所以需要增加串口打印,并把LCD显示、定时器、flash等功能删除
右下角就是仿真的串口
我们创建两个打印任务。分成两个串口看着像是同时再进行。其实我们知道他是交替进行的。
,让这两个任务使用一个串口就能看出来他是交替进行的。