轻松玩转树莓派Pico之五、FreeRTOS体验

news2025/2/27 14:17:14

树莓派Pico开发板片上主芯片为RP2040单片机,双核 Arm Cortex-M0 + 处理器,工作主频为133MHz,264K片上SRAM,和2MByteFlash。

这么大的RAM和Flash资源,不跑一下RTOS操作系统实在有些可惜,这次就先体验一下FreeRTOS,也为后续项目做一些准备。

一、项目创建

1、按照前文“轻松玩转树莓派Pico之二、创建自己的pico工程项目”一文创建pico_freertos_project项目。

创建pico-freertos.c,并输入:

#include <stdio.h>
#include "pico/stdlib.h"

int main()

{
    setup_default_uart();
    while(1) {
        printf("Hello World!\r\n");
        sleep_ms(1000);
    }

    return 0;
}

2、创建项目CMakeLists.txt

cmake_minimum_required(VERSION 3.13)
 
include(pico_sdk_import.cmake)
 
project(PICO_FREERTOS_PROJECT C CXX ASM)
 
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
 
pico_sdk_init()
 
add_executable(PICO_FREERTOS_PROJECT
    pico-freertos.c
)
 
pico_add_extra_outputs(PICO_FREERTOS_PROJECT)
target_link_libraries(PICO_FREERTOS_PROJECT pico_stdlib)

3、在项目pico_freertos_project目录下依次输入:

mkdir build && cd build
cmake ..
make

测试是否可以正常编译

二、下载FreeRTOS内核源代码

1、在命令行中输入:

git submodule add https://github.com/FreeRTOS/FreeRTOS-Kernel FreeRTOS/FreeRTOS-Kernel

下载完成后,可看到项目目录下会出现FreeRTOS/FreeRTOS-Kernel两级目录。

其中:

(1)FreeRTOS目录用于存放项目需要与RTOS相关的一些文件

(2)FreeRTOS-Kernel目录为FreeRTOS内核源码

2、在FreeRTOS目录下新建include目录,复制FreeRTOSConfig.h至include目录下。

3、在FreeRTOS目录下下新增CMakeLists.txt,不使用FreeRTOS自带的CMake脚本。

在CMakeLists.txt中输入:

add_library(FreeRTOS STATIC
    FreeRTOS-Kerne/event_groups.c
    FreeRTOS-Kerne/list.c
    FreeRTOS-Kerne/queue.c
    FreeRTOS-Kerne/stream_buffer.c
    FreeRTOS-Kerne/tasks.c
    FreeRTOS-Kerne/timers.c
    FreeRTOS-Kerne/portable/GCC/ARM_CM0/port.c
    FreeRTOS-Kerne/portable/MemMang/heap_4.c
)

target_include_directories(FreeRTOS PUBLIC include FreeRTOS-Kerne/include FreeRTOS-Kerne/portable/GCC/ARM_CM0)

Pico开发板上芯片为RP2040,Cortex-M0双核,当前只使用单核,使用portable/GCC/ARM_CM0下的适配文件。

4、修改pico-freertos.c文件

#include "FreeRTOS.h"
#include "task.h"

void vTaskCode( void * pvParameters )
{
    /* The parameter value is expected to be 1 as 1 is passed in the
    pvParameters value in the call to xTaskCreate() below. 
    configASSERT( ( ( uint32_t ) pvParameters ) == 1 );
    */

    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    
    for( ;; )
    {
        printf("Hello World!\r\n");
        vTaskDelay(500);
        gpio_put(LED_PIN, 1);
        vTaskDelay(500);
        gpio_put(LED_PIN, 0);
    }
}



int main()
{
    setup_default_uart();

    BaseType_t xReturned;
    TaskHandle_t xHandle = NULL;
    /* Create the task, storing the handle. */
    xReturned = xTaskCreate(
                    vTaskCode,       /* Function that implements the task. */
                    "Blinky task",   /* Text name for the task. */
                    512,             /* Stack size in words, not bytes. */
                    ( void * ) 1,    /* Parameter passed into the task. */
                    tskIDLE_PRIORITY,/* Priority at which the task is created. */
                    &xHandle );   

    vTaskStartScheduler();
    
    return 0;
}

5、修改pico_freertos_project项目下的CMakeLists.txt,加入以下内容

