赞
踩
树莓派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)
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
3、在项目pico_freertos_project目录下依次输入:
- mkdir build && cd build
- cmake ..
- make
测试是否可以正常编译
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-Kernel/event_groups.c
- FreeRTOS-Kernel/list.c
- FreeRTOS-Kernel/queue.c
- FreeRTOS-Kernel/stream_buffer.c
- FreeRTOS-Kernel/tasks.c
- FreeRTOS-Kernel/timers.c
- FreeRTOS-Kernel/portable/GCC/ARM_CM0/port.c
- FreeRTOS-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 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;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
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灭的频率循环。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。