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

2024-01-24 06:10

本文主要是介绍轻松玩转树莓派Pico之五、FreeRTOS体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

树莓派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_PROJECTpico-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 STATICFreeRTOS-Kernel/event_groups.cFreeRTOS-Kernel/list.cFreeRTOS-Kernel/queue.cFreeRTOS-Kernel/stream_buffer.cFreeRTOS-Kernel/tasks.cFreeRTOS-Kernel/timers.cFreeRTOS-Kernel/portable/GCC/ARM_CM0/port.cFreeRTOS-Kernel/portable/MemMang/heap_4.c
)target_include_directories(FreeRTOS PUBLIC include FreeRTOS-Kernel/include FreeRTOS-Kernel/portable/GCC/ARM_CM0)

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

4、修改pico-freertos.c文件

#include <stdio.h>
#include "pico/stdlib.h"#include "FreeRTOS.h"
#include "task.h"void vTaskCode( void * pvParameters )
{/* The parameter value is expected to be 1 as 1 is passed in thepvParameters 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灭的频率循环。

这篇关于轻松玩转树莓派Pico之五、FreeRTOS体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638741

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应