在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

移植RT-Thread的原理與方法

RTThread物聯網操作系統 ? 來源:驚覺嵌入式 ? 作者:驚覺 ? 2021-09-17 09:41 ? 次閱讀

大家好我是驚覺。是的,失蹤人口回來了。最近參加了rt-thread的國產MCU移植活動,移植rt-thread到華大的HC32L196。rtt論壇中已有許多介紹移植到各種平臺的文章,詳細講述移植步驟,在rtt論壇搜索“國產MCU移植”即可閱讀。本文不介紹具體移植步驟,而是如往常一樣,分享移植的原理與方法。

移植原理

移植一款軟件,無非是獲取源碼,修改其中與硬件相關的代碼以適配目標硬件。移植rt-thread也是如此,首要任務是要明確要修改哪部分內容。帶著這個問題,我們來分析rt-thread的源碼結構。

rt-thread源碼結構

rt-thread源碼根目錄結構如下:

目錄說明

bsp板級支持包。存放各種硬件平臺的驅動代碼,初始化代碼,工程文件。

components組件。如finsh控制臺,抽象層驅動,文件系統,網絡系統。

examples示例程序

include內核以及libc的頭文件

libcpu與CPU架構相關的接口,為操作系統調度提供支持。

src內核代碼,如線程、定時器、線程間通信(互斥鎖,信號量)。

移植所涉及的目錄有兩個:bsp和libcpu,相應的移植分為BSP移植與CPU架構移植。其他的目錄與具體的CPU無關,無須改動。

CPU架構移植

嵌入式領域有多種不同 CPU 架構,例如 Cortex-M、ARM920T、MIPS32、RISC-V 等等。為了使 RT-Thread 能夠在不同 CPU 架構的芯片上運行,RT-Thread 提供了一個 libcpu 抽象層來適配不同的 CPU 架構。向下提供了一套統一的 CPU 架構移植接口,這部分接口包含了全局中斷開關函數、線程上下文切換函數、時鐘節拍的配置和中斷函數、Cache 等等內容。下表是 CPU 架構移植需要實現的接口和變量。

函數和變量描述

rt_base_t rt_hw_interrupt_disable(void);關閉全局中斷

void rt_hw_interrupt_enable(rt_base_t level);打開全局中斷

rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *stack_addr, void *texit);線程棧的初始化,內核在線程創建和線程初始化里面會調用這個函數

void rt_hw_context_switch_to(rt_uint32 to);沒有來源線程的上下文切換,在調度器啟動第一個線程的時候調用,以及在 signal 里面會調用

void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);從 from 線程切換到 to 線程,用于線程和線程之間的切換

void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to);從 from 線程切換到 to 線程,用于中斷里面進行切換的時候使用

rt_uint32_t rt_thread_switch_interrupt_flag;表示需要在中斷里進行切換的標志

rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread;在線程進行上下文切換時候,用來保存 from 和 to 線程

是不是看起來挺復雜的,其實rtt已經支持了非常多的CPU架構。下圖的libcpu目錄中已支持多種CPU架構。讓我們看看對arm系列的支持情況,從低端的cortex-m0到高端的cortex-m7,甚至還有cortex-a和cortex-r系列的。大家熟知的stm32f103為cortex-m3內核,stm32f407為cortex-m4內核。如果要移植到的目錄芯片內核出現在此目錄之中,那就無需關注libcpu,只要在配置文件中指定正確的內核即可。

我移植的HC32L196使用cortex-m0+內核,可使用cortex-m0的代碼,因此無須進行CPU構架移植。

bsp結構

由于不需要進行CPU架構移植,所以本次移植相對簡單,唯一的工作就是在rt-thread的bsp目錄中創建自己硬件的bsp。

rt-thread當前支持了100多個bsp,可能大家用的最多的是stm32。不過我并不建議大家在移植時參考stm32,因為它是最復雜的一個bsp。早期rt-thread中關于stm32的bsp比較簡單,各種型號如stm32f10x, stm32f40x都是獨立的bsp。新手入門相對簡單。不過弊病也很明顯:隨著支持的stm32系列的增加,bsp的子目錄也就急劇增加,維護成本很高。可能得益于stm32的HAL庫,可以相對較低的投入將它們合為一個bsp。它們共用一份驅動代碼,其在HAL_Drivers中。可能以后國產MCU的bsp也會發展成這樣,不過對于移植新手,最好是先易后難。我移植的HC32L196是華大單片機,以已經被rtt支持的hc32f4a0為模板進行移植。同時參考了swm320,以及stm32stm32l053-st-nucleo。

大多數bsp目錄結構:

目錄說明

applications用戶代碼。純凈的bsp中只需要一個main.c文件,里面定義main函數。

board板級驅動代碼(最主要的是board.c),鏈接腳本(gcc, keil, iar)。

drivers設備驅動代碼,比如gpio和uart驅動。

figures電路板照片。

Libraries芯片廠商驅動庫。

.config, rtconfig.h, KconfigKconfig配置系統相關文件

rtconfig.py, SConscript, SConstructscons構建系統相關文件

template.uvprojx, template.uvoptxkeil模板工程

project.uvprojx, project.uvoptxkeil工程

template.eww, template.ewpiar模板工程

project.eww, project.ewpiar工程

可分為如下幾類:

代碼文件:applications, board, drivers, Libraries中的.h和.c

Kconfig配置系統相關文件

scons構建系統相關文件

工程模板

代碼結構

先來看看我移植后的keil工程,其打開的幾個目錄就是涉及移植的代碼目錄。applications目錄最為簡單。drivers目錄是移植的重點,不過它不是移植的首要任務。下面幾節介紹移植前最迫切需要搞清楚的內容。

Kconfig

rtt支持通過menuconfig命令來配置內核、組件及軟件包。執行menuconfig命令時,其從Kconfig文件中解析菜單結構,由用戶勾選、配置各個選項,最終將配置結果寫入.config和rtconfig.h。bsp中通常有兩個Kconfig文件。一個位于根目錄,另一個位于board。根目錄中的Kconfig僅僅是導入了別的目錄的Kconfig,所有bsp的基本都一樣,無須修改。

mainmenu “RT-Thread Project Configuration”

config BSP_DIR

string

option env=“BSP_ROOT”

default “。”

config RTT_DIR

string

option env=“RTT_ROOT”

default “。./。.”

config PKGS_DIR

string

option env=“PKGS_ROOT”

default “packages”

source “$RTT_DIR/Kconfig”

source “$PKGS_DIR/Kconfig”

source “board/Kconfig”

board/Kconfig

menu “Hardware Drivers Config”

config MCU_HC32L196

bool

select ARCH_ARM_CORTEX_M0

select RT_USING_COMPONENTS_INIT

select RT_USING_USER_MAIN

default y

menu “Onboard Peripheral Drivers”

endmenu

menu “On-chip Peripheral Drivers”

config BSP_USING_GPIO

bool “Enable GPIO”

select RT_USING_PIN

default y

menuconfig BSP_USING_UART

bool “Enable UART”

default y

select RT_USING_SERIAL

if BSP_USING_UART

config BSP_USING_UART0

bool “Enable UART0”

default y

config BSP_USING_UART1

bool “Enable UART1”

default n

endif

endmenu

menu “Board extended module Drivers”

endmenu

endmenu

其自動選擇了幾個必選的配置,比如RT_USING_USER_MAIN。另,定義了可配置的驅動選項,比如GPIO配置和串口配置。

上述文件對應的串口配置菜單如下:rtt官方文檔中有對Kconfig進行詳細講解:https://www.rt-thread.org/document/site/#/development-tools/kconfig/kconfig

scons和工程模板文件

rt-thread使用scons作為構建系統,其用于編譯源碼,生成固件。不過呢,大家用的最多的,可能是用它生成keil工程,就是在使用menuconfig配置內核、組件和驅動之后,使用如下命令生成keil工程:

scons --target=mdk5

