scmRTOS下載地址: https://github.com/scmrtos/scmrtos/releases
當前版本為:scmrtos-release-v5.2.0,但我建議使用scmrtos-release-v4.0版本。
以下都是經過測試ok的源碼,為了方便移植到SWM32S或其他芯片,特此一次隨記。先思考一些問題
開發板的SWM32S雖然是M4,但它沒有FPU,DSP單元,所以完全可以當成加強版的M3來使用,好了。
scmRTOS配有STM32F103的例程,並且也玩得差不多了。於是乎就有了這些騷作。
最簡化,OS的配置文件scmRTOS_config.h
/* OS適配文件: OS配置頭文件 */ #ifndef scmRTOS_CONFIG_H #define scmRTOS_CONFIG_H #ifndef __IAR_SYSTEMS_ASM__ typedef uint16_t timeout_t; typedef uint_fast32_t tick_count_t; #endif // __IAR_SYSTEMS_ASM__ #include <stdint.h>
#define scmRTOS_PROCESS_COUNT 1
#define scmRTOS_USER_DEFINED_CRITSECT_ENABLE 0
#define scmRTOS_SYSTIMER_NEST_INTS_ENABLE 1
#define scmRTOS_SYSTEM_TICKS_ENABLE 1
#define scmRTOS_SYSTIMER_HOOK_ENABLE 0
#define scmRTOS_IDLE_HOOK_ENABLE 0
#define scmRTOS_IDLE_PROCESS_STACK_SIZE 128
#define scmRTOS_PRIORITY_ORDER 1 #define scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 0
#define scmRTOS_DEBUG_ENABLE 0 #define scmRTOS_PROCESS_RESTART_ENABLE 0 #endif // scmRTOS_CONFIG_H
最簡化,OS的main.cpp,為了加快移植進度,盡可能不加載沒使用的分支文件。
//------------------------------------------------------------------------------ #include <scmRTOS.h> #include "SWM320.h" //------------------------------------------------------------------------------ typedef OS::process<OS::pr0, 100> TProc1; // Process types TProc1 Proc1; // Process objects tick_count_t T; // global variable for OS::GetTickCount testing //------------------------------------------------------------------------------ void main() { SystemInit(); // 系統初始化為192MHZ OS::run(); } //------------------------------------------------------------------------------ template<> OS_PROCESS void TProc1::exec() { /* 一個測試 IO口 */ GPIO_Init(GPIOB, PIN12, 1, 0, 0); //背光控制 while(1) { sleep(1); // 周期1ms,測量OS的心跳時鍾 GPIO_InvBit(GPIOB, PIN12); T++; // 測試變量值 } }
要移植到任意其他芯片時,我們只要實現3大文件,
第1個是:
這文件中,是基於M3內核實現文件,_asm.s是系統啟動OS時,
第一個執行的文件,OS主要接管芯片並維護如下元素:
os_context_switch_hook;
os_start ;
PendSV_Handler;
init_system_timer;
第2個是:
swm32s_iar.icf,因為我是用的IAR。參考stm32f334r8.icf ,對芯片的內存和堆棧進行設置。
第3個是:
swm32s_iar_startup.cpp,這個主要維護一些中斷向量表,其中0-15號中斷是ARM內核通用的,與
samples\cortex\mx-iar\1-event-flag-m4f-nucleo-f334r8\src下的startup一樣,如圖所示0-15號:

這是C++的文件, 其他的外設中斷號,要與芯片對號入座就好。
最后為了兼容C++,華芯SWM32固件庫的所有.H頭文件,都要加上如下內容:

最后的最后main,cpp

無法想像,OS操作系統用C++,是如些的簡單,一個swm32s_startup_iar.cpp就直接干掉了,這三個C文件:
其實我能想像,是用C++的模板和虛函數實現的!!
燒進Swm32s開發板,引腳上測試波形:

上一張全家福:

一些文獻:
https://vimsky.com/examples/detail/cpp-ex-os-TEventFlag---class.html 代碼天空
https://m.doc88.com/p-6854560370813.html?r=1 道客巴巴
---- END ----
