RTOS基础(TODO)
(TODO)
读完FreeRTOS内核源码,需要多久?
有哪些情况下是RTOS满足不了需求,必须得上嵌入式Linux系统的?
============================
如何用树莓派 Pico 学习 RTOS?
树莓派 Pico 使用 RP2040 微控制器,基于 ARM Cortex-M0+ 内核,支持各种 RTOS(实时操作系统)。如果你想学习 RTOS,Pico 是一个很好的平台,以下是系统学习路径:
1. 选择合适的 RTOS
常见的 RTOS 选项:
- FreeRTOS(最流行,学习资料多)
- RT-Thread(国产 RTOS,适合 IoT)
- Zephyr(适用于物联网和工业)
- ChibiOS(轻量级,适合小型 MCU)
推荐:FreeRTOS 最适合作为入门 RTOS,官方支持好,教程多,使用广泛。
2. 准备开发环境
硬件
- Raspberry Pi Pico
- Micro-USB 线
- LED、按钮、传感器(扩展实验)
软件
- CMake + Ninja + ARM GCC(官方推荐)
- VS Code + Pico SDK(推荐)
- 或者 Keil / IAR(传统嵌入式开发工具)
3. 安装 FreeRTOS 并配置开发环境
(1) 下载 FreeRTOS
git clone https://github.com/FreeRTOS/FreeRTOS-Kernel.git
或者使用官方仓库:
git clone --recurse-submodules https://github.com/FreeRTOS/FreeRTOS.git
(2) 安装 Raspberry Pi Pico SDK
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
export PICO_SDK_PATH=$PWD
(3) 配置 FreeRTOS 任务调度器
在 FreeRTOSConfig.h 中修改:
#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configCPU_CLOCK_HZ (125000000) // RP2040 125MHz
#define configTICK_RATE_HZ (1000)
#define configMAX_PRIORITIES (5)
#define configMINIMAL_STACK_SIZE (configSTACK_DEPTH_TYPE)128
#define configTOTAL_HEAP_SIZE ((size_t)(16 * 1024))
4. 编写一个 FreeRTOS 任务
创建 main.c,写入以下代码:
#include <FreeRTOS.h>
#include <task.h>
#include <stdio.h>
#include "pico/stdlib.h"void Task1(void *pvParameters) {while (1) {printf("Task 1 running...\n");vTaskDelay(pdMS_TO_TICKS(1000));}
}void Task2(void *pvParameters) {while (1) {printf("Task 2 running...\n");vTaskDelay(pdMS_TO_TICKS(500));}
}int main() {stdio_init_all();xTaskCreate(Task1, "Task 1", 256, NULL, 1, NULL);xTaskCreate(Task2, "Task 2", 256, NULL, 1, NULL);vTaskStartScheduler();while (1);
}
说明
- Task1 每 1000ms 运行一次
- Task2 每 500ms 运行一次
- vTaskStartScheduler() 启动任务调度器
5. 编译 & 运行
(1) 编译代码
mkdir build
cd build
cmake ..
make -j4
(2) 烧录到 Pico
- 进入 BOOTSEL 模式(按住
BOOTSEL按钮,插入 USB) - 拷贝生成的
.uf2文件到 Pico
(3) 观察输出
使用 minicom 或 screen 读取串口输出:
screen /dev/ttyUSB0 115200
6. 进阶学习
✅ 任务同步 & 互斥
- 队列(Queue): 任务间通信
- 信号量(Semaphore):资源管理
- 互斥量(Mutex):防止数据竞争
✅ 中断处理
- 使用 ISR-safe API,如
xQueueSendFromISR()
✅ 低功耗管理
- Tickless Idle 模式降低功耗
✅ 移植 & 设备驱动
- 在 FreeRTOS 上移植 I2C/SPI/UART 设备驱动
✅ 联网 & 远程控制
- 结合 LWIP(轻量级 TCP/IP) 使 Pico 具备联网功能
7. 推荐学习资源
📚 书籍
- 《Mastering FreeRTOS》
- 《嵌入式实时操作系统开发》
- 《实时操作系统(RTOS)基础》
🎥 视频
- YouTube - FreeRTOS for Beginners
📂 官方文档
- FreeRTOS 官方文档
- Pico SDK 文档
总结
🔹 用 Raspberry Pi Pico 学习 FreeRTOS 是个很好的选择! 🔹 从简单的任务调度开始,再深入学习任务间通信、中断管理、功耗优化 🔹 Pico 的双核支持,适合研究 FreeRTOS SMP(多核调度)
你对哪个方面最感兴趣?我可以帮你定制更详细的学习计划!🚀
相关文章:
RTOS基础(TODO)
(TODO) 读完FreeRTOS内核源码,需要多久? 有哪些情况下是RTOS满足不了需求,必须得上嵌入式Linux系统的? 如何用树莓派 Pico 学习 RTOS? 树莓派 Pico 使用 RP2040 微控制器,基于 AR…...
八、Spring Boot 日志详解
目录 一、日志的用途 二、日志使用 2.1 打印日志 2.1.1 在程序中获取日志对象 2.1.2 使用日志对象打印日志 2.2、日志框架介绍 2.2.1 门面模式(外观模式) 2.2.2 门面模式的实现 2.2.3 SLF4J 框架介绍 2.3 日志格式的说明 2.4 日志级别 2.4.1 日志级别的分类 2.4.2…...
Java实战经验分享
1. 项目优化与性能提升 面试问题: 聊聊你印象最深刻的项目,或者做了哪些优化 你在项目中如何解决缓存穿透问题? 缓存穿透是我们做缓存优化时最常遇到的问题,特别是当查询的对象在数据库中不存在时,缓存层和数据库都会…...
前端控制器模式
前端控制器模式 概述 前端控制器模式(Front Controller Pattern)是一种设计模式,它将应用程序中的所有用户请求统一交由一个控制器处理。这种模式在MVC(Model-View-Controller)架构中尤为常见,它能够简化…...
Linux之安装docker
一、检查版本和内核是否合格 Docker支持64位版本的CentOS 7和CentOS 8及更高版本,它要求Linux内核版本不低于3.10。 检查版本 cat /etc/redhat-release检查内核 uname -r二、Docker的安装 1、自动安装 Docker官方和国内daocloud都提供了一键安装的脚本&#x…...
BUUCTF_XSS-Lab
xss XSS(Cross - Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本(通常是 JavaScript),当其他用户访问该网站时,这些恶意脚本会在用户的浏览器中执…...
springBoot使用
1.什么是SpringBoot SpringBoot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。SpringBoot是伴随Spring4.0的时候发布的一个框架。SpringBoot用来简化Spring应用的开发,约定大于配置,去繁从简。 从本质上来说ÿ…...
DS图(中)(19)
文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下,我们来学习下图的中篇!!! 一、图的遍历 图的遍历指的是遍历图中的顶点,主要有 广度优先遍历 …...
Vue Dom截图插件,截图转Base64 html2canvas
安装插件 npm install html2canvas --save插件使用 <template><div style"padding: 10px;"><div ref"imageTofile" class"box">发生什么事了</div><button click"toImage" style"margin: 10px;&quo…...
Unity3D仿星露谷物语开发小结1
1、Cinemachine的作用及使用方法 (1)作用 控制Camera的模块,实现摄像机的复杂控制,比如角色的跟随,限制Camera的区域 (2)使用方法 在已有Main Camera的情况下, 通过【GameObject -&…...
graylog初体验
最近graylog比较火,部署了一个来测试下,看下后续能不能代替目前占用资源比较多的elk,目前未对graylog性能进行深入测试,只是简单体验了下,graylog的UI比较简陋,但是在报警以及权限方面优于ELK,整…...
15.PPT:文静-云计算行业发展【29】
目录 NO123 NO345 NO6 NO78 NO9/10/11/12 NO123 设计→幻灯片大小→自定义幻灯片大小→ 全屏显示(16:9)→最大化 NO345 SmartArt 主题颜色2/6/9:形状样式:样式 加大行距加宽间距 NO6 NO78 设计→设置背景…...
高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案
目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…...
MFC 的 CListCtrl 控件,使用SetItemState 方法来设置选中某个 item,如何达到效果和鼠标点击一致
1)查询到的方法如下: // 假设你要选中第 2 行(索引从 0 开始) int nItem 1; // 取消所有其他选中项 m_ListCtrl.SetItemState(-1, 0, LVIS_SELECTED); // 设置选中状态,并确保它具有焦点 m_ListCtrl.SetItemStat…...
一文读懂:TCP网络拥塞的应对策略与方案
TCP(传输控制协议)是互联网中广泛使用的可靠传输协议,它通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制确保数据的可靠传输。然而,在网络环境中,由于多个主机共享网络资源,网络拥塞成为了一个…...
深度整理总结MySQL——子查询的工作原理
子查询的工作原理 前言为什么开发人员喜欢写子查询查询重写条件化简移除不必要的括号常量传递(constant_propagation)移除没用的条件(trivial_condition_removal)HAVING子句和WHERE子句的合并 常量表检测外连接消除 子查询子查询语…...
20240824 美团 笔试
文章目录 1、单选题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、编程题2.12.2岗位:硬件开发工程师(嵌入式系统软件开发方向) 题型:20 道单选题,2 道编程题题 1、单选题 1.1 C 语言中,如果输入整数 v 是 2 的幂,下面表达式中哪个会返…...
Windows图形界面(GUI)-QT-C/C++ - QT 文本编辑控件详解
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 概述 1. QLineEdit 1.1 特点 1.2 属性 1.3 常用方法 1.4 拓展应用 2. QTextEdit 2.1 特点 2.2 属性 2.3 常用方法 2.4 拓展应用 3. QPlainTextEdit 3.1 特点 3.2 属性 3.3…...
IDEA中Resolving Maven dependencies卡着不动解决方案
一、修改settings.xml Maven配置阿里云仓库主要通过修改Maven的settings.xml文件来实现。以下是具体步骤: 1、找到settings.xml文件: 通常位于Maven安装目录下的conf文件夹中,或者在用户目录下的.m2文件夹中(如果用户自定义了settings.xml的位置)。 2、编辑se…...
go数据结构学习笔记
本博文较为完整的实现了go的链表、栈,队列,树,排序,链表包括顺序链表,双向链表,循环链表,队列是循环队列,排序包含冒牌、选择 1.链表 1.1 顺序链表 type LNode struct {data intn…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
