免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

STM32F10x SPL V3.6.2 集成 FreeRTOS v202112

STM32F10x SPL 集成 FreeRTOS在整理 GCC Arm 工具鏈的Bluepill代碼示例, 常用外設都差不多了, 接下來是 FreeRTOS, 網(wǎng)上查到的基本上都是基于舊版本的集成, STM32 SPL版本3.5.0, FreeRTOS版本9.x或者10.x, 不如自己用新版本集成一下. 順便做個筆記.
轉(zhuǎn)載請標明出處: https://www.cnblogs.com/milton/p/16740075.html
軟件版本STM32F10x_StdPeriph_Driver V3.6.2上一個版本V3.6.1發(fā)布于2012年, 因為HAL的存在, 都以為SPL不會再更新了, 但是沒想到在時隔九年后, 2021年又發(fā)布了V3.6.2.
FreeRTOSv202112.00這個版本也發(fā)布了好一陣了, 一直沒見新的版本, LTS是202012.05, 比這個還早一年, 先用這個吧.
GCC Arm 11.2-2022.02使用的 gcc-arm-11.2-2022.02-x86_64-arm-none-eabi, 次新的版本.
集成的要點前提已經(jīng)有可以使用 GCC Arm 工具鏈編譯的基于 SPL V3.6.2 的項目模板
需要復制的文件從 https://www.freertos.org/下載 FreeRTOS 202112.00 , 文件比較大, 但是實際上需要的文件很少. 解開后到 FreeRTOS/Source 目錄下, 復制以下的文件到項目目錄下

  • FreeRTOS/Source/include 整個目錄, 這些是頭文件
  • FreeRTOS/Source 下的所有C文件
  • FreeRTOS/Source/portable/GCC/ARM_CM3 目錄, 這是針對 STM32F103 的適配文件
  • FreeRTOS/Source/portable/MemMang 目錄, 里面包含一些現(xiàn)成的內(nèi)存管理實現(xiàn)
放到項目下, 目錄結構是這樣的
FreeRTOS├── include│   ├── atomic.h│   ├── croutine.h│   ├── deprecated_definitions.h│   ├── event_groups.h│   ├── FreeRTOS.h│   ├── list.h│   ├── message_buffer.h│   ├── mpu_prototypes.h│   ├── mpu_wrappers.h│   ├── portable.h│   ├── projdefs.h│   ├── queue.h│   ├── semphr.h│   ├── stack_macros.h│   ├── StackMacros.h│   ├── stdint.readme│   ├── stream_buffer.h│   ├── task.h│   └── timers.h├── portable│   ├── GCC│   │   └── ARM_CM3│   │  ├── port.c│   │  └── portmacro.h│   └── MemMang│  ├── heap_1.c│  ├── heap_2.c│  ├── heap_3.c│  ├── heap_4.c│  └── heap_5.c├── croutine.c├── event_groups.c├── list.c├── queue.c├── stream_buffer.c├── tasks.c└── timers.c需要準備的文件: FreeRTOSConfig.h可以直接使用 FreeRTOS/Demo/CORTEX_STM32F103_Keil/ 這個例子的 FreeRTOSConfig.h, 如果要避免編譯中的warning, 需要加一行
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 0里面幾個可調(diào)節(jié)的項
  • configMINIMAL_STACK_SIZE 最小棧尺寸, 默認為128, 需要占用的內(nèi)存為 128 * 4 = 512 bytes
  • configTOTAL_HEAP_SIZE 聲明的堆尺寸, 默認的( ( size_t ) ( 17 * 1024 ) )會恰好將STM32F103C8的20K內(nèi)存用完
需要修改的代碼: 中斷處理選項一: 替換 startup 中的中斷處理函數(shù)如果項目固定啟用 FreeRTOS, 則直接在 startup 代碼中修改, 對于代碼中的函數(shù)名直接替換
  • SVC_Handler-> vPortSVCHandler
  • PendSV_Handler-> xPortPendSVHandler
  • SysTick_Handler -> xPortSysTickHandler
選項二: 使用宏定義編譯時替換這個方式便于切換 FreeRTOS 和 Non-FreeRTOS 模式, 在 FreeRTOSConfig.h 中, 最后一個#endif之前添加以下代碼就可以了
/* Use MACRO to replace the handlers without changing startup file */#define vPortSVCHandlerSVC_Handler#define xPortPendSVHandlerPendSV_Handler#define xPortSysTickHandler SysTick_Handler

經(jīng)驗總結擴展閱讀