[toc]
前言
主要是freertos。为啥突然要写这玩意的笔记?因为工作需要,所以在空闲时间抽时间写下,这个系列可能随时断更,因为作者在学和在做的主要还是网络协议栈。
特别提示:有条件的同学们建议使用keil来在线仿真freertos,方便学习,可以直观地看到CPU寄存器组信息、实时栈信息、各个任务详细信息、各个任务占用CPU的时间轴图表等等。作者因为想在公司空闲时间和在家里空闲时间都能写下这些笔记,所以就不用keil了,因为版权原因。
资源
- 用于FreeRTOS的Posix/Linux模拟器演示
- freertos学习官网
- 李柱明博客:https://www.cnblogs.com/lizhuming/p/16062433.html
说明
本系列是在 posix/linux 模拟器上跑freertos;所以本次freertos实现的接口层是使用posix标准实现。本节环境搭建对新手不太友好,偏向理论化,但是遇到的问题都比较简单,所以搭建环境不做细致教程。后面代码分析可以比较细化。
注意:
- 不要与freertos+posix library混淆,因为两者是相反的。
- freertos+posix library 是freertos本地的一个接口库,是为了让posix标准的原因程序在freertos上跑。
- 而 posix/linux 接口是为了让freertos在posix操作系统上跑。
大概思路
编译一个可跑的出现主要需要以下文件:
- 内核:freertos kernel相关文件;
- 接口:portable;
- 用户文件:main.c、freertos_config.h文件;
- 编译脚本:在linux使用GCC。
提示:
- 其实上述资料都可以在freertos官网上,下载源码,在源码中找出。
- 其中接口文件只需要找到对应编译器下的即可。
- makefile可以自己写。
实战
1. 获取源码
去官网或者github下。
注意:如果去官网下,可能找不到
githubusercontent.com
相关的服务器;那可以在ipaddress.com查找,然后ping一下,能ping通就把这个IP和对应的域名写到本地设备的hosts文件中固定下来。
2. 组建自己的工程
先创建两个文件夹:
- kernel:
- 参考命令:
mkdir kernel
- 存放freertos内核相关文件,包括内核源码、接口文件等。
- user:
- 参考命令:
mkdir user
- 存放用户文件。
创建好文件夹后,拉取相关文件:
- kernel:
- 把内核的头文件全部拉取:FreeRTOS/Source/include
- 把内核中源文件全部拉取(这部分可以按需拉取):FreeRTOS/Source/*.c
- 拉取对应接口文件和内存管理文件到kernel/portable下:GCC的Posix标准接口:FreeRTOS/Source/portable/ThirdParty/GCC/Posix/
- FreeRTOS/Source/portable/MemMang/
- user:
- 创建main.c;(记得写上基本内容、可参考freertos提供的demo中的main.c)
- 拷贝
FreeRTOS/Demo/POSIX_GCC
下的FreeRTOSConfig.h
准备好相关文件后,准备编译脚本。编译脚本的实现有很多种,按自己习惯实现。在编译过程中遇到问题,按提示解决即可。
最终工程大致布局如下:
3. 编译&运行
编译成功
运行: