0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

RT-Thread中的Github Actions

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:未知 ? 2023-06-01 03:10 ? 次閱讀

RT-Thread中一共有五個Github Action(rt-thread/.github/workflow)

分別是:

  • RT-Thread BSP build check(.github/workflows/action.yml)

  • ToolsCI(.github/workflows/action_tools.yml)

  • AutoTestCI(.github/workflows/action_utest.yml)

  • Check File Format and License(.github/workflows/file_check.yml)

  • Static code analysis(.github/workflows/static_code_analysis.yml)

下面分別講解這五個Github Action。

RT-Thread BSP build check

總的來說,這個Action會通過matrix嘗試編譯多個BSP,并記錄編譯成功和失敗的信息。執(zhí)行腳本中的每個BSP編譯步驟都在日志中創(chuàng)建了一個分組,以便在編譯成功或失敗時可以更好地顯示和記錄相關(guān)信息。

matrix列表中每個元素有三個屬性,分別是

  • RTT_BSP:這組BSP的名字,后續(xù)輸出日志時會用到

  • RTT_TOOL_CHAIN:編譯這組BSP使用的工具鏈

  • SUB_RTT_BSP:各個BSP的目錄

RT-Thread BSP build check的第一步:

  • 首先先安裝gcc和menuconfig依賴的包

  • 調(diào)用tools目錄下的menuconfig的touch_env

  • 這個函數(shù)主要是創(chuàng)建一系列后續(xù)會使用到的文件夾,并且拉取遠程的packages

  • 以及修改Kconfig

  • 設(shè)置一些RT-Thread自己的環(huán)境遍歷,供后續(xù)使用

 1name:InstallTools
 2shell:bash
 3run:|
 4sudoapt-getupdate
 5sudoapt-get-qqinstallgcc-multiliblibncurses5libncurses5-devlibncursesw5-devscons
 6sudopython-mpipinstall--upgradepip-qq
 7pipinstallrequests-qq
 8gitconfig--globalhttp.postBuffer524288000
 9python-c"importtools.menuconfig;tools.menuconfig.touch_env()"
10echo"RTT_ROOT=${{github.workspace}}">>$GITHUB_ENV
11echo"RTT_CC=gcc">>$GITHUB_ENV

RT-Thread BSP build check的第二步:

  • 會根據(jù)matrix.legs.RTT_TOOL_CHAIN判斷需要安裝什么工具鏈

RT-Thread BSP build check的第三步:

第三步是這次BSP編譯測試的核心

  • 首先會遍歷所有的SUB_RTT_BSP

  • 根據(jù)scons命令執(zhí)行的成功與否(||前一個命令執(zhí)行失敗、&&前一個命令執(zhí)行成功)來判斷執(zhí)行成功還是失敗的邏輯

  • 輸出的時候會在GitHub Actions日志中創(chuàng)建一個分組,用于顯示BSP編譯的信息

  • 計算總共花費的時間,輸出BSP編譯成功或者失敗的信息,輸出至$GITHUB_STEP_SUMMARY

 1name:BspSconsCompile
 2if:${{success()}}
 3shell:bash
 4env:
 5RTT_BSP:${{matrix.legs.RTT_BSP}}
 6RTT_TOOL_CHAIN:${{matrix.legs.RTT_TOOL_CHAIN}}
 7SRTT_BSP:${{join(matrix.legs.SUB_RTT_BSP,',')}}
 8run:|
 9source~/.env/env.sh
