Azure RTOS ThreadX on STM32 MCU

前言

目前在最新系列H5/U5/U0 /C071使用STM32CubeMX建置出USB的基底都變成USBX是以Azure RTOS ThreadX 架構去撰寫,變成如果需要使用舊的FreeRTOS會必須自己搬移code相對變得麻煩許多,但因新的Azure RTOS在結構上優化這邊就嘗試研究撰寫整理文章

簡介Azure RTOS

Azure RTOS 的核心是 ThreadX,它是一種即時內核,ThreadX 擁有多種競爭優勢,其中包括多種安全關鍵認證。Microsoft 提供Azure RTOS 也能夠最大限度地減少品質和可靠性問題,大大降低此類問題可能引發的冗長調試會話,總體上有利於 RTOS 用戶。

ST支援與架構

這邊會以主要THREADX架構往下生成

這邊留意Azure RTOS有支援USB PD但ST還未整合完全需要自己寫
USB-PD is supported by ST USBPD library and applications provided in STM32Cube MCU packages. But it is not yet integrated with STM32 Azure® RTOS MW solution.

THREADX簡介

ThreadX 是一個即時作業系統 (RTOS),專為嵌入式系統而設計

  • Common mode:包含常見的 RTOS 功能,例如執行緒管理和同步、記憶體池管理、訊息傳遞和事件處理。
  • Module mode:一種進階使用模式,允許透過模組管理器即時載入和卸載預先連結的 ThreadX 模組。
  • common: 包含所有 ThreadX API 的實現。它還提供一些實用功能,如軟件計時器、性能信息和追踪。
  • common_modules: 包含 ThreadX 模組功能的實現,允許動態加載預先鏈接的 ThreadX 模組
    • module_lib: 實現了 txm_.c API,應在編寫 ThreadX 模組時使用該 API 代替 tx_.c。
    • module_manager: 實現了放置在 ThreadX 核心之上的功能塊,以處理模組加載、卸載、運行等操作。
  • ports//: 包含內核調度器的實現,大多是用匯編語言編寫的。
  • ports_module//: 包含與模組管理器需求相適應的 ThreadX 模組相關調度器的實現。當啟用 ThreadX 模組時,這個目錄中的文件將取代 port 目錄中的文件。

ThreadX 支援表如下

ThreadX操作

從 main 呼叫 tx_kernel_enter 函數(必須包含「tx_api.h」檔案)

/* 啟動ThreadX核心 */
tx_kernel_enter ();

tx_application_define 的輸入參數是用於執行緒堆疊、佇列和記憶體池的執行時間記憶體分配的第一個可用 RAM 位址

 /* Create ThreadOne.  */
if (tx_thread_create(&ThreadOne, "Thread One", ThreadOne_Entry, 0,  
                       pointer, THREAD_ONE_STACK_SIZE, 
                       THREAD_ONE_PRIORITY, THREAD_ONE_PREEMPTION_THRESHOLD,
                       TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)
{
  status = TX_THREAD_ERROR;
}

為每個建立的執行緒定義入口函數:

void ThreadOne_Entry(ULONG thread_input)
{
  /* User can add their own implementation*/
}

Leave a Comment

Your email address will not be published. Required fields are marked *

Shopping Cart