其原理,以生成keil5工程為例,是scons根據rtconfig.h文件中的配置,在template.uvprojx上添加宏定義、頭文件路徑配置、文件鏈接,從而生成project.uvprojx。下圖左側為模板工程,右側為生成的rtt工程。再多說一句,rtt是如何能夠讀寫keil工程文件呢?.uvprojx其實是xml文件,rtt通過模板工程創建新工程,就是在讀寫xml,有興趣的話,可以閱讀rt-thread源碼根目錄下的tools/keil.py。

rtconfig.h是在Kconfig系統中生成,只要修改好Kconfig相關文件后,無須操心rtconfig.h。要修改的是模板工程。不過也很簡單,從其他bsp復制模板工程,修改設備類型,RAM和ROM配置就可以了。其他的配置,如下載接口等,可根據需要修改。稍復雜些的任務是修改下面三種文件:

SConstruct

rtconfig.py

SConscript

這三個文件都是python腳本,只不過它們里面調用了許多scons系統提供的函數。所以,如果熟悉python的話,修改起來會很輕松。

SConstruct

SConstruct是scons的入口腳本,其通過rtconfig.py以導入各種編譯配置,之后調用PrepareBuilding以獲取編譯對象(要編譯哪些文件)。PrepareBuilding會調用各SConscript腳本以獲取編譯對象。這文件一般不用修改,除非參考的bsp有瑕疵。

rtconfig.py

rtconfig.py中定義了各種與編譯相關的選項和參數。

頭部定義CPU架構與型號,還記得文首提到的架構移植嗎?對于rtt已支持的CPU架構,只需要在這里指明即可,scons系統會根據這里的配置選擇相應的架構代碼以進行編譯鏈接。

ARCH=‘arm’

CPU=‘cortex-m0’

其他主要的是編譯參數,比如armcc編譯系列如下。

elif PLATFORM == ‘armcc’:

# toolchains

CC = ‘armcc’

CXX = ‘armcc’

AS = ‘armasm’

AR = ‘armar’

LINK = ‘armlink’

TARGET_EXT = ‘axf’

DEVICE = ‘ --cpu Cortex-M0 ’

CFLAGS = ‘-c ’ + DEVICE + ‘ --apcs=interwork --c99’

AFLAGS = DEVICE + ‘ --apcs=interwork ’

LFLAGS = DEVICE + ‘ --scatter “boardlinker_scriptslink.sct” --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict’

CFLAGS += ‘ -I’ + EXEC_PATH + ‘/ARM/ARMCC/include’

LFLAGS += ‘ --libpath=’ + EXEC_PATH + ‘/ARM/ARMCC/lib’

CFLAGS += ‘ -D__MICROLIB ’

AFLAGS += ‘ --pd “__MICROLIB SETA 1” ’

LFLAGS += ‘ --library_type=microlib ’

EXEC_PATH += ‘/ARM/ARMCC/bin/’

if BUILD == ‘debug’:

CFLAGS += ‘ -g -O0’

AFLAGS += ‘ -g’

else:

CFLAGS += ‘ -O2’

CXXFLAGS = CFLAGS

POST_ACTION = ‘fromelf --bin $TARGET --output rtthread.bin

fromelf -z $TARGET’

這塊與生成keil工程無關,而是在命令行下編譯源碼并生成固件。可能大家平時不會這么編譯,都是用Keil。其實這種方法意義重大,其是持續集成的基礎。

適配起來很也簡單,直接把相同CPU的配置復制過來即可。我移植HC32L196,雖然主要參考HC32F4A0,然而HC32F4A0的構架是cortex-m4,顯然不適合。所以在適配rtconfig.py時,我從stm32stm32l053-st-nucleo獲取cortex-m0的配置。

SConscript

SConscript存在于各源碼目錄下,用于決定編譯哪些文件。這些要編譯的文件也會在創建keil工程中時被包含進去。c17aaa80-169e-11ec-8fb8-12bb97331649.pngbsp根目錄下的SConscript用于掃描出子目錄中的SConscript并調用之,一般不用修改。

子目錄下的SConscript大致分為兩種:

將指定文件包含到編譯目標之中,或者使用Glob(‘*.c’)包含所有的C文件。

根據rtconfig.h中的配置來包含被選中的文件。

application中的為第1種,drivers為第2種。修改時依葫蘆畫瓢即可。

更多細節,可參閱:https://www.rt-thread.org/document/site/#/development-tools/scons/scons

board

終于進入代碼講解環節。board目錄中通常會有一個board.c。

void rt_hw_board_clock_init(void)

{

}

void SysTick_Configuration(void)

{

}

void SysTick_Handler(void)

{

/* enter interrupt */

rt_interrupt_enter();

rt_tick_increase();

/* leave interrupt */

rt_interrupt_leave();

}

void rt_hw_board_init()

{

/* Configure the System clock */

rt_hw_board_clock_init();

/* Configure the SysTick */

SysTick_Configuration();

#ifdef RT_USING_HEAP

rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);

#endif#ifdef RT_USING_COMPONENTS_INIT

rt_components_board_init();

#endif#ifdef RT_USING_CONSOLE

rt_console_set_device(RT_CONSOLE_DEVICE_NAME);

#endif

}

其做了如下事情:

初始化時鐘

配置SysTick定時器

初始化rtt堆內存模塊

初始化板級驅動,如gpio和uart

設計控制臺串口

所有bsp的board.c都差不多,上面代碼中rt_hw_board_clock_init和SysTick_Configuration空著,這就是移植時需要修改的代碼。其他部分,一般不用修改。

另,配置堆內存時用到的宏定義在board.h之中,需要根據硬件做修改。

#define SRAM_BASE 0x20000000#define SRAM_SIZE 0x8000#define SRAM_END (SRAM_BASE + SRAM_SIZE)

boardlinker_scripts目錄中存放鏈接腳本,需要修改其中有關RAM和ROM的配置。

link.sct:keil鏈接腳本

link.lds:gcc鏈接腳本

沒做iar支持,因為我不用iar,也沒裝iar:)

Libraries

Libraries存放芯片廠商提供的驅動代碼。我移植的HC32L196基本結構如下:

HC32L196_StdPeriph_Driver:分inc和src,存放芯片驅動,如hc32l196_adc.h和hc32l196_adc.c。

CMSISInclude:存放CMSIS相關頭文件,如core_cm0.h

CMSISDeviceHDSCHC32L196Include:雜類驅動頭文件。

CMSISDeviceHDSCHC32L196Source:雜類驅動源文件,比如system_hc32l19x.c,其內包含匯編啟動文件會調用的SystemInit函數。

CMSISDeviceHDSCHC32L196SourceARM:keil匯編啟動文件startup_hc32l19x.s

CMSISDeviceHDSCHC32L196SourceGCC:gcc匯編啟動文件startup_hc32l19x.s

CMSISDeviceHDSCHC32L196SourceIAR:iar匯編啟動文件startup_hc32l19x.s

SConscript:包含本目錄中的代碼文件。在包含匯編啟動文件時,根據rtconfig.CROSS_TOOL來包含相應編譯平臺的文件。

上述這些文件,除了SConscript,都來自芯片廠商的SDK,只不過其文件分布可能與上述不同。視具體情況做調整即可。

匯編啟動文件

關于Libraries中的匯編啟動文件,需要補充說明一點。對于keil版本,一般無須修改。對于gcc版本,需要把跳轉main函數的語句修改為跳轉entry函數。

stm32的啟動文件,其調用的是main函數。需要改為:

bl entry

之所以有如此差異,是因為armcc(keil編譯器)與gcc的機制不同。

armcc

armcc的匯編啟動文件相對簡單,職責如下:

定義堆空間和棧空間,初始化棧指針

定義中斷向量表

定義入口函數Reset_Handler,其先調用SystemInit,之后調用__main

初始化全局變量等工作放在了__main之中,__main完成初始化操作后會調用main函數。不過呢,armcc提供了一種函數補丁機制。如果定義了$Sub$$main函數的話,在main函數調用之前,會先調用$Sub$$main。rt-thread就是通過定義$Sub$$main函數,在其中進行操作系統的初始化,之后調用applications中的main函數以執行用戶代碼。

gcc

gcc匯編啟動文件職責如下:

定義中斷向量表

定義入口函數Reset_Handler,其負責初始化全局變量(data和bss),調用SystemInit,調用main函數

