轻松玩转树莓派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

相关文章

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

成章数据库安装体验

对标Redis的国产数据库 一位来自国产数据库的朋友想请我试用一下他们的产品。并且直言早期问题比较多,还请多多包涵。一般对于这种比较客观和友好的我都愿意试试。对于怼天怼地吊打谁的我个人就不尝试了。 他们中文名字叫“成章数据库“我就尝试从一个不了解产品的人的角度去安装尝试一下。我也和他们反馈了说这个怎么一个汉字都没有啊。(同样的话我以前对PingCAP的CTO黄东旭老师说过,后来TiDB的就都有

轻松解决 linux平台 下编辑文档产生的 ^M 符号问题

一、^M:产生的原因:          windows平台下 使用“回车键”,则会在 行尾 产生 ^M 二、产生的后果:        在执行脚本时,shell解析器 会执行错误,弹出类似于:./XXXXX.sh: /bin/sh^M:bad interpreter:No such file or directory         ------解析器会将 末尾 带 ^M 的字段视为 文

windows server 2012 R2 安装桌面体验,安装ActiveSync时提示缺少Windows组件

第一步:启动《服务器管理器》 右键桌面上的"计算机",管理,打开服务器管理器 第二步:选择所有服务器,右键显示出来的服务器,添加角色和功能 第三步,在弹出的弹窗,一直点下一步下一步,到功能位置。 注意安装类型:选择“基于角色或基于功能安装” 然后 点击一下步 服务器选择 :操作: 无需配置,选择下一步 服务器角色:操作: 无需配置,选择下一步 功能 操作 选择 “用户界面和基础结构

玩转Web之servlet(三)---一张图看懂B/S架构

学WEB, 首先 要明白B/S架构,本文将简单说一下小编的愚见,若有不当,欢迎大家指正。 首先,什么是B/S架构?B/S是Broweser/Server的缩写,即浏览器/服务器模式,简单说就是客户端使用浏览器,服务端使用Web服务器,客户端与服务端之间使用http协议进行通讯。 那么,为什么要使用B/S架构呢?当然是其有一定的优点:           1.传统的C/S架构 需要单独安装客户

玩转Web之Json(四)---json与(Object/List/Map)的相互转化

在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担。本文将给出json转化的一系列方法。 闲话不 多说,直接上代码: 先是Object /List /Map转化为Json /* 功能 :将一个对象转成json数组* 参数 :object对象* retu

玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析

最近做一个项目时,需要在dataGird中插入<input>,即文本输入框,当点击提交时,需要把文本框里填的数据返以及其他列的一些信息以json数组的格式返回到后台,虽然我实现了该功能,但一直没找到简便的方法,今天终于在一位版主的点拨下找到了非常简单的方法。   var all = $("#dg").datagrid("getData");var json =JSON.

玩转Web之easyui(三)-----easy ui dataGird 重新指定url以获取不同数据源信息

如果已经写了一个dataGird并且已经通过url绑定数据源,能不能在其他地方改变url使其从不同数据源获取信息,从而实现查询等操作?答案当然是肯定的,而且仅需要几行代码 $('#btnq').bind('click', function(){ $('#dg').datagrid({ url: '../servlet/Student_search' });//重新指定url$('#dg'

玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)

关于easy ui 异步加载生成树及点击树生成选项卡,这里直接给出代码,重点部分代码中均有注释 前台: $('#tree').tree({ url: '../servlet/School_Tree?id=-1', //向后台传送id,获取根节点lines:true,onBeforeExpand:function(node,param){ $('#tree').tree('options'

玩转Web之easyui(一)-----easy ui datagird 分页

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。   easy ui 中数据表格的分页其实是很简单的,分页是在数据表格可以正常显示数据的基础上进行的,在这里给出servlet的代码,其中selectAll()方法是从数据库中提取所有数据, 分页的一种思路是:从数据表中取出所