当前位置: 首页 > news >正文

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) 观察输出

使用 minicomscreen 读取串口输出:

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)

&#xff08;TODO&#xff09; 读完FreeRTOS内核源码&#xff0c;需要多久&#xff1f; 有哪些情况下是RTOS满足不了需求&#xff0c;必须得上嵌入式Linux系统的&#xff1f; 如何用树莓派 Pico 学习 RTOS&#xff1f; 树莓派 Pico 使用 RP2040 微控制器&#xff0c;基于 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. 项目优化与性能提升 面试问题&#xff1a; 聊聊你印象最深刻的项目&#xff0c;或者做了哪些优化 你在项目中如何解决缓存穿透问题&#xff1f; 缓存穿透是我们做缓存优化时最常遇到的问题&#xff0c;特别是当查询的对象在数据库中不存在时&#xff0c;缓存层和数据库都会…...

前端控制器模式

前端控制器模式 概述 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是一种设计模式&#xff0c;它将应用程序中的所有用户请求统一交由一个控制器处理。这种模式在MVC&#xff08;Model-View-Controller&#xff09;架构中尤为常见&#xff0c;它能够简化…...

Linux之安装docker

一、检查版本和内核是否合格 Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不低于3.10。 检查版本 cat /etc/redhat-release检查内核 uname -r二、Docker的安装 1、自动安装 Docker官方和国内daocloud都提供了一键安装的脚本&#x…...

BUUCTF_XSS-Lab

xss XSS&#xff08;Cross - Site Scripting&#xff09;即跨站脚本攻击&#xff0c;是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本&#xff08;通常是 JavaScript&#xff09;&#xff0c;当其他用户访问该网站时&#xff0c;这些恶意脚本会在用户的浏览器中执…...

springBoot使用

1.什么是SpringBoot SpringBoot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。SpringBoot是伴随Spring4.0的时候发布的一个框架。SpringBoot用来简化Spring应用的开发&#xff0c;约定大于配置&#xff0c;去繁从简。 从本质上来说&#xff…...

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …...

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的作用及使用方法 &#xff08;1&#xff09;作用 控制Camera的模块&#xff0c;实现摄像机的复杂控制&#xff0c;比如角色的跟随&#xff0c;限制Camera的区域 &#xff08;2&#xff09;使用方法 在已有Main Camera的情况下&#xff0c; 通过【GameObject -&…...

graylog初体验

最近graylog比较火&#xff0c;部署了一个来测试下&#xff0c;看下后续能不能代替目前占用资源比较多的elk&#xff0c;目前未对graylog性能进行深入测试&#xff0c;只是简单体验了下&#xff0c;graylog的UI比较简陋&#xff0c;但是在报警以及权限方面优于ELK&#xff0c;整…...

15.PPT:文静-云计算行业发展【29】

目录 NO123​ NO345​ NO6​ NO78 NO9/10/11/12​ NO123 设计→幻灯片大小→自定义幻灯片大小→ 全屏显示&#xff08;16&#xff1a;9&#xff09;→最大化 NO345 SmartArt 主题颜色2/6/9&#xff1a;形状样式&#xff1a;样式 加大行距加宽间距 NO6 NO78 设计→设置背景…...

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…...

MFC 的 CListCtrl 控件,使用SetItemState 方法来设置选中某个 item,如何达到效果和鼠标点击一致

1&#xff09;查询到的方法如下&#xff1a; // 假设你要选中第 2 行&#xff08;索引从 0 开始&#xff09; int nItem 1; // 取消所有其他选中项 m_ListCtrl.SetItemState(-1, 0, LVIS_SELECTED); // 设置选中状态&#xff0c;并确保它具有焦点 m_ListCtrl.SetItemStat…...

一文读懂:TCP网络拥塞的应对策略与方案

TCP&#xff08;传输控制协议&#xff09;是互联网中广泛使用的可靠传输协议&#xff0c;它通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制确保数据的可靠传输。然而&#xff0c;在网络环境中&#xff0c;由于多个主机共享网络资源&#xff0c;网络拥塞成为了一个…...

深度整理总结MySQL——子查询的工作原理

