ThreadX操作系統在MDK中的移植方法

本文原創作者初晴,感謝大佬提供的PDF,本文經授權後整理髮布。

1. 前言

微軟於最近開源了 ThreadX 操作系統,關於這個RTOS有多牛逼,請看硬漢哥的這篇文章:

本文中使用的開發板爲小熊派IoT開發板,主控爲STM32L431RCT6:

在移植之前,請確保你的MDK版本至少是5.30,否則會失敗,可以在硬漢哥的不限速鏡像下載:

請準備一份可以正常使用printf串口輸出的裸機工程,本文中我使用cubemx生成。

ThreadX源碼請訪問開源倉庫獲取:https://github.com/azure-rtos

2. 複製ThreadX源碼

3. 添加源碼到MDK工程

新建threadX/common分組,添加threadX/common/src下的所有c文件:

新建threadX/ports分組,添加 threadX\ports\cortex_m4\gnu\src 下的8個S文件(除去tx_vector_table_sample.c):

添加頭文件路徑:

設置ASM彙編頭文件路徑:

4. 修改適配

① 修改AC6的編譯器:

② 修改tx_initialize_low_level_sample.S中的時鐘頻率和系統工作頻率:

③ 修改tx_initialize_low_level_sample.S文件,設置全局標號__RAM_segment_used_end__

④ 修改tx_initialize_low_level_sample.S文件,按Ctrl+H進行替換,將全局標號_vectors全部替換爲大寫,注意多了一個下劃線:

⑤ 屏蔽四個函數:



⑥ 去除原有stm32l4xx_it.c中的PendSV和Systick中斷服務函數:

至此,移植完成,編譯會提示有一個錯誤:

這個函數是留給用戶自己定義的,接下來會創建。

5. 編寫應用代碼

① 包含進來threadx的頭文件:

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "tx_api.h"
/* USER CODE END Includes */

② 定義兩個線程:

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
TX_THREAD my_thread1;

TX_THREAD my_thread2;


void my_thread1_entry(ULONG thread_input)
{
  /* Enter into a forever loop. */
  while(1)
  {
    printf("threadx 1 application running...\r\n");
    /* Sleep for 1 tick. */
    tx_thread_sleep(1000);
  }
}
void my_thread2_entry(ULONG thread_input)
{
  /* Enter into a forever loop. */
  while(1)
  {
    printf("threadx 2 application running...\r\n");
    /* Sleep for 1 tick. */
    tx_thread_sleep(1000);
  }
}

void tx_application_define(void *first_unused_memory)
{
  /* Create my_thread! */
  tx_thread_create(&my_thread1, "My Thread 1",
  my_thread1_entry, 0x1234, first_unused_memory, 1024, 3, 3, TX_NO_TIME_SLICE, TX_AUTO_START);
  
  tx_thread_create(&my_thread2, "My Thread 2",
  my_thread2_entry, 0x1234, first_unused_memory+1024, 1024, 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
}

③ 在main函數初始化完成之後啓動內核:

/* USER CODE BEGIN 2 */

printf("threadX RTOS on BearPi IoT Board\r\n");

/* Enter the ThreadX kernel. */
tx_kernel_enter( );

/* USER CODE END 2 */

編譯,下載,在串口終端查看結果:

趕快玩起來吧~

接收更多精彩文章及資源推送,歡迎訂閱我的微信公衆號:『mculover666』。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章