10failed=0
11count=0
12forbspin$(echo$SRTT_BSP|tr',''
');do
13count=$((count+1))
14echo"::CompilingBSP:==$count===$bsp===="
15echobsp/$bsp
16pushdbsp/$bsp&&pkgs--update&&popd
17scons-Cbsp/$bsp-j$(nproc)--debug=time|teeoutput.log||
18{total_time=$(grep"Totalcommandexecutiontime"output.log|awk'{print$5}');
19failed=$((failed+1));echo"::";echo"::build$bspfailed";
20echo"-build$bspfailedin$total_timeseconds">>$GITHUB_STEP_SUMMARY;}&&
21{total_time=$(grep"Totalcommandexecutiontime"output.log|awk'{print$5}');
22echo"-build$bspsuccessin$total_timeseconds">>$GITHUB_STEP_SUMMARY;echo"::";}
23done
24exit$failed
ToolsCI

總的來說,ToolsCI這個Action比較簡單,會去嘗試Build一個BSP、生成其它工程文件等等,用來測試使用。

關(guān)于scons一些參數(shù)的使用可以參考:SCons (rt-thread.org)

 1name:ToolsCI
 2#Controlswhentheactionwillrun.Triggerstheworkflowonpushorpullrequest
 3#eventsbutonlyforthemasterbranch
 4on:
 5#Runsat16:00UTC(BeiJing00:00)onthe1stofeverymonth
 6schedule:
 7-cron:'0161**'
 8push:
 9branches:
10-master
11paths-ignore:
12-documentation/**
13-'**/README.md'
14-'**/README_zh.md'
15-'**/*.c'
16-'**/*.h'
17-'**/*.cpp'
18pull_request:
19branches:
20-master
21paths-ignore:
22-documentation/**
23-'**/README.md'
24-'**/README_zh.md'
25-'**/*.c'
26-'**/*.h'
27-'**/*.cpp'
28permissions:
29contents:read#tofetchcode(actions/checkout)
30jobs:
31test:
32runs-on:ubuntu-latest
33name:Tools
34strategy:
35fail-fast:false
36env:
37TEST_BSP_ROOT:bsp/stm32/stm32f407-atk-explorer
38steps:
39-uses:actions/checkout@v3
40-name:InstallTools
41shell:bash
42run:|
43sudoapt-getupdate
44sudoapt-get-yqqinstallscons
45-name:InstallArmToolChains
46if:${{success()}}
47shell:bash
48run:|
49wget-qhttps://github.com/RT-Thread/toolchains-ci/releases/download/v1.3/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
50sudotarxjfgcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2-C/opt
51/opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc--version
52echo"RTT_EXEC_PATH=/opt/gcc-arm-none-eabi-10-2020-q4-major/bin">>$GITHUB_ENV
53-name:BuildTools
54run:|
55scons--pyconfig-silent-C$TEST_BSP_ROOT
56scons-j$(nproc)-C$TEST_BSP_ROOT
57-name:ProjectgenerateTools
58if:${{success()}}
59run:|
60echo"Testtogenerateeclipseproject"
61scons--target=eclipse-s-C$TEST_BSP_ROOT
62echo"Testtogeneratecmakeproject"
63scons--target=cmake-s-C$TEST_BSP_ROOT
64echo"Testtogeneratemakefileproject"
65scons--target=makefile-s-C$TEST_BSP_ROOT
66-name:ProjectdistTools
67if:${{success()}}
68run:|
69echo"Testtodistproject"
70scons--dist-C$TEST_BSP_ROOT
71scons--dist-ide-C$TEST_BSP_ROOT
72ls$TEST_BSP_ROOT
73ls$TEST_BSP_ROOT/dist
74scons-C$TEST_BSP_ROOT/dist/project
75scons-C$TEST_BSP_ROOT/rt-studio-project
AutoTestCI

總的來說,這個Action的主要目標(biāo)是根據(jù)matrix中的不同參數(shù)組合,安裝必要的工具鏈、構(gòu)建和測試代碼。具體的步驟包括檢出代碼、安裝所需工具、設(shè)置環(huán)境變量、構(gòu)建代碼,然后在qemu中運行測試并輸出日志。根據(jù)參數(shù)的不同,這個工作流可以自動處理多個平臺和架構(gòu)的測試。

matrix列表中每個元素有五個屬性,分別是

  • UTEST:這組BSP的名字,后續(xù)輸出日志時會用到

  • RTT_BSP:測試使用的BSP

  • QEMU_ARCH:QEMU使用的平臺架構(gòu)

  • QEMU_MACHINE:選擇QEMU的板級支持包

  • CONFIG_FILE:RT-Thread條件編譯使用的CONFIG

  • SD_FILE:使用的sd.bin

  • RUN:是否啟動

AutoTestCI的第一步:

安裝必要的工具:scons、qemu、git

AutoTestCI的第二步:

根據(jù)matrix的屬性選擇安裝相應(yīng)的編譯工具鏈

比如要測試arm架構(gòu)和rtsmart/arm時,我們就選擇安裝arm-linux-musleabi_for_x86_64-pc-linux-g工具鏈

1name:InstallArmMuslToolChains
2if:${{matrix.legs.QEMU_ARCH=='arm'&&matrix.legs.UTEST=='rtsmart/arm'&&success()}}
3shell:bash
4run:|
5wget-qhttps://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/arm-linux-musleabi_for_x86_64-pc-linux-g
6sudotarxjfarm-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2-C/opt
7/opt/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin/arm-linux-musleabi-gcc--version
8echo"RTT_EXEC_PATH=/opt/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin">>$GITHUB_ENV
9echo"RTT_CC_PREFIX=arm-linux-musleabi-">>$GITHUB_ENV

AutoTestCI的第三步:

第三步主要完成$TEST_BSP_ROOT下BSP的編譯,以供后續(xù)在qemu上使用

1name:BuildBSP
2run:|
3echoCONFIG_RT_USING_UTESTCASES=y>>$TEST_BSP_ROOT/.config
4catexamples/utest/configs/$TEST_CONFIG_FILE>>$TEST_BSP_ROOT/.config
5scons--pyconfig-silent-C$TEST_BSP_ROOT
6scons-j$(nproc)--strict-C$TEST_BSP_ROOT

AutoTestCI的第四步:

第四步也是最重要的一步,開始測試相關(guān)用例

 1name:StartrunTest
 2if:${{matrix.legs.RUN=='yes'&&success()}}
 3run:|
 4gitclonehttps://github.com/armink/UtestRunner.git
 5pushd$TEST_BSP_ROOT
 6ddif=/dev/zeroof=sd.binbs=1024count=65536
 7popd
 8pushdUtestRunner
 9if[$TEST_SD_FILE!="None"];then
10python3qemu_runner.py--system$TEST_QEMU_ARCH--machine$TEST_QEMU_MACHINE--elf../$TEST_BSP_ROOT/rtthread
11else
12python3qemu_runner.py--system$TEST_QEMU_ARCH--machine$TEST_QEMU_MACHINE--elf../$TEST_BSP_ROOT/rtthread
13fi
14catrtt_console.log
15popd

  • 拉取RT-Thread自動化測試機器人

  • 制作sd.bin

  • 使用需要測試的BSP啟動qemu

  • 最后輸出相關(guān)日志

Check File Format and License

這個Action主要是用來檢查文件的格式化和版權(quán)信息的,主要工作都由tools/ci/file_check.py完成,在此之前主要先檢出當(dāng)前倉庫的代碼和安裝Python腳本依賴的包。

 1name:CheckFileFormatandLicense
 2on:[pull_request]
 3jobs:
 4scancode_job:
 5runs-on:ubuntu-latest
 6name:Scancodeformatandlicense
 7steps:
 8-uses:actions/checkout@v3
 9-name:SetupPython
10uses:actions/setup-python@v3
11with:
12python-version:3.8
13-name:CheckFormatandLicense
14shell:bash
15run:|
16pipinstallclickchardetPyYaml
17pythontools/ci/file_check.pycheck'https://github.com/RT-Thread/rt-thread''master'

file_check.py

我們可以先忽略使用的click命令行庫,或者也可以從命名和使用方式猜測出它們的功能。

因為這個文件比較簡單,所以我們可以猜測函數(shù)的入口就是check()。主函數(shù)里的邏輯是十分簡單的,可以看到通過checkout.get_new_file()獲得了一個文件列表,然后傳遞給了FormatCheckLicenseCheck,它們又分別調(diào)用了自身的check函數(shù),最后根據(jù)它們返回值判斷是否檢查出錯誤。

 1defcheck(check_license,repo,branch):
 2"""
 3checkfileslicenseandformat.
 4"""
 5init_logger()
 6#getmodifiedfileslist
 7checkout=CheckOut(repo,branch)
 8file_list=checkout.get_new_file()
 9iffile_listisNone:
10logging.error("checkoutfilesfail")
11sys.exit(1)
12#checkmodifiedfilesformat
13format_check=FormatCheck(file_list)
14format_check_result=format_check.check()
15license_check_result=True
16ifcheck_license:
17license_check=LicenseCheck(file_list)
18license_check_result=license_check.check()
19ifnotformat_check_resultornotlicense_check_result:
20logging.error("fileformatcheckorlicensecheckfail.")
21sys.exit(1)
22logging.info("checksuccess.")
23sys.exit(0)

checkout.get_new_file()獲得的文件列表是需要檢查的文件列表,而FormatCheckLicenseCheck執(zhí)行各自的檢查邏輯。

首先是get_new_file,具體的邏輯也比較簡單:

1. 通過git命令獲得新增和修改的文件列表

2. 然后遍歷這個文件列表

3. 遍歷這個文件列表中的文件路徑的每一層目錄,看是否存在.ignore_format.yml文件

4. 然后根據(jù).ignore_format.yml的屬性來判斷當(dāng)前文件是否需要被檢查

FormatCheck主要完成的工作是:

1. 搜索所有.c和.h文件

2. 然后檢查行首、行尾以及tab

LicenseCheck的邏輯也比較簡單,主要就是判斷當(dāng)前的Copyright的年份是否正確。

 1if'Copyright'infile[1]and'SPDX-License-Identifier:Apache-2.0'infile[3]:
 2try:
 3license_year=re.search(r'2006-d{4}',file[1]).group()
 4true_year='2006-{}'.format(current_year)
 5iflicense_year!=true_year:
 6logging.warning("[{0}]:licenseyear:{}isnottrue:{},pleaseupdate.".fo
 7else:
 8logging.info("[{0}]:licensechecksuccess.".format(file_path))
 9exceptExceptionase:
10logging.error(e)
11else:
12logging.error("[{0}]:licensecheckfail.".format(file_path))
13check_result=False
Static code analysis 這個Action和Check File Format and License是很類似的,主要流程都是相同的。 最重要的就是利用cppcheck完成靜態(tài)代碼檢查的功能: 1. 從文件列表中再一次過濾出C/C++相關(guān)文件2. 然后使用cppcheck逐個檢查文件列表,并且捕獲標(biāo)準(zhǔn)錯誤流
 1classCPPCheck:
 2def__init__(self,file_list):
 3self.file_list=file_list
 4defcheck(self):
 5file_list_filtered=[fileforfileinself.file_listiffile.endswith(('.c','.cpp','.cc','.cxx'))]
 6logging.info("Starttostaticcodeanalysis.")
 7check_result=True
 8forfileinfile_list_filtered:
 9result=subprocess.run(['cppcheck','--enable=warning','performance','portability','--inline-suppr','--error-exitcode=1','--force',file],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
10logging.info(result.stdout.decode())
11logging.info(result.stderr.decode())
12ifresult.stderr:
13check_result=False
14returncheck_result
15@click.group()
16@click.pass_context
17defcli(ctx):
18pass
19@cli.command()
20defcheck():
21"""
22staticcodeanalysis(cppcheck).
23"""
24format_ignore.init_logger()
25#getmodifiedfileslist
26checkout=format_ignore.CheckOut()
27file_list=checkout.get_new_file()
28iffile_listisNone:
29logging.error("checkoutfilesfail")
30sys.exit(1)
31#usecppcheck
32cpp_check=CPPCheck(file_list)
33cpp_check_result=cpp_check.check()
34ifnotcpp_check_result:
35logging.error("staticcodeanalysis(cppcheck)fail.")
36sys.exit(1)
37logging.info("checksuccess.")
38sys.exit(0)
39if__name__=='__main__':
40cli()

原文:https://club.rt-thread.org/ask/article/102cc126ad4dbfd8.html

———————End———————

RT-Thread線下入門培訓(xùn)

6月 - 鄭州、杭州、深圳

1.免費2.動手實驗+理論3.主辦方免費提供開發(fā)板4.自行攜帶電腦,及插線板用于筆記本電腦充電5.參與者需要有C語言、單片機(ARM Cortex-M核)基礎(chǔ),請?zhí)崆鞍惭b好RT-Thread Studio 開發(fā)環(huán)境

0da86a84-ffe4-11ed-90ce-dac502259ad0.png

立即掃碼報名

報名鏈接

https://jinshuju.net/f/UYxS2k

巡回城市:青島、北京、西安、成都、武漢、鄭州、杭州、深圳、上海、南京

你可以添加微信:rtthread2020 為好友,注明:公司+姓名,拉進RT-Thread官方微信交流群!

點擊閱讀原文,進入RT-Thread 官網(wǎng)


原文標(biāo)題:RT-Thread中的Github Actions

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1289

    瀏覽量

    40135

原文標(biāo)題:RT-Thread中的Github Actions

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    從開源來到開源中去-RT-Thread北京社區(qū)篇

    RT-Thread今年全域推行不同區(qū)域社區(qū)網(wǎng),通過建立區(qū)域社區(qū)網(wǎng),構(gòu)建更加緊密聯(lián)系的開源社區(qū),實現(xiàn)更廣泛的開源資源共享,讓更多的RT-Thread開發(fā)者受益。今年8月份RT-Thread正式啟動北京
    的頭像 發(fā)表于 11-29 01:05 ?187次閱讀
    從開源<b class='flag-5'>中</b>來到開源中去-<b class='flag-5'>RT-Thread</b>北京社區(qū)篇

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅(qū)動移植,并正常啟動RT-T
    的頭像 發(fā)表于 11-13 01:03 ?1180次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會報名啟動!

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

    2024 RT-Thread全球巡回 線下培訓(xùn)火熱來襲!

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

    【好書推薦】RT-Thread設(shè)備驅(qū)動開發(fā)指南

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

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

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

    使用RT-Thread的scons構(gòu)建系統(tǒng)來編譯ESP32C3固件?

    =https://github.com/RT-Thread/rt-thread/blob/master/bsp/ESP32_C3/README_ZH.md]https://github
    發(fā)表于 06-07 06:18

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

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

    2024 RT-Thread 全球技術(shù)大會演講議程發(fā)布!

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

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

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

    RT-Thread混合部署Workshop北京站來啦!

    4月25日,下午我們將在北京舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發(fā)表于 04-19 08:34 ?448次閱讀
    <b class='flag-5'>RT-Thread</b>混合部署Workshop北京站來啦!

    4月25日北京站RT-Thread線下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我們將在北京舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發(fā)表于 04-16 08:35 ?423次閱讀
    4月25日北京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深嵌入式軟件工程師農(nóng)曉明老師為您講
    的頭像 發(fā)表于 03-27 11:36 ?825次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發(fā)表于 03-27 08:34 ?537次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    恩智浦半導(dǎo)體正式加入RT-Thread全球合作伙伴計劃!

    前不久,恩智浦半導(dǎo)體正式加入RT-Thread全球合作伙伴計劃,成為RT-Thread高級會員合作伙伴。同時,RT-Thread現(xiàn)已成為恩智浦注冊合作伙伴(RT-Thread| 簡介合
    的頭像 發(fā)表于 03-14 10:40 ?626次閱讀
    恩智浦半導(dǎo)體正式加入<b class='flag-5'>RT-Thread</b>全球合作伙伴計劃!