0. FreeRTOS系列笔记_简介

0. 前言

按照有无操作系统来划分,嵌入式软件的开发方式可以分为如下两种:

  • 基于裸机开发
  • 基于操作系统开发

在单片机领域,常用的操作系统有 FreeRTOS、RT-Thread、μC/OS-II 等,而性能更加强悍的 SOC 上,更青睐于强大的 Linux 或 Android 。

近年来,随着物联网技术的飞速发展,越来越多的智能设备开始用上了实时操作系统(Real Time Operating System,简称RTOS),其中 FreeRTOS 是最为流行的一种,例如乐鑫的 ESP32,基于 ESP-IDF 框架开发时,用的就是 FreeRTOS ,所以我觉得,掌握至少一种 RTOS,是如今从事嵌入式软件开发的必备技能。


1. FreeRTOS 发展历史

2003年,美国的 Richard Barry 发布了首个 FreeRTOS 版本,2018年的时候, 亚马逊收购了 FreeRTOS ,并将其开源协议由原来的 GPLv2 修改成了 MIT,版本号也升级到了 V10,在我写这篇文章的时候,FreeRTOS 的最新版本为 V10.4.6,后续的所以内容,都是基于 V10 版本的 FreeRTOS 。


2. FreeRTOS 版权问题

亚马逊收购 FreeRTOS 后,将其开源协议修改成了 MIT,MIT开源协议的自由度极高,商用免费,修改 FreeRTOS 源码后可以闭源,相比于其他一些商用收费的RTOS,FreeRTOS 可以说是相当良心了,这应该也是 FreeRTOS 那么受欢迎的原因之一吧!

关于开源许可,可以查看下面这张图,解释得非常清楚:

在这里插入图片描述

图片来源:https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html


3. FreeRTOS 版本介绍

FreeRTOS 除了免费开源的版本外,还有两个由 FreeRTOS 内核衍生出来的收费的商业版本:OpenRTOS 和 SafeRTOS 。

3.1 OpenRTOS

OpenRTOS 和 FreeRTOS 代码是一样的,只不过 OpenRTOS 是收费的商业版本,提供专业的技术支持,提供法律保护,两者的主要差别如下所示:

在这里插入图片描述

图片来源:https://www.freertos.org/a00114.html

上图中的 FreeRTOS 采用的是 MIT 开源许可,有些比较老的教程里,讲解的还是 V9 或者是更前版本的 FreeRTOS,采用的还是 GPL 开源许可,上述表格中的一些内容可能存在差异,这个是由于采用了不同的开源许可导致的,这个需要特别注意一下。

3.2 SafeRTOS

SafeRTOS 也是源于 FreeRTOS ,只不过 SafeRTOS 针对不同的领域安全标准,做了不同的安全认证,例如工业领域的 IEC 61508 SIL 3、医疗行业的 IEC 62304 and FDA 510(K)、汽车电子的 ISO 26262 等。


4. FreeRTOS 资料获取

4.1 获取源码

官方网站源码下载:https://www.freertos.org/a00104.html

在这里插入图片描述

官网下载的是最新版本,如果你想下载其他版本的源码,可以到 GitHub 下载。

GitHub 下载地址:https://github.com/FreeRTOS/FreeRTOS/tags

在这里插入图片描述

4.2 获取官方说明手册

点击 FreeRTOS 官网 SUPPORT 选项中的 Books and Manuals ,即可进入官方文档下载页面。

在这里插入图片描述

在官方文档下载页面,我们可以看到有三个下载选项,分别是:

  • Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide

  • FreeRTOS V10.0.0 Reference Manual

  • Book companion source code

官方文档下载地址:https://www.freertos.org/Documentation/RTOS_book.html

在这里插入图片描述

Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide

这份文档可以说是 FreeRTOS 内核入门到精通的宝典了,里面详细讲解了 FreeRTOS 源码方方面面的内容,例如源码的目录结构,项目的创建和编译、堆栈管理、任务管理、队列管理、中断管理等内容,可以说啃完这个文档, FreeRTOS 就学得七七八八了,建议大家重点阅读这个手册。

FreeRTOS V10.0.0 Reference Manual

这是 V10 版本 FreeRTOS 源码的 API 参考手册,配套 V10 版本的 FreeRTOS 源码使用,API参考手册和源码版本要一致,这个大家要注意。这个文档主要用于开发过程中查询 API 的使用方法,平时一般不用看,遇到不懂 API 时打开查询即可。

Book companion source code

这是官方例程源码包,截至我写这篇文章时,源码包里用的还是 V9 版本的 FreeRTOS 源码,其实 V10 版本和 V9 版本的内核基本是一样的,只是 2018 年亚马逊收购了 FreeRTOS 后,将版本更新到了 V10,添加了一些物联网相关的功能组件罢了。