pico_add_extra_outputs(PICO_FREERTOS_PROJECT)
target_link_libraries(PICO_FREERTOS_PROJECT pico_stdlib FreeRTOS cmsis_core)

add_subdirectory(FreeRTOS)

三、编译

在项目pico_freertos_project目录下依次输入:

cd build
cmake ..
make

四、运行

1、根据“轻松玩转树莓派Pico之四、Ubuntu下在线debug环境搭建”流程,搭建完成Pico VSCode可视化在线debug环境。

2、在线运行:

特别注意,需要先设置一下USB权限,否则会运行失败。

sudo chmod -R 777 /dev/bus/usb/

 可以看到Pico开发板上的led指示灯以500ms亮/500ms灭的频率循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于新型战争策略优化算法的光伏模型优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;本科计算机专业&#xff0c;研究生电气学硕…

vscode通过插件一键运行 c++单元测试

gtest使用初探 简介: 本文在 ubuntu18.04 上实现了 googletest 的全局安装&#xff0c;并在一个 demo项目中演示了使用 cmake 引入了该库&#xff0c;实现了在命令行中运行 c 单元测试&#xff0c;包括运行单个 TEST 函数。另外通过 vscode 的插件 C TestMate&#xff0c; 实现…

MATLAB应用2——MATLAB串口采集加速度计数据

串口保存数据为txt格式&#xff1a; clc ; %死机的时候&#xff0c;在命令窗口输入return %getcominstrhwinfo (serial) %寻找串口 delete(instrfindall) %这句话必须有 global xx; global nn; global data1; global s; xx0; nn500; data1(1:nn)0; sserial(COM8); set(s,Bau…

什么?用Python实用脚本也能实现快速卡通画人物头像,这不就是妥妥的QQ秀嘛。

前言 今天我们就利用Python脚本实现天气查询应用吧。直接开整~ 思路分析 从大量照片/卡通数据中习得照片到卡通画的映射。 开发工具 python版本&#xff1a; 3.6 相关模块&#xff1a; pytorch 1.4 tensorflow-gpu 1.14 face-alignment dlib 1.数据准备 训练数据包括…

Linux入门—Shell常用命令之打包压缩

本文由【正厚软件】沙老师提供 打包压缩命令 1. gzip 命令 命令功能&#xff1a;压缩或展开文件 命令格式&#xff1a; ogzip [ -acdfhlLnNrtvV19 ] [-S 后缀] [ 文件名 ... ] &#xff1a;压缩文件 ogunzip [ -acfhlLnNrtvV ] [-S 后缀] [ 文件名 ... ] &#xff1a;解压缩文件…

离线安装harbor容器镜像仓库单机版(harbor-v2.3.5)

记录&#xff1a;358 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;离线部署harbor容器镜像仓库单机版&#xff0c;使用Redis为外部缓存、使用PostgreSQL为外部数据库、使用docker-ce操作容器、使用docker-compose操作harbor容器镜像仓库。 版本&#xff1a; 操作系统…

OpenAI chatGPT火爆出圈,世界悄悄发生着变化

OpenAI chatGPT火爆出圈&#xff0c;世界悄悄发生着变化一、为什么突然火起来了&#xff1f;二、ChatGPT功能实例2.1 [AI聊天](https://chat.openai.com/chat)2.2 [AI写新闻稿](https://chat.openai.com/chat)2.3 [AI写代码](https://chat.openai.com/chat)2.4 [AI写论文](http…

Kubernetes二进制单节点集群部署

Kubernetes二进制单节点集群部署 常见的K8S按照部署方式 ●Mini kube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用部署地址&#xff1a; https://kubernetes.io/docs/setup/minikube ●Kubeadmin Kubea…

浅谈Kernel32.dll(Windows平台下必有的动态库文件)

今天听了前辈的黑客攻击的知识分享&#xff0c;里面比较基础的元素就是Kernel32.dll&#xff0c;我对它感兴趣好久了&#xff0c;今天搜集一些资料&#xff0c;有关Kernel32的。 目录 ​编辑 一、Kernel32介绍 二、Kernel32内存管理 三、引起Kernel32出错的主要元凶 四、解…

【求助帖】从技术转为项目经理后,如何快速进入角色?

