本文主要是介绍轻松玩转树莓派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体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!