由于gcc沒有armcc那樣的函數補丁機制,所以要運行rt-thread的話,需要將調用main函數改為調用rt-thread入口函數,即entry。

rt-thread根據編譯平臺定義了不同的入口函數,armcc對應$Sub$$main,gcc對應entry。

#ifdef __ARMCC_VERSIONextern int $Super$$main(void);

/* re-define main function */int $Sub$$main(void)

{

rtthread_startup();

return 0;

}

#elif defined(__ICCARM__)extern int main(void);

/* __low_level_init will auto called by IAR cstartup */extern void __iar_data_init3(void);

int __low_level_init(void)

{

// call IAR table copy function.

__iar_data_init3();

rtthread_startup();

return 0;

}

#elif defined(__GNUC__)/* Add -eentry to arm-none-eabi-gcc argument */int entry(void)

{

rtthread_startup();

return 0;

}

#endif

移植到HC32L196

如前所說,我不打算詳細講解每一步操作,僅提一些要點。

移植步驟

可分為兩步:

創建可以運行的bsp,這是最關鍵的一步。

填充rtt設備驅動,如gpio和uart,這是相對費時的一步。

之所以分為兩大步,是因為先完成關鍵的一步,運行成功,將給予移植者一個很大的激勵,提高信心。如果第一步失敗了,也好及時查找問題,而不是等經歷了漫長的設備驅動移植后,在測試時發現rt-thread系統都還無法跑起來。

創建可以運行的bsp

所謂可以運行,是指可以讓rt-thread操作系統在芯片上跑起來,并不需要跑finsh控制臺,甚至不需要點亮LED燈,不需要任何外設驅動,能運行如下代碼就行。

main.c

int main(void)

{

for (uint32_t i = 0; ; i++)

{

rt_thread_delay(RT_TICK_PER_SECOND);

};

}

當然啦,沒有任何外設驅動的話,只能在調試模式下運行才能觀察效果。只要rt_thread_delay的功能正常,就說明rt-thread調度系統正常工作了。

在了解了移植原理后,創建可以運行的bsp應該能較快完成,具體步驟如下:

復制一個bsp,將名稱改為自己的平臺。

使用芯片原廠提供的SDK替換Libraries目錄中的內容。對其中的匯編啟動文件和鏈接腳本要稍加關注,尤其是gcc匯編。

修改board目錄源碼,主要是board.c,完成初始化時鐘和SysTick的工作。

刪除drivers中的文件,或者保留幾個驅動文件的框架,刪除硬件相關代碼。

修改模板工程。

修改Kconfig相關文件。

修改Scons相關文件。

使用menuconfig更新rtconfig.h文件。

使用scons生成rt-thread工程。10.編譯燒錄調度。

RT-Thread Studio

創建可以運行的bsp之后,之后就是開發驅動程序了。此時其實是可以使用RT-Thread Studio開發的,其有一個非常好用的功能:導入Keil或者IAR項目到工作空間中。我在之后的驅動開發環節一直使用RT-Thread Studio編寫代碼。

gpio映射表

struct rt_pin_ops

{

void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_base_t mode);

void (*pin_write)(struct rt_device *device, rt_base_t pin, rt_base_t value);

int (*pin_read)(struct rt_device *device, rt_base_t pin);

rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_int32_t pin,

rt_uint32_t mode, void (*hdr)(void *args), void *args);

rt_err_t (*pin_detach_irq)(struct rt_device *device, rt_int32_t pin);

rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin, rt_uint32_t enabled);

rt_base_t (*pin_get)(const char *name);

};

rt-thread gpio設備驅動接口使用引腳號(pin)來操作指定的引腳。早期的bsp會定義一個大數組來存儲引腳列表,下圖是swm320定義的列表。c1e24b68-169e-11ec-8fb8-12bb97331649.png這種方式比較繁瑣。通常芯片的GPIO口有一定的規律,比如PA0-PA15,PB0-PB15,PC0-PC15,等等。這些GPIO對應的寄存器的地址是連續的,可以通過一個公式將寄存器地址轉換為引腳序號,反之亦然。