近日&#xff0c;看到了一个求助贴&#xff0c;小李今年26岁&#xff0c;干了两年技术后&#xff0c;现在转行到项目经理的岗位。每天东奔西跑、天天加班还是感觉很吃力、工作也没有成效&#xff0c;想问下如何能快速进入角色&#xff1f; 那么小李的一天具体是怎么样的呢&…

追格小程序重磅升级 新亮点来袭!

追格小程序是一个积木式小程序搭建框架&#xff0c;基于UniappWordPress开发&#xff0c;代码免费开源不加密且支持二开&#xff0c;安装追格相应扩展模块&#xff0c;简单配置即可快速搭建不限于圈子社区、知识付费、活动报名、资讯等类型小程序。 新的亮点是什么 追格小程序…

以太网 VLAN(VLAN数据帧格式、交换机接口类型)

2.8.2 以太网 VLAN&#xff08;VLAN数据帧格式、交换机接口类型&#xff09; 原始的以太网数据帧没有802.1QTag字段&#xff0c;在网络中进行转发的时候能够被主机接收、解封查看。 而一但有了802.1Q Tag字段的以太网数据帧&#xff0c;主机即使能接收数据帧&#xff0c;也无法…

233的字符串

//在群里看到了老师发布的下面这条消息&#xff0c;许久没打代码&#xff0c;打算找找感觉&#xff0c;第一道就拿捏我了&#xff0c;题目不是很难&#xff0c;但是高数据范围的超时问题一直是我未找到解决办法的一个问题&#xff0c;虽然现在比赛未结束&#xff0c;不过我的错…

人脑如果是台计算机,那么电从哪里来?

1.人脑是一台量子计算机 2022年10月7日&#xff0c;爱尔兰都柏林三一学院的实验团队在《物理学通讯》杂志上发表了一篇名为《非经典脑功能的实验指标》的论文。研究人员在论文中写道&#xff1a;“我们的研究结果表明&#xff0c;我们可能已经目睹了由意识相关的大脑功能介导的…

我写这10+个JavaScript单行代码,被组长夸代码写得优雅

JavaScript 非常大的特点容易上手且非常灵活&#xff0c;代码实现方式五花八门&#xff1b;有时候能一行代码解决&#xff0c;就尽量不用两行。 本文整理了非常有用的单行代码&#xff0c;这些需求都是在开发中非常常见的&#xff0c;用单行代码可以帮助你提高工作效率。 数组…

问卷开头语怎么写?

问卷的开头语是一份问卷的开场&#xff0c;开场好不好关系到整个问卷过程能够顺利进行。所以&#xff0c;在关注问卷的标题、题目、设计以外&#xff0c;我们也要重视起问卷的开头语。通俗易懂的内容更易进行传播&#xff0c;这一点也可以运用到问卷中&#xff0c;表达清晰、完…

低代码平台数据表格组件的设计实践

在做低代码产品的过程中&#xff0c;产品经理可能会遇到各种各样的问题&#xff0c;比如部分产品经理可能会因为对数据模型的不熟悉&#xff0c;而在实际对接中产生一定障碍。所以产品经理要如何在低代码工作中铲除障碍、并进行决策&#xff1f;本篇文章里&#xff0c;作者结合…

⚡热点管理模块⚡

热点管理模块概念 如果一个文件在连续一段时间内没有访问到&#xff0c;则该文件是一个非热点文件&#xff0c;否则位热点文件。在服务上上有两个目录&#xff0c;一个目录是backdir存储的是热点文件&#xff0c;一个目录是packdir存储的是非热点文件热点管理模块每隔一段时间…

ROHM | 开发出隔离型DC-DC转换器“BD7Fx05EFJ-C”

全球知名半导体制造商ROHM&#xff08;总部位于日本京都市&#xff09;开发出两款隔离型反激式*1DC-DC转换器“BD7F105EFJ-C”和“BD7F205EFJ-C”&#xff0c;新产品非常适用于xEV&#xff08;电动汽车&#xff09;的主驱逆变器、车载充电器&#xff08;以下简称“OBC”&#x…

Unity Addressables资源管理 设置远程加载资源

1.添加Group 点击 PackedAssets 可添加默认设置的组 Blank 则是无设置的 修改名字并添加了一张图片 图片挂在WindowImage预制体上 2.设置模式 Group可选择打包模式&#xff1a; 本地&#xff0c;远程&#xff0c;自定义 设置了后这个包会打到不同的路径&#xff0c;加载也只…