關於 Arduino Ameba 的 100 篇 - RTOS - 1 (5/100)


剛在 Ameba 的實驗版上, 做了一個給 RTOS 的通道.

( 如何安裝實驗版 - 可以參考 這篇 Windows 安裝 )

如 之前 main function 介紹, Arduino 本身是沒有 RTOS 的.

但在有網路 / wifi stack / TCPIP stack 的作業環境下, 完全沒有 OS 是不容易支援的.

因此這篇介紹一下怎麼裝上 RTOS, 我們以 ARM mbed 的 RTX 為例.

( FreeRTOS 也是類似做法 : RTK 官網 Arduino SDK 裡搭配的是 FreeRTOS.

  有關 FreeRTOS, 網路上有很多資訊, 如 成大 wiki FreeRTOS )


ARM mbed 的 RTX

在 ARM mbed 2.0, 有一套 RTX ,

https://developer.mbed.org/handbook/CMSIS-RTOS

有關 RTX, 可以參考 ARM 這篇介紹

在 ARM 買下 Keil 之前, 這是一套商業軟體.

ARM 買下後推行 mbed OS, 把這套改成了 免稅版 (royalty-free )

目前, 我把整個相關程式做成 library, 安裝後, 會在

windows  會放在 :

     C:/Users/<使用者名稱>/AppData/Local/Arduino15/packages/njiot/hardware/ameba/<版號>/system/libos


MAC OS 將來會放在 : (目前還沒改 JSON for MAC)

     /Users/<使用者名稱>/Library/Arduino15/packages/njiot/hardware/ameba/<版號>/system/libos


在這底下有個 build_gcc/ , 底下有 Makefile,  make 後, 會產生 librtos.a 在 variants/arduino_ameba/ 下



如何掛入 RTOS

我把相關程式搬到 variant.cpp 

如前一篇 main function 介紹 的向量表方式

我們可以把 _AppStart() 當作是在 Reset Handler function (重置的向量表函式) 最後呼叫, 

一般在 Arduino 如前介紹是直接呼叫到 main(), 這邊我們

(1) 先置換三個 中斷向量函式 為 RTOS 提供的函式, 

(2) 有一段 inline assembly 寫法, 

       先呼叫 RTOS 的 SystemInit(), 

       然後呼叫 toolchain libc 內的 function _start(),

     _start() 會再一路呼叫到 main()  

如下.

extern  void SVC_Handler (void);
extern  void PendSV_Handler (void);
extern  void SysTick_Handler (void);


static inline void VectorTableSettingForOS(
    void *PortSVC,
    void *PortPendSVH,
    void *PortSysTick    
)
{
    //4 Initial SVC
    NewVectorTable[11] = 
    (HAL_VECTOR_FUN)PortSVC;

    //4 Initial Pend SVC
    NewVectorTable[14] = 
    (HAL_VECTOR_FUN)PortPendSVH;

    //4 Initial System Tick fun
    NewVectorTable[15] = 
    (HAL_VECTOR_FUN)PortSysTick;    
}



// The Main App entry point
void _AppStart(void)
{
    VectorTableSettingForOS((void*)SVC_Handler,
                       (void*)PendSV_Handler,
                       (void*)SysTick_Handler);
    __asm (
        "ldr   r0, =SystemInit\n"
        "blx   r0\n"
        "ldr   r0, =_start\n"
        "bx    r0\n"
    );

}

這些會在之後篇幅逐一詳細介紹.


留言

熱門文章