因此出現了使用GET_PIN宏來計算指定GPIO引腳序號的方法,比如GET_PIN(A, 5)會計算出PA5引腳的序號。可能stm32 bsp最先使用這種方法,大家移植的時候可以參考一下。

支持gcc

支持編譯

HC32L196的原廠SDK中并不支持gcc。不過筆者是eclipse系列IDE的忠實用戶,既然原廠不支持,那我就自己支持吧。

首先,要創建匯編啟動文件:LibrariesCMSISDeviceHDSCHC32L196SourceGCCstartup_hc32l19x.s。

怎么創建呢,當然不需要從零開始啦。從其他cortex-m0的bsp中復制一個來修改。比如stm32的,

bspstm32librariesSTM32L0xx_HALCMSISDeviceSTSTM32L0xxSourceTemplatesgccstartup_stm32l053xx.s

修改中斷向量表和中斷函數即可。c1ef7e64-169e-11ec-8fb8-12bb97331649.png

另外要關注下rtconfig.py和boardlinker_scriptslink.lds,同樣可以參考cortex-m0的bsp。

支持燒錄

添加了對gcc的支持后,使用RT-Thread Studio創建開發板支持包,就可以真正使用RT-Thread Studio來開發項目了。不過在這之前,需要先編譯出固件并燒錄驗證。

使用scons命令編譯。c1fb2886-169e-11ec-8fb8-12bb97331649.png編譯后的固件位于bsp根目錄:c206673c-169e-11ec-8fb8-12bb97331649.png

可使用J-Flash燒錄:c20f72f0-169e-11ec-8fb8-12bb97331649.png成功運行:c231da8e-169e-11ec-8fb8-12bb97331649.png大家在使用J-Flash創建工程時,可能發現找不到自己的硬件配置。如下圖,HC32系列只有我移植的HC32L196,而沒有HC32F4A0等,這是我自己添加進去的。怎么添加呢,可參考我之前的一篇文章:RT-Thread Studio燒寫國產mcu(swm320)固件的方法。c254a500-169e-11ec-8fb8-12bb97331649.png

后記

本次移植過程相當漫長,不是因為移植任務本身艱難,而是我只能用碎片化的時間進行移植。有幾天我九點半準備下班回家移植,老板覺得走的太早,硬是拖到十點,這些天就沒有早于十一點到家的。大家說這樣的老板是不是很可惡?表示贊同的,支持下筆者,點個再看唄:)。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    459

    文章

    51925

    瀏覽量

    433560
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17718

    瀏覽量

    358045
  • RTThread
    +關注

    關注

    8

    文章

    132

    瀏覽量

    41436