<think>好的,用户正在寻找关于RT1061芯片的FreeRTOS、LwIP和HTTP服务器实现的教程或示例代码。首先,我需要确认RT1061的厂商和相关资源。RT1061是NXP的i.MX RT系列微控制器,属于高性能跨界MCU。接下来,我应该考虑NXP官方是否有相关的SDK支持,因为通常厂商会提供丰富的例程。 查阅NXP官网,确实有MCUXpresso SDK,里面包含针对RT1060/RT1064系列的示例代码,虽然用户需要的是RT1061,但同一系列可能有相似的配置,可以作为参考。特别是SDK中的lwip_httpsrv示例,这可能符合用户需求。此外,FreeRTOS和LwIP的集成在SDK中应该已经有支持,用户可能需要调整配置以适应RT1061的具体硬件。 然后,用户可能需要移植现有的示例到RT1061。这里需要检查硬件差异,比如时钟配置、引脚分配、内存配置等。参考NXP的应用笔记AN12212,这个文档可能提供移植LwIP和FreeRTOS的指导。同时,用户提到的HTTP服务器部分,可以推荐使用lwIP的httpd模块或者第三方库如mongoose,需要确保这些库与FreeRTOS兼容。 另外,社区资源也很重要。GitHub、GitCode等平台可能有开源项目,比如用户之前提到的STM32H7项目,虽然平台不同,但架构和配置思路可以借鉴。例如,配置LwIP的内存池、优化线程优先级,以及处理TCP连接时的任务调度。 用户可能遇到的问题包括LwIP的配置参数调整,例如内存不足导致HTTP服务器不稳定,或者任务优先级设置不当导致网络延迟。需要指导用户如何调整MEM_SIZE、PBUF_POOL_SIZE等参数,并建议使用FreeRTOS的调试工具如任务状态查看来优化性能。 最后,建议用户参考NXP的官方论坛和社区,获取最新的支持和技术解答,确保在移植过程中遇到的具体问题能够得到及时解决。可能还需要提醒用户注意硬件特定的外设配置,如以太网控制器的初始化,以及PHY芯片的驱动适配,这些都可能影响LwIP的正常运行。</think>根据您对RT1061芯片结合FreeRTOS、LwIP和HTTP服务器的需求,以下是分步骤实现方案: ### 一、基础环境搭建 1. **获取官方SDK** 访问[NXP MCUXpresso SDK下载页面](https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools/mcuxpresso-software-development-kit-sdk:MCUXpresso-SDK),选择`i.MX RT1060/1064`系列SDK(RT1061兼容该系列)。SDK中包含: - LwIP协议栈与FreeRTOS集成示例 - 以太网驱动(ENET模块) - HTTP服务器基础框架 2. **硬件配置验证** 检查开发板原理图,确认以下配置: ```c /* 时钟配置参考值(需根据实际晶振调整) */ enet_clock_source = kCLOCK_Osc24M; // 外部24MHz晶振 enet_clock_freq = CLOCK_GetFreq(kCLOCK_IpgClk); ``` ### 二、LwIP与FreeRTOS集成 1. **任务优先级设置** 在`FreeRTOSConfig.h`中优化任务调度: ```c #define configLWIP_TCPIP_TASK_PRIORITY (tskIDLE_PRIORITY + 3) // 高于默认任务 #define configLWIP_NETIF_TASK_PRIORITY (tskIDLE_PRIORITY + 2) ``` 2. **内存池配置** 调整`lwipopts.h`参数以适应HTTP服务: ```c #define MEM_SIZE (12 * 1024) // 内存池扩展 #define PBUF_POOL_SIZE (32) // 增加数据包缓冲 #define TCP_SND_BUF (4 * TCP_MSS) // 增大TCP发送窗口 ``` ### 三、HTTP服务器实现 1. **使用lwIP原生httpd模块** 在SDK中找到`lwip_httpsrv`示例,核心初始化流程: ```c void http_server_init(void) { struct http_state *state = mem_calloc(1, sizeof(struct http_state)); httpd_init(); // 初始化HTTP守护进程 sys_thread_new("http_task", http_server_thread, state, DEFAULT_THREAD_STACKSIZE, HTTP_TASK_PRIORITY); } ``` 2. **添加动态页面处理** 创建自定义HTTP请求回调: ```c err_t http_conn_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) { if (p != NULL) { if (strstr(p->payload, "GET /api/data")) { // 处理RESTful请求 char response[] = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{\"status\":\"ok\"}"; tcp_write(pcb, response, sizeof(response), TCP_WRITE_FLAG_COPY); } pbuf_free(p); } return ERR_OK; } ``` ### 四、关键调试技巧 1. **网络状态监控** 使用`ping`命令验证基础连接: ```shell ping 192.168.1.100 # 替换为开发板实际IP ``` 2. **LwIP统计信息查看** 在串口终端输出运行状态: ```c stats_display(); // 调用lwIP内置统计函数 ``` ### 五、参考资源 1. NXP应用笔记[AN12212: LwIP应用开发指南](https://www.nxp.com/docs/en/application-note/AN12212.pdf) [^1] 2. GitHub上的[RT1064 LwIP示例](https://github.com/NXPmicro/mcux-sdk-examples/tree/main/rt1064)(适配RT1061需调整引脚配置)[^2] 3. 《Mastering the FreeRTOS Real Time Kernel》手册中的网络任务同步章节[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值