子查询的工作原理 前言为什么开发人员喜欢写子查询查询重写条件化简移除不必要的括号常量传递&#xff08;constant_propagation&#xff09;移除没用的条件&#xff08;trivial_condition_removal&#xff09;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的链表、栈&#xff0c;队列&#xff0c;树&#xff0c;排序&#xff0c;链表包括顺序链表&#xff0c;双向链表&#xff0c;循环链表&#xff0c;队列是循环队列&#xff0c;排序包含冒牌、选择 1.链表 1.1 顺序链表 type LNode struct {data intn…...

ComfyUI翻译节点终极指南:如何选择最适合你的AI创作翻译工具

ComfyUI翻译节点终极指南&#xff1a;如何选择最适合你的AI创作翻译工具 【免费下载链接】ComfyUI_Custom_Nodes_AlekPet Custom nodes that extend the capabilities of Comfyui 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_Custom_Nodes_AlekPet 在AI图像生…...

不只是安装:深入理解TI毫米波雷达开发套件(MMWCAS-RF-EVM)的软件生态与数据流

不只是安装&#xff1a;深入理解TI毫米波雷达开发套件&#xff08;MMWCAS-RF-EVM&#xff09;的软件生态与数据流 毫米波雷达技术正在重塑自动驾驶、工业检测和智能安防等领域&#xff0c;而TI的MMWCAS-RF-EVM评估板作为行业标杆工具&#xff0c;其真正的价值往往被简化为"…...

Overleaf项目本地化实战:用VS Code插件管理、Git版本控制,再搭配Copilot提效

Overleaf项目本地化实战&#xff1a;用VS Code插件管理、Git版本控制&#xff0c;再搭配Copilot提效 对于经常使用LaTeX撰写学术论文或技术文档的用户来说&#xff0c;Overleaf无疑是一个强大的云端协作平台。然而&#xff0c;当项目规模扩大、需要更精细的版本控制时&#xff…...

多平台资源下载解决方案:res-downloader实现数字内容自由获取

多平台资源下载解决方案&#xff1a;res-downloader实现数字内容自由获取 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数…...

Mirage Flow 与卷积神经网络(CNN)的跨模态融合应用

Mirage Flow 与卷积神经网络&#xff08;CNN&#xff09;的跨模态融合应用 你有没有想过&#xff0c;让机器不仅能“看见”图片&#xff0c;还能像人一样“理解”并“描述”图片里的故事&#xff1f;比如&#xff0c;给一张复杂的医学影像&#xff0c;它不仅能圈出病灶&#x…...

实战应用:基于快马AI与OpenClaw构建Mac本地电商价格监控系统

最近在做一个电商价格监控的小工具&#xff0c;发现用OpenClaw配合Mac本地环境搭建特别方便。这里分享一下我的实战经验&#xff0c;希望能帮到有类似需求的同学。 为什么选择OpenClaw OpenClaw是个轻量级的Python爬虫框架&#xff0c;特别适合需要快速搭建数据采集系统的场景…...

Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案

Windows Cleaner智能清理工具&#xff1a;系统优化与空间释放的全面解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 随着计算机使用时间的增长&#xff0…...

ESP32-S3驱动ILI9341屏幕避坑指南:从LVGL组件手动移植到流畅显示(ESP-IDF 5.4.1)

ESP32-S3驱动ILI9341屏幕避坑指南&#xff1a;从LVGL组件手动移植到流畅显示&#xff08;ESP-IDF 5.4.1&#xff09; 当你在ESP32-S3上尝试将LVGL移植到ILI9341屏幕时&#xff0c;可能会遇到各种奇怪的问题&#xff1a;内存溢出、屏幕模糊、驱动不匹配等。这些问题往往让开发者…...

重装系统后的环境快速恢复:包含BERT模型部署的自动化脚本

重装系统后的环境快速恢复&#xff1a;包含BERT模型部署的自动化脚本 重装系统&#xff0c;对开发者来说&#xff0c;就像一场“数字大扫除”。清爽是清爽了&#xff0c;但看着空空如也的终端和待部署的一长串服务列表&#xff0c;那种从头再来的疲惫感瞬间涌上心头。尤其是当…...

XDMA驱动内存读写测试指南:从reg_rw工具使用到AXI4时序分析

XDMA驱动内存读写测试指南&#xff1a;从reg_rw工具使用到AXI4时序分析 在FPGA与主机间的高速数据交互场景中&#xff0c;XDMA&#xff08;Xilinx DMA&#xff09;作为PCIe协议栈的核心引擎&#xff0c;其内存读写性能直接决定了系统整体吞吐量。本文将深入剖析reg_rw工具的底层…...