参考
rp2040-freertos-project
目录结构
PS D:\workspace\gitee\2\rp2040-freertos-project>tree /F 卷 新加卷 的文件夹PATH列表 卷序列号为 64EF-5EB7 D:. │ .gitignore │ CMakeLists.txt │ copy_uf2.bat │ pico_sdk_import.cmake │ ├─freertos │ │ CMakeLists.txt │ │ FreeRTOSConfig.h │ │ │ └─FreeRTOS-Kernel │ │ .git-blame-ignore-revs │ │ .gitattributes │ │ .gitmodules │ │ CMakeLists.txt │ │ croutine.c │ │ cspell.config.yaml │ │ event_groups.c │ │ History.txt │ │ LICENSE.md │ │ list.c │ │ manifest.yml │ │ MISRA.md │ │ queue.c │ │ README.md │ │ stream_buffer.c │ │ tasks.c │ │ timers.c │ │ │ ├─include │ │ atomic.h │ │ CMakeLists.txt │ │ croutine.h │ │ deprecated_definitions.h │ │ event_groups.h │ │ FreeRTOS.h │ │ list.h │ │ message_buffer.h │ │ mpu_prototypes.h │ │ mpu_syscall_numbers.h │ │ mpu_wrappers.h │ │ newlib-freertos.h │ │ picolibc-freertos.h │ │ portable.h │ │ projdefs.h │ │ queue.h │ │ semphr.h │ │ StackMacros.h │ │ stack_macros.h │ │ stdint.readme │ │ stream_buffer.h │ │ task.h │ │ timers.h │ │ │ └─portable │ │ CMakeLists.txt │ │ readme.txt │ │ │ ├─GCC │ │ └─ARM_CM0 │ │ mpu_wrappers_v2_asm.c │ │ port.c │ │ portasm.c │ │ portasm.h │ │ portmacro.h │ │ │ ├─MemMang │ │ heap_1.c │ │ heap_2.c │ │ heap_3.c │ │ heap_4.c │ │ heap_5.c │ │ ReadMe.url │ │ │ └─ThirdParty │ └─GCC │ └─RP2040 │ │ .gitignore │ │ CMakeLists.txt │ │ FreeRTOS_Kernel_import.cmake │ │ library.cmake │ │ LICENSE.md │ │ pico_sdk_import.cmake │ │ port.c │ │ README.md │ │ │ └─include │ freertos_sdk_config.h │ portmacro.h │ rp2040_config.h │ └─ProjectFiles CMakeLists.txt main.cppCMakeLists.txt
cmake_minimum_required(VERSION3.12)include(pico_sdk_import.cmake)project(Pico-FreeRTOS)pico_sdk_init()add_subdirectory(freertos)add_subdirectory(ProjectFiles)pico_sdk_import.cmake
set(PICO_SDK_PATH"D:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")if(DEFINED ENV{PICO_SDK_PATH}AND(NOT PICO_SDK_PATH))set(PICO_SDK_PATH$ENV{PICO_SDK_PATH})message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")endif()if(DEFINED ENV{PICO_SDK_FETCH_FROM_GIT}AND(NOT PICO_SDK_FETCH_FROM_GIT))set(PICO_SDK_FETCH_FROM_GIT$ENV{PICO_SDK_FETCH_FROM_GIT})message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")endif()if(DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH}AND(NOT PICO_SDK_FETCH_FROM_GIT_PATH))set(PICO_SDK_FETCH_FROM_GIT_PATH$ENV{PICO_SDK_FETCH_FROM_GIT_PATH})message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")endif()set(PICO_SDK_PATH"${PICO_SDK_PATH}"CACHEPATH"Path to the PICO SDK")set(PICO_SDK_FETCH_FROM_GIT"${PICO_SDK_FETCH_FROM_GIT}"CACHE BOOL"Set to ON to fetch copy of PICO SDK from git if not otherwise locatable")set(PICO_SDK_FETCH_FROM_GIT_PATH"${PICO_SDK_FETCH_FROM_GIT_PATH}"CACHE FILEPATH"location to download SDK")if(NOT PICO_SDK_PATH)if(PICO_SDK_FETCH_FROM_GIT)include(FetchContent)set(FETCHCONTENT_BASE_DIR_SAVE${FETCHCONTENT_BASE_DIR})if(PICO_SDK_FETCH_FROM_GIT_PATH)get_filename_component(FETCHCONTENT_BASE_DIR"${PICO_SDK_FETCH_FROM_GIT_PATH}"REALPATH BASE_DIR"${CMAKE_SOURCE_DIR}")endif()FetchContent_Declare(pico_sdk GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk GIT_TAG master)if(NOT pico_sdk)message("Downloading PICO SDK")FetchContent_Populate(pico_sdk)set(PICO_SDK_PATH${pico_sdk_SOURCE_DIR})endif()set(FETCHCONTENT_BASE_DIR${FETCHCONTENT_BASE_DIR_SAVE})else()message(FATAL_ERROR"PICO SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git.")endif()endif()get_filename_component(PICO_SDK_PATH"${PICO_SDK_PATH}"REALPATH BASE_DIR"${CMAKE_BINARY_DIR}")if(NOT EXISTS${PICO_SDK_PATH})message(FATAL_ERROR"Directory '${PICO_SDK_PATH}' not found")endif()set(PICO_SDK_INIT_CMAKE_FILE${PICO_SDK_PATH}/pico_sdk_init.cmake)if(NOT EXISTS${PICO_SDK_INIT_CMAKE_FILE})message(FATAL_ERROR"Directory '${PICO_SDK_PATH}' does not appear to contain the PICO SDK")endif()set(PICO_SDK_PATH${PICO_SDK_PATH}CACHEPATH"Path to the PICO SDK"FORCE)include(${PICO_SDK_INIT_CMAKE_FILE})copy_uf2.bat
@echo offset"src=D:\workspace\gitee\2\rp2040-freertos-project\cmake-build-debug\ProjectFiles\blink.uf2"set"dst=F:"ifnot exist"%src%"(echoError: UF2filenot found!pauseexit1)ifnot exist"%dst%"(echoError: USB drive %dst% not found!pauseexit1)copy /Y"%src%"%dst%if%errorlevel% equ0(echoSuccess!Pico is rebooting...)else(echoFailed!Reconnect Pico and try again.)pause.gitignore
build .idea cmake-build-debugProjectFiles/CMakeLists.txt
add_executable(blink main.cpp)target_link_libraries(blink pico_stdlib freertos)pico_add_extra_outputs(blink)ProjectFiles/main.cpp
#include<FreeRTOS.h>#include<task.h>#include<stdio.h>#include"pico/stdlib.h"voidled_task(void*pvParameters){constuint LED_PIN=PICO_DEFAULT_LED_PIN;gpio_init(LED_PIN);gpio_set_dir(LED_PIN,GPIO_OUT);while(true){gpio_put(LED_PIN,1);vTaskDelay(pdMS_TO_TICKS(1000));gpio_put(LED_PIN,0);vTaskDelay(pdMS_TO_TICKS(1000));}// 理论上不会走到这里vTaskDelete(NULL);}intmain(){stdio_init_all();xTaskCreate(led_task,// 任务函数"LED_Task",// 名字256,// 栈大小(words,不是 bytes)NULL,// 参数1,// 优先级NULL// 任务句柄);vTaskStartScheduler();while(1){tight_loop_contents();}}freertos/CMakeLists.txt
set(PICO_SDK_FREERTOS_SOURCE FreeRTOS-Kernel)add_library(freertos${PICO_SDK_FREERTOS_SOURCE}/event_groups.c${PICO_SDK_FREERTOS_SOURCE}/list.c${PICO_SDK_FREERTOS_SOURCE}/queue.c${PICO_SDK_FREERTOS_SOURCE}/stream_buffer.c${PICO_SDK_FREERTOS_SOURCE}/tasks.c${PICO_SDK_FREERTOS_SOURCE}/timers.c${PICO_SDK_FREERTOS_SOURCE}/portable/MemMang/heap_3.c${PICO_SDK_FREERTOS_SOURCE}/portable/ThirdParty/GCC/RP2040/port.c)target_include_directories(freertos PUBLIC.${PICO_SDK_FREERTOS_SOURCE}/include${PICO_SDK_FREERTOS_SOURCE}/portable/ThirdParty/GCC/RP2040/include)target_link_libraries(freertos PUBLIC pico_stdlib hardware_irq hardware_timer hardware_sync hardware_clocks hardware_exception pico_multicore)freertos/FreeRTOSConfig.h
#ifndefFREERTOS_CONFIG_EXAMPLES_COMMON_H#defineFREERTOS_CONFIG_EXAMPLES_COMMON_H/* Scheduler Related */#defineconfigUSE_PREEMPTION1#defineconfigUSE_TICKLESS_IDLE0#defineconfigUSE_IDLE_HOOK0#defineconfigUSE_TICK_HOOK0#defineconfigTICK_RATE_HZ((TickType_t)1000)#defineconfigMAX_PRIORITIES32#defineconfigMINIMAL_STACK_SIZE(configSTACK_DEPTH_TYPE)512#defineconfigUSE_16_BIT_TICKS0#defineconfigIDLE_SHOULD_YIELD1/* Synchronization Related */#defineconfigUSE_MUTEXES1#defineconfigUSE_RECURSIVE_MUTEXES1#defineconfigUSE_APPLICATION_TASK_TAG0#defineconfigUSE_COUNTING_SEMAPHORES1#defineconfigQUEUE_REGISTRY_SIZE8#defineconfigUSE_QUEUE_SETS1#defineconfigUSE_TIME_SLICING1#defineconfigUSE_NEWLIB_REENTRANT0// todo need this for lwip FreeRTOS sys_arch to compile#defineconfigENABLE_BACKWARD_COMPATIBILITY1#defineconfigNUM_THREAD_LOCAL_STORAGE_POINTERS5/* System */#defineconfigSTACK_DEPTH_TYPEuint32_t#defineconfigMESSAGE_BUFFER_LENGTH_TYPEsize_t/* Memory allocation related definitions. */#ifndefconfigSUPPORT_STATIC_ALLOCATION#defineconfigSUPPORT_STATIC_ALLOCATION0#endif#ifndefconfigSUPPORT_DYNAMIC_ALLOCATION#defineconfigSUPPORT_DYNAMIC_ALLOCATION1#endif#defineconfigTOTAL_HEAP_SIZE(128*1024)#defineconfigAPPLICATION_ALLOCATED_HEAP0/* Hook function related definitions. */#defineconfigCHECK_FOR_STACK_OVERFLOW0#defineconfigUSE_MALLOC_FAILED_HOOK0#defineconfigUSE_DAEMON_TASK_STARTUP_HOOK0/* Run time and task stats gathering related definitions. */#defineconfigGENERATE_RUN_TIME_STATS0#defineconfigUSE_TRACE_FACILITY1#defineconfigUSE_STATS_FORMATTING_FUNCTIONS0/* Co-routine related definitions. */#defineconfigUSE_CO_ROUTINES0#defineconfigMAX_CO_ROUTINE_PRIORITIES1/* Software timer related definitions. */#defineconfigUSE_TIMERS1#defineconfigTIMER_TASK_PRIORITY(configMAX_PRIORITIES-1)#defineconfigTIMER_QUEUE_LENGTH10#defineconfigTIMER_TASK_STACK_DEPTH1024/* Interrupt nesting behaviour configuration. *//* #define configKERNEL_INTERRUPT_PRIORITY [dependent of processor] #define configMAX_SYSCALL_INTERRUPT_PRIORITY [dependent on processor and application] #define configMAX_API_CALL_INTERRUPT_PRIORITY [dependent on processor and application] */#ifFREE_RTOS_KERNEL_SMP// set by the RP2xxx SMP port of FreeRTOS/* SMP port only */#ifndefconfigNUMBER_OF_CORES#defineconfigNUMBER_OF_CORES2#endif#defineconfigNUM_CORESconfigNUMBER_OF_CORES#defineconfigTICK_CORE0#defineconfigRUN_MULTIPLE_PRIORITIES1#ifconfigNUMBER_OF_CORES>1#defineconfigUSE_CORE_AFFINITY1#endif#defineconfigUSE_PASSIVE_IDLE_HOOK0#endif/* RP2040 specific */#defineconfigSUPPORT_PICO_SYNC_INTEROP1#defineconfigSUPPORT_PICO_TIME_INTEROP1#include<assert.h>/* Define to trap errors during development. */#defineconfigASSERT(x)assert(x)/* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */#defineINCLUDE_vTaskPrioritySet1#defineINCLUDE_uxTaskPriorityGet1#defineINCLUDE_vTaskDelete1#defineINCLUDE_vTaskSuspend1#defineINCLUDE_vTaskDelayUntil1#defineINCLUDE_vTaskDelay1#defineINCLUDE_xTaskGetSchedulerState1#defineINCLUDE_xTaskGetCurrentTaskHandle1#defineINCLUDE_uxTaskGetStackHighWaterMark1#defineINCLUDE_xTaskGetIdleTaskHandle1#defineINCLUDE_eTaskGetState1#defineINCLUDE_xTimerPendFunctionCall1#defineINCLUDE_xTaskAbortDelay1#defineINCLUDE_xTaskGetHandle1#defineINCLUDE_xTaskResumeFromISR1#defineINCLUDE_xQueueGetMutexHolder1#ifPICO_RP2350#defineconfigENABLE_MPU0#defineconfigENABLE_TRUSTZONE0#defineconfigRUN_FREERTOS_SECURE_ONLY1#defineconfigENABLE_FPU1#defineconfigMAX_SYSCALL_INTERRUPT_PRIORITY16#endif/* A header file that defines trace macro can be included here. */#endif/* FREERTOS_CONFIG_H */FreeRTOS-Kernel
[submodule"freertos/FreeRTOS-Kernel"]path=freertos/FreeRTOS-Kernel url=https://github.com/FreeRTOS/FreeRTOS-Kernel# 执行并删减没有的文件cdfreertosgitclone https://github.com/FreeRTOS/FreeRTOS-Kernel.git