一、前言
在uCOS全家桶宣布開源之后被微軟收購的ThreadX也開源了,真是喜大普奔,對于我們這些嵌入式行業(yè)從業(yè)者來說,能夠?qū)W習(xí)這些高含金量的代碼對于眼界的開拓和能力的提升都是很有幫助的。ThreadX還包含了NETX、GUIX、FILEX、USBX等豐富的組件,幾乎包含了嵌入式開發(fā)中的所有場景,這些組件和ThreadX-RTOS能夠完美的配合完成一條龍的開發(fā)。ThreadX的github地址:[Azure RTOS (github.com)]:
二、準(zhǔn)備
ThreadX在更新了幾個版本之后已經(jīng)提供了多個平臺的移植端口,包括AC5、AC6、GCC、IAR,現(xiàn)在可以更方便地移植到各編譯器平臺了。本次移植是在STM32H743 + MDK-AC6 + ThreadX6.1.2下完成。首先使用STM32CubeMX新建一個工程,配置了LED、KEY、UART,然后將下載的ThreadX放在同一工程下(移植用到common和ports/cortex_m7/ac6下的文件)。
三、配置
1、添加文件及參數(shù)
工程新增ThreadX/Port、ThreadX/Src分組,ThreadX/Portf組中添加ports/cortex_m7/ac6/src目錄下所有文件以及portscortex_m7ac6example_buildsample_threadx目錄下的tx_initialize_low_level.S文件; ThreadX/Src組中添加threadxcommonsrc下所有文件。添加完成如下圖所示:
配置工程宏定義參數(shù)和文件包含路徑如下所示。
其中USE_HAL_DRIVER和STM32H743xx是使用HAL庫創(chuàng)建工程需要包含的定義,TX_ENABLE_FPU_SUPPORT是使能ThreadX的浮點運算支持需要定義的,在readme_threadx.txt文檔中有如下描述:
If saving the context of the FPU registers
is needed, the ThreadX library should be re-built with TX_ENABLE_FPU_SUPPORT defined.
當(dāng)然要正確的使用硬件浮點運算功能還應(yīng)該開啟MDK中的如下配置:
2、修改適配文件
主要是對tx_initialize_low_level.S文件進(jìn)行修改,該文件作用是初始化棧地址和向量表、配置系統(tǒng)心跳節(jié)拍、配置部分中斷優(yōu)先級、定義部分中斷處理函數(shù)。但是其中有些工作在STM32H743的啟動文件startup_stm32h743xx.s中已經(jīng)做了,而STM32啟動文件所實現(xiàn)的一些功能這個文件又沒有實現(xiàn)。因為該文件是針對cortex_m7內(nèi)核芯片做的,沒有針對具體某一款芯片,所以沒有STM32的啟動文件實現(xiàn)的功能完善,因此不能替代啟動文件。這里的修改方法是不動STM32啟動文件,修改tx_initialize_low_level.S文件,在此提供兩種修改方案:1、根據(jù)沖突修改tx_initialize_low_level.S文件內(nèi)容;2、將tx_initialize_low_level.S文件改為C語言實現(xiàn)(STM32啟動文件已經(jīng)實現(xiàn)的不管,只需將ThreadX需要配置的功能用C實現(xiàn))。
方案1修改后內(nèi)容如下(修改處已標(biāo)注):
@/**************************************************************************/
@/* */
@/* Copyright (c) Microsoft Corporation. All rights reserved. */
@/* */
@/* This software is licensed under the Microsoft Software License */
@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
@/* and in the root directory of this software. */
@/* */
@/**************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
@/** */
@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
.global _tx_thread_system_stack_ptr
.global _tx_initialize_unused_memory
.global _tx_timer_interrupt
.global __main
.global __tx_SVCallHandler
.global __tx_PendSVHandler
.global __tx_NMIHandler @ NMI
.global __tx_BadHandler @ HardFault
.global __tx_SVCallHandler @ SVCall
.global __tx_DBGHandler @ Monitor
.global __tx_PendSVHandler @ PendSV
.global __tx_SysTickHandler @ SysTick
.global __tx_IntHandler @ Int 0
@
@
SYSTEM_CLOCK = 480000000 @---modify by user(系統(tǒng)頻率)
SYSTICK_CYCLES = ((SYSTEM_CLOCK / 1000) -1) @---modify by user(時鐘節(jié)拍)
.text 32
.align 4
.syntax unified
@/**************************************************************************/
@/* */
@/* FUNCTION RELEASE */
@/* */
@/* _tx_initialize_low_level Cortex-M7/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
@/* */
@/* This function is responsible for any low-level processor */
@/* initialization, including setting up interrupt vectors, setting */
@/* up a periodic timer interrupt source, saving the system stack */
@/* pointer for use in ISR processing later, and finding the first */
@/* available RAM memory address for tx_application_define. */
@/* */
@/* INPUT */
@/* */
@/* None */
上一篇:ThreadX——IPC應(yīng)用之事件標(biāo)志
下一篇:ESP32學(xué)習(xí)筆記(24)——OTA(空中升級)接口使用(原生API)
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉(zhuǎn)MicroPython(一) 燒入固件, 初識
- ESP32玩轉(zhuǎn)MicroPython(二) 連接WIFI網(wǎng)絡(luò) webperl文件傳輸
- ESP32玩轉(zhuǎn)MicroPython(三) 延時、計時 和GPIO操作
- 玩轉(zhuǎn) ESP32 + Arduino (一) 開發(fā)環(huán)境搭建
- 玩轉(zhuǎn) ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉(zhuǎn) ESP32 + Arduino (五) platformIO引入類庫 自開發(fā)庫 串口打印字符串
- 玩轉(zhuǎn) ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉(zhuǎn) ESP32 + Arduino (八) U8G2驅(qū)動OLED
- LT3756IMSE-1 94% 效率 30W 白光 LED 前照燈驅(qū)動器的典型應(yīng)用電路
- 信號失真度測量儀
- 禁用看門狗的 LTC2938CDE 四電源監(jiān)視器的典型應(yīng)用電路
- 定時控制器
- 具有 400kHz 外部同步降壓轉(zhuǎn)換器的 LTC3646HDE 12V 至 1.8V 輸出的典型應(yīng)用電路
- LT6654AHLS8-2.5 擴(kuò)展電源范圍電壓基準(zhǔn)的典型應(yīng)用
- MIC2026A-1YM雙通道熱插拔配電開關(guān)典型應(yīng)用
- ASM1153_TYPEC_半高2.5寸SATA硬盤盒
- 使用 LTC3639HMSE 低輸出電壓紋波 100mA 穩(wěn)壓器和 75ms 軟啟動的典型應(yīng)用
- EVAL-AD9832SDZ,用于評估 AD9832 45 mW 功率、3V 至 5V、25 MHz 可編程波形發(fā)生器的評估板
- 超快充技術(shù)平權(quán)時代,要來了
- 智元機(jī)器人與Physical Intelligence(Pi)達(dá)成戰(zhàn)略合作
- 不到10萬塊!特斯拉再次面臨生死狙擊?
- 高階智駕NOA功能解析:技術(shù)架構(gòu)與實現(xiàn)路徑
- 智能體爆發(fā)元年,誰在“無人區(qū)”繪制地形圖?
- 億緯鋰能大圓柱電池進(jìn)展:良率突破97%
- 500Wh/kg電池競速:鋰金屬電池挑戰(zhàn)全固態(tài)共識?(下)
- 500Wh/kg電池競速:鋰金屬電池挑戰(zhàn)全固態(tài)共識?(上)
- 密歇根大學(xué)突破:低溫充電速度提升500%
- 谷歌發(fā)布Android Auto 14.0更新,界面優(yōu)化并準(zhǔn)備車機(jī)版Gemini AI
- 為何矢量網(wǎng)絡(luò)分析儀喊話:多端口測試,是時候放棄開關(guān)矩陣了
- 等你報名做客黑科技直播間:基于 TI DLP®技術(shù)的工業(yè)創(chuàng)新應(yīng)用介紹
- 先到先得雙重有禮 成為體驗FLUKE新品的先鋒者
- 【有獎問答】術(shù)業(yè)有專攻,電容我在行!
- 借助 TI 工業(yè)應(yīng)用參考設(shè)計,加快產(chǎn)品上市時間
- 最后一天!Beetle ESP32-C3免費測評,趕緊上車
- 有獎活動|下載資料、預(yù)約視頻 泰克 HDMI 2.1 測試方案
- Fluke 總有一款適合你需求的紅外熱像儀!參與贏好禮
- 【直播已結(jié)束】一起深挖 TI 新發(fā)布的 Robotics SDK,看干貨直播贏好禮!
- TI通過集成有源濾波器降低DC/DC轉(zhuǎn)換器的EMI
- 索尼造車“黑科技”
- 以創(chuàng)新技術(shù)走向應(yīng)用,思特威推出基于DSI-2技術(shù)首創(chuàng)圖像傳感器新品SC233A與SC223A
- 比亞迪將全面搭載刀片電池,并準(zhǔn)備全行業(yè)外供
- SIA敦促美國政府采取行動,以加強(qiáng)美國的半導(dǎo)體供應(yīng)鏈
- 打造機(jī)器人配送站技術(shù)終于落地 但仍要解決好這幾個問題
- EPFL聯(lián)手蘇黎世聯(lián)邦理工學(xué)院 開發(fā)出一種微型柔性機(jī)器人
- 在未來藥物可以通過微小的、可變形的機(jī)器人來輸送
- 中國機(jī)器人密度世界排名23位 在全球成長速度最快
- 碧桂園進(jìn)軍機(jī)器人產(chǎn)業(yè)的決心非常大 計劃五年內(nèi)在機(jī)器人領(lǐng)域投入800億