基於vscode搭建freertos環境

USTHzhanglu發表於2024-08-07

前言

目前網上windows模擬freertos的資料都是比較久遠的,不太適合現有的開發,因此重新整理了一下資料.

目標:

使用Vscode進行FreeRTOS開發和模擬.

關鍵詞: freertos, vscode,llvm,cmake,windows

環境配置

編譯器目前使用的是llvm-MinGW-msvcrt:Releases · mstorsjo/llvm-mingw (github.com)

FreeRTOS使用的最新版20240601-LTS:Release 202406.01-LTS · FreeRTOS/FreeRTOS-LTS (github.com)

Vsocde就常用的外掛,這裡除錯用的codeLLDB,自己下載下.

編譯器下載了加入環境變數,這裡就不細說了

程式碼解壓後,這裡只關注FreeRTOS-Kernel

程式碼編譯

使用code開啟FreeRTOS-Kernel\examples\cmake_example,使用cmaketools正常配置,選擇windows能用的編譯器即可.

image-20240807121958853

然後需要配置windows的port.c. 之前移植時需要自己加入編譯目錄,現在可以直接在Cmakelists.txt中配置.

# Select the heap port.  values between 1-4 will pick a heap.
set(FREERTOS_HEAP "4" CACHE STRING "" FORCE)

# Select the native compile PORT
set(FREERTOS_PORT "MSVC_MINGW" CACHE STRING "" FORCE)

修改成MSVC_MINGW

然後還要修改編譯器設定

    # Suppressions required to build clean with clang.
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-unused-macros>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-padded>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-missing-variable-declarations>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-covered-switch-default>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-extra-semi-stmt>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-unsafe-buffer-usage>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-missing-noreturn>
    $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-cast-align> )

不然會報錯

然後就可以編譯執行了

這裡在main.c裡修改一些程式碼

static void exampleTask( void * parameters )
{
    /* Unused parameters. */
    ( void ) parameters;

    for( ; ; )
    {
        printf("example test\r\n");
        /* Example Task Code */
        vTaskDelay( 100 ); /* delay 100 ticks */
    }
}

執行結果:

."FreeRTOS-Kernel/examples/cmake_example/build/example.exe"
Example FreeRTOS Project
example test
example test
example test
example test
example test

除錯

新建launch.json

加入以下程式碼

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "windows",
      "type":"lldb",
      "request": "launch",
      "program": "${command:cmake.launchTargetPath}",//透過cmake獲取可執行檔名
      "args": [],
      "cwd": "${workspaceFolder}",
    },
  ]
}

然後就可以除錯了

image-20240807122652246

相關文章