原文標題:移植RT-Thread到國產芯片HC32L196,原理與方法詳解!

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    如何將RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默認支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發表于 02-13 10:37 ?1571次閱讀
    如何將<b class='flag-5'>RT-Thread</b><b class='flag-5'>移植</b>到NXP MCUXPressoIDE上

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來
    的頭像 發表于 11-13 01:03 ?1768次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    開源共生 商業共贏 | RT-Thread 2024開發者大會報名啟動!

    親愛的RT-Thread開發者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發者大會)正式啟動報名!2024RT-Threa
    的頭像 發表于 10-29 08:06 ?798次閱讀
    開源共生 商業共贏 | <b class='flag-5'>RT-Thread</b> 2024開發者大會報名啟動!

    Nordic-RT-Thread5.1.0移植筆記

    Nordic-RT-Thread5.1.0移植筆記
    的頭像 發表于 10-16 08:09 ?992次閱讀
    Nordic-<b class='flag-5'>RT-Thread</b>5.1.0<b class='flag-5'>移植</b>筆記

    如何在RT-thread studio的裸機例程上移植freertos?

    如何在RT-thread studio的裸機例程上移植freertos
    發表于 09-13 06:32

    【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區成員們:2024年RT-Thread全球開發者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳
    的頭像 發表于 09-01 08:02 ?2774次閱讀
    【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

    親愛的RT-Thread社區成員們:我們非常高興地宣布,2024年RT-Thread全球開發者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳機會。
    的頭像 發表于 08-07 08:35 ?2118次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

    【好書推薦】RT-Thread設備驅動開發指南

    近年來國內芯片產業和物聯網產業的快速崛起,行業發展迫切需要更多人才,尤其需要掌握嵌入式操作系統等底層技術的人才。隨著RT-Thread被更廣泛地應用于行業中,開發者對嵌入式驅動開發的需求越來越
    的頭像 發表于 08-01 08:35 ?1051次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備驅動開發指南

    RT-Thread 新里程碑達成——GitHub Star 破萬!

    RT-Thread實時操作系統開源項目在GitHub上的star數量突破一萬!截止發文,RT-Thread作為實時操作系統在業界Star數量排名第一!倉庫地址:https://github.com
    的頭像 發表于 07-04 08:35 ?645次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!

    基于 RT-Thread專業版的EtherCAT主站方案

    (一)方案介紹本方案基于RT-Thread專業版,在RT-Thread端集成EtherCAT主站協議,通過EtherCAT對伺服電機或遠程IO進行實時控制,具備傳輸速度快,實時性高,擴展設備靈活等
    的頭像 發表于 06-19 08:35 ?1528次閱讀
    基于 <b class='flag-5'>RT-Thread</b>專業版的EtherCAT主站方案

    使用RT-Thread的scons構建系統來編譯ESP32C3固件?

    /build_system/wrappers2. esp-idf/examples/custom_bootloader/bootloader_override 這兩個例程那個比較適合用來參考移植RT-Thread scons 構建系統上呢?或者有人能給點其他的指導嘛,
    發表于 06-07 06:18

    6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 05-28 08:35 ?585次閱讀
    6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    2024 RT-Thread 全球技術大會演講議程發布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術大會)致力于圍繞RT-Thread基礎軟件技術發展、實踐創新、開發者能力
    的頭像 發表于 05-16 08:34 ?785次閱讀
    2024 <b class='flag-5'>RT-Thread</b> 全球技術大會演講議程發布!

    新書發布——《實時操作系統應用技術:RT-Thread與ARM編程實踐》

    RT-Thread又一本新書《實時操作系統應用技術——基于RT-Thread與ARM的編程實踐》發布,標志著RT-Thread生態和實時操作系統技術教育領域又迎來了一個重要里程碑。本書是暢銷書作者
    的頭像 發表于 05-11 08:35 ?1088次閱讀
    新書發布——《實時操作系統應用技術:<b class='flag-5'>RT-Thread</b>與ARM編程實踐》

    5月16日南京站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    5月16日下午我們將在南京舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 05-01 08:35 ?500次閱讀
    5月16日南京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!
    主站蜘蛛池模板: 国产三级精品播放 | 婷婷四房综合激情五月性色 | 看全色黄大色大片免费久久怂 | 精品久久久久久久免费加勒比 | 久久狠狠第一麻豆婷婷天天 | 国产成人综合日韩精品婷婷九月 | 看全黄大片狐狸视频在线观看 | 综合久久99| 国产乱码免费卡1卡二卡3卡四 | 黄色网址有那些 | 亚洲国产精品婷婷久久 | 九九九精品午夜在线观看 | 四虎最新网址入口 | 韩彩英三级无删版甜性涩爱 | 日本高清高色 | 男人天堂网在线 | 好大好硬好深好爽想要免费视频 | 国产精品五月天 | 伊人网站在线 | 男人和女人在床做黄的网站 | 日本黄色一区 | 精品无码中出一区二区 | 亚洲精品美女久久久 | 五月婷综合 | 一级午夜免费视频 | 亚洲香蕉影院 | 韩国a级床戏大尺度在线观看 | 亚洲成在人线中文字幕 | 欧美国产黄色 | 亚洲第一伊人 | 婷婷六月久久综合丁香一二 | 99久久精品99999久久 | 男男np主受高h啪啪肉 | 免费的男女拍拍拍的视频 | 四虎影音在线观看 | 在线观看高清视频 | 日韩一级在线 | 狠狠色丁香久久婷婷综 | 国产免费久久精品 | 男人和女人做a免费视频 | 在线观看你懂的网址 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品