当前位置:   article > 正文

轻松玩转树莓派Pico之五、FreeRTOS体验_树莓派4b 移植freertos

树莓派4b 移植freertos

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

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

一、项目创建

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

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

  1. #include <stdio.h>
  2. #include "pico/stdlib.h"
  3. int main()
  4. {
  5.     setup_default_uart();
  6.     while(1) {
  7.         printf("Hello World!\r\n");
  8.         sleep_ms(1000);
  9.     }
  10.     return 0;
  11. }

2、创建项目CMakeLists.txt

  1. cmake_minimum_required(VERSION 3.13)
  2. include(pico_sdk_import.cmake)
  3. project(PICO_FREERTOS_PROJECT C CXX ASM)
  4. set(CMAKE_C_STANDARD 11)
  5. set(CMAKE_CXX_STANDARD 17)
  6. pico_sdk_init()
  7. add_executable(PICO_FREERTOS_PROJECT
  8. pico-freertos.c
  9. )
  10. pico_add_extra_outputs(PICO_FREERTOS_PROJECT)
  11. target_link_libraries(PICO_FREERTOS_PROJECT pico_stdlib)

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

  1. mkdir build && cd build
  2. cmake ..
  3. 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中输入:

  1. add_library(FreeRTOS STATIC
  2.     FreeRTOS-Kernel/event_groups.c
  3.     FreeRTOS-Kernel/list.c
  4.     FreeRTOS-Kernel/queue.c
  5.     FreeRTOS-Kernel/stream_buffer.c
  6.     FreeRTOS-Kernel/tasks.c
  7.     FreeRTOS-Kernel/timers.c
  8.     FreeRTOS-Kernel/portable/GCC/ARM_CM0/port.c
  9.     FreeRTOS-Kernel/portable/MemMang/heap_4.c
  10. )
  11. 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文件

  1. #include <stdio.h>
  2. #include "pico/stdlib.h"
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. void vTaskCode( void * pvParameters )
  6. {
  7.     /* The parameter value is expected to be 1 as 1 is passed in the
  8.     pvParameters value in the call to xTaskCreate() below.
  9.     configASSERT( ( ( uint32_t ) pvParameters ) == 1 );
  10.     */
  11.     const uint LED_PIN = PICO_DEFAULT_LED_PIN;
  12.     gpio_init(LED_PIN);
  13.     gpio_set_dir(LED_PIN, GPIO_OUT);
  14.    
  15.     for( ;; )
  16.     {
  17.         printf("Hello World!\r\n");
  18.         vTaskDelay(500);
  19.         gpio_put(LED_PIN, 1);
  20.         vTaskDelay(500);
  21.         gpio_put(LED_PIN, 0);
  22.     }
  23. }
  24. int main()
  25. {
  26.     setup_default_uart();
  27.     BaseType_t xReturned;
  28.     TaskHandle_t xHandle = NULL;
  29.     /* Create the task, storing the handle. */
  30.     xReturned = xTaskCreate(
  31.                     vTaskCode,       /* Function that implements the task. */
  32.                     "Blinky task",   /* Text name for the task. */
  33.                     512,             /* Stack size in words, not bytes. */
  34.                     ( void * ) 1,    /* Parameter passed into the task. */
  35.                     tskIDLE_PRIORITY,/* Priority at which the task is created. */
  36.                     &xHandle );  
  37.     vTaskStartScheduler();
  38.    
  39.     return 0;
  40. }

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

  1. pico_add_extra_outputs(PICO_FREERTOS_PROJECT)
  2. target_link_libraries(PICO_FREERTOS_PROJECT pico_stdlib FreeRTOS cmsis_core)
  3. add_subdirectory(FreeRTOS)

三、编译

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

  1. cd build
  2. cmake ..
  3. make

四、运行

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

2、在线运行:

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/468089
推荐阅读
相关标签
  

闽ICP备14008679号