国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

基于RT-Thread完整版搭建的極簡Bootloader

RTThread物聯網操作系統 ? 來源:未知 ? 2023-03-10 23:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

項目背景

Agile Upgrade: 用于快速構建 bootloader 的中間件。

  • example文件夾提供 PC 上的示例

特性

  1. 適配RT-Thread官方固件打包工具 (圖形化工具及命令行工具)

  2. 使用純 C 開發,不涉及任何硬件接口,可在任何形式的硬件上直接使用

  3. 加密、壓縮支持如下:

  • AES256

  • fastlz

  • quicklz

  • 原生適配filefal操作接口

  • 移植簡單,實現自定義的后端只需適配幾個操作接口

  • 使用簡單,幾行代碼即可實現固件升級

  • 全過程日志輸出

  • 提供過程回調,可將過程及進度顯示在自定義硬件上

  • 基于RT-Thread 4.1.0版本

  • 基于正點原子探索者開發板

ba4b9a28-bf56-11ed-bfe3-dac502259ad0.png

代碼地址:

https://github.com/loogg/agile_upgrade_mcu_demos

https://github.com/loogg/agile_upgrade

(請復制至外部瀏覽器打開)

  • 目錄結構

ba751fc4-bf56-11ed-bfe3-dac502259ad0.png

2、Bootloader

一般Bootloader實現的邏輯如下:

ba88e0b8-bf56-11ed-bfe3-dac502259ad0.png

這種方式適合于簡單的裸機程序或可控的 OS 程序(即所有外設硬件都可把控),在準備環境的時候將其全部關閉。

但對于一些復雜的或者 OS 中輪子已造好的程序,有一些因素不花時間研究無法把控,在準備環境時很可能就會遺漏一些未關閉導致出各種各樣的問題。

這里提供一種萬能方法:

- 利用芯片中的不受軟件復位影響的可供用戶使用的寄存器 (如 STM32 中的備份寄存器)。
- 在需要跳入 APP 運行時將該寄存器賦值然后軟件復位。
- 在 OS 還沒初始化時判斷該寄存器值,如果需要跳轉只需要簡單的準備環境即可跳轉。

ba9a9d12-bf56-11ed-bfe3-dac502259ad0.png

該方法可以使Bootloader就作為一個 OS 應用程序開發,需要跳轉的時候就操作一下寄存器并軟件復位即可。

該倉庫下所有的Bootloader例子均使用此方法。

以正點原子探索者開發板的STM32F4為例,將system_stm32f4xx.c文件的SystemInit函數修改:

1voidboot_start_application(void);
2voidSystemInit(void)
3{
4boot_start_application();
5
6...
7}

boot_start_application的實現為:

 1typedefvoid(*boot_app_func)(void);
 2voidboot_start_application(void){
 3__HAL_RCC_PWR_CLK_ENABLE();
 4HAL_PWR_EnableBkUpAccess();
 5
 6RTC_HandleTypeDefRTC_Handler={0};
 7RTC_Handler.Instance=RTC;
 8uint32_tbkp_data=HAL_RTCEx_BKUPRead(&RTC_Handler,BOOT_BKP);
 9HAL_RTCEx_BKUPWrite(&RTC_Handler,BOOT_BKP,0);
10
11if(bkp_data!=0xA5A5)return;
12
13boot_app_funcapp_func=NULL;
14uint32_tapp_addr=BOOT_APP_ADDR;
15if(((*(__IOuint32_t*)(app_addr+4))&0xff000000)!=0x08000000)return;
16
17/*棧頂地址在128KRAM間*/
18if(((*(__IOuint32_t*)app_addr)-0x20000000)>=(STM32_SRAM_SIZE*1024))return;
19
20app_func=(boot_app_func)*(__IOuint32_t*)(app_addr+4);
21/*Configuremainstack*/
22__set_MSP(*(__IOuint32_t*)app_addr);
23/*jumptoapplication*/
24app_func();
25}

設置寄存器并軟件復位的實現為:

1staticvoidboot_app_enable(void){
2__disable_irq();
3RTC_HandleTypeDefRTC_Handler={0};
4RTC_Handler.Instance=RTC;
5HAL_RTCEx_BKUPWrite(&RTC_Handler,BOOT_BKP,0xA5A5);
6HAL_NVIC_SystemReset();
7}

3、RT-Thread 完整版、RT-Thread Nano 及裸機對比

3.1、RTOS 與裸機

很多人都會覺得裸機開發比 RTOS 簡單并且編譯出來的空間小的多,但以我的開發經驗來說并非如此。

  1. 開發難易程度

  • 裸機

    裸機開發經常使用的是前后臺框架,一個有多步執行操作的task基本上都是使用switch case方式。

    一級延時很好處理只需要改變task的再一次進入時間即可。

    嵌套延時則需要加狀態位并在函數中嵌套switch case,程序非常臃腫。

  • RTOS

    RTOS 中多步操作只需按順序調用函數即可,掛起也只需調用系統提供的 API ,代碼精簡且邏輯清晰。

  • 資源占用

    RT-Thread Nano舉例,官方給出的數據如下:

1在運行兩個線程(main 線程+ idle 線程)情況下,ROM 和 RAM 依然保持著極小的尺寸。
2以下是基于CortexM3的MDK工程編譯結果(優化等級3)
3
4TotalROSize(Code+ROData)4000(3.91kB)
5TotalRWSize(RWData+ZIData)1168(1.14kB)
6TotalROMSize(Code+ROData+RWData)4092(4.00kB)
7

從數據中可以得知資源占用并沒有相差非常大。

3.2、RT-Thread 完整版與 RT-Thread Nano

許多人對于這兩個的爭議在于:RT-Thread 完整版資源占用太大,小芯片用不了等等。

這里我就用事實來證明并非如此,完全可以裁剪到Nano一樣的大小,并且RT-Thread 完整版還支持menuconfig不需要自己添加代碼文件,真香。

同時RT-Thread還有許多純 C 語言的不涉及硬件的軟件包,使用menuconfig拿來即用,真香。

這里我以正點原子探索者開發板bsp為例,基于RT-Thread v4.1.0版本,具體工程查看 RTT_Template。

  • CubeMX生成的 MDK 工程編譯結果 (優化等級 0)

1TotalROSize(Code+ROData)8120(7.93kB)
2TotalRWSize(RWData+ZIData)1832(1.79kB)
3TotalROMSize(Code+ROData+RWData)8136(7.95kB)
4
  • 在運行兩個線程 (main 線程 + idle 線程) 情況下的 MDK 工程編譯結果 (優化等級 0), 適配了rt_hw_console_output

1TotalROSize(Code+ROData)13256(12.95kB)
2TotalRWSize(RWData+ZIData)3136(3.06kB)
3TotalROMSize(Code+ROData+RWData)13396(13.08kB)
4

		

		
  • 兩者比較差值

1TotalROSize(Code+ROData)5136(5.02kB)
2TotalRWSize(RWData+ZIData)1304(1.28kB)
3TotalROMSize(Code+ROData+RWData)5260(5.14kB)
4

			
從上述數據可以得出結論:RT-Thread 完整版通過裁剪可以完全媲美RT-Thread Nano,所以首選RT-Thread 完整版

			

4、Bootloader 工程使用

tools文件夾下包含了固件打包工具和應用層固件app.bin,起始地址為0x08080000

應用層分區如下:

bab263ca-bf56-11ed-bfe3-dac502259ad0.png

在應用程序中下載固件需要使用ymodem_ota -p [dst]命令,[dst]為目標分區download_w25qdownload_onchip

以下工程編譯結果都是基于優化等級 0

4.1、MinimalistBoot 使用

該工程下提供 3 個配置文件,通過ENV工具的menuconfigLoad配置并save.config后執行scons --target=mdk5 -s即可生成工程。

該工程未使用動態內存分配,故編譯結果即為真實內存使用。

配置文件分別為:.config.minimal.config.w25q_qlz.config.shell_qlz

  • .config.minimal

極簡Bootloader,不支持壓縮和加密類型固件,下載分區為download_onchip

babf99b4-bf56-11ed-bfe3-dac502259ad0.png

  • .config.w25q_qlz

支持quicklz方式壓縮的固件,下載分區為download_w25q

badc4672-bf56-11ed-bfe3-dac502259ad0.png

  • .config.shell_qlz

支持quicklz方式壓縮的固件,升級失敗可通過敲擊鍵盤Enter鍵進入Shell,下載分區為download_onchip

bae3f480-bf56-11ed-bfe3-dac502259ad0.png

4.2、FalBoot 使用

該工程基于FAL組件,提供 4 個配置文件,通過ENV工具的menuconfigLoad配置并save.config后執行scons --target=mdk5 -s即可生成工程。

配置文件分別為:.config.minimal.config.dev_qlz.config.w25q_dev_qlz.config.shell_dev_qlz

  • .config.minimal

不支持壓縮和加密類型固件,下載分區為download_onchip

baf60986-bf56-11ed-bfe3-dac502259ad0.png

  • .config.dev_qlz

使用了設備框架,支持quicklz方式壓縮的固件,下載分區為download_onchip

bb078ae4-bf56-11ed-bfe3-dac502259ad0.png

  • .config.w25q_dev_qlz

使用了設備框架,支持quicklz方式壓縮的固件,下載分區為download_w25q

bb138196-bf56-11ed-bfe3-dac502259ad0.png

  • .config.shell_dev_qlz

使用了設備框架,支持quicklz方式壓縮的固件,升級失敗可通過敲擊鍵盤Enter鍵進入Shell,下載分區為download_onchip

bb2902c8-bf56-11ed-bfe3-dac502259ad0.png

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

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

點擊閱讀原文報名

愛我就請給我在看


		


原文標題:基于RT-Thread完整版搭建的極簡Bootloader

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


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

    關注

    32

    文章

    1614

    瀏覽量

    44881

原文標題:基于RT-Thread完整版搭建的極簡Bootloader

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恩智浦亮相RT-Thread 20周年開發者大會

    日前,“開源向實·生產力進化啟示錄”全球峰會暨RT-Thread 20周年開發者大會在上海成功舉辦,恩智浦作為RT-Thread的緊密合作伙伴,在活動中重磅亮相,展示雙方在共建RT-Thread OS開發生態方面的新成果、新方案
    的頭像 發表于 01-26 09:07 ?557次閱讀

    基于RT-Thread的簡單物聯網溫控箱 | 技術集結

    接入網絡,配套了功能完善的Web可視化監控和調參Dashboard,實現了完整的物聯網閉環。整個項目充分利用了RT-Thread多線程、設備驅動框架和網絡組件的能力
    的頭像 發表于 12-26 18:18 ?7263次閱讀
    基于<b class='flag-5'>RT-Thread</b>的簡單物聯網溫控箱 | 技術集結

    RISC-V單片機快速入門02,移植RT_Thread Nano系統

    完整版是在RT_Thread Nano的基礎上,增加了眾多的軟件包構成,同時支持眾多物聯網組件,是物聯網開發的利器。 3.準備工作 (1)裸機源碼:上一節環境搭建篇工程即可 (2)RT_
    發表于 11-10 07:23

    首搭RT-Thread程翧車控平臺| RT-Thread程翧 S32K344 快速原型開發平臺正式上市!| 產品動態

    在智能汽車邁向高集成與高安全的時代,VCU/ECU開發正面臨效率與可靠性的雙重考驗。依賴單一硬件或拼湊軟件方案的傳統模式,已成為制約創新的瓶頸。為此,RT-Thread帶來里程碑式的解決方案
    的頭像 發表于 10-31 11:53 ?996次閱讀
    首搭<b class='flag-5'>RT-Thread</b>程翧車控平臺| <b class='flag-5'>RT-Thread</b>程翧 S32K344 快速原型開發平臺正式上市!| 產品動態

    RT-Thread Studio 正式支持GD32H7高性能系列MCU | 技術集結

    RT-ThreadNano內核RT-Thread標準版完整生態全鏈路開發支持工程創建→代碼編寫→在線調試→燒錄下載圖形化配置讓開發效率倍
    的頭像 發表于 10-24 11:52 ?1521次閱讀
    <b class='flag-5'>RT-Thread</b> Studio 正式支持GD32H7高性能系列MCU | 技術集結

    請問rt-thread studio可以開發完整的mcu程序嗎?

    請教一下:rt-thread studio IDE開發環境,能完整開發的rt-thread 的mcu程序嗎? 好多教程的步驟: 1。在rt-thread 的開源的工程中制作BSP包,
    發表于 10-09 09:21

    2025年RT-Thread開發者巡回培訓報名正式啟動!

    親愛的RT-Thread社區成員們:新程再啟,共赴熱愛!2025年RT-Thread開發者巡回培訓正式啟動報名!今年,我們選擇了西安、武漢、北京、杭州、深圳、上海、成都這7座城市,為大家帶來
    的頭像 發表于 09-27 10:39 ?1973次閱讀
    2025年<b class='flag-5'>RT-Thread</b>開發者巡回培訓報名正式啟動!

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以為修改index_all.json,發現聯網的時候,會自動覆蓋 另lastet版本
    發表于 09-16 06:06

    【好書推薦】RT-Thread第20本相關書籍!《嵌入式實時操作系統RT-Thread原理與應用》| 技術集結

    知識與實際應用。本書內容豐富、循序漸進,涵蓋從RT-Thread的基礎理論到高級應用的完整知識體系,并通過大量實踐案例進行講解。全書共15章,內容包括RT-Thre
    的頭像 發表于 08-24 10:05 ?1032次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關書籍!《嵌入式實時操作系統<b class='flag-5'>RT-Thread</b>原理與應用》| 技術集結

    RT-Thread 遇上 Rust:安全內核 RusT-Thread 的誕生

    大家好,我們是中國科學技術大學操作系統原理與設計(H)課oooooS小組。這個項目是我們的課程大作業:參考RT-Thread架構,使用Rust搭建一個原生的嵌入式操作系統內核。初識Rust是因為xk
    的頭像 發表于 08-02 11:03 ?3540次閱讀
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全內核 RusT-<b class='flag-5'>Thread</b> 的誕生

    RT-Thread榮獲2025優秀開源項目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術協會主辦的2025上海開源創新精英薈。上海市商委副主任張杰出席會議并致辭。RT-Thread嵌入式操作系統項目憑借其卓越的技術創新與開源生態
    的頭像 發表于 07-04 09:04 ?2649次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優秀開源項目 | 新聞速遞

    揭秘RT-Thread上的AUTOSAR CP系統

    本文探討了RT-Thread與AUTOSARCP的融合,解決車載ECU開發中實時性、安全性與靈活性的平衡問題。通過分層安全內核(rt-safetyos/autoos)和工具鏈整合,兼容AUTOSAR
    的頭像 發表于 06-23 20:22 ?3223次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系統

    2025 RT-Thread全球技術大會議程正式發布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術大會)是聚焦基礎軟件技術創新與實踐的嵌入式技術盛會,持續推動技術價值轉化
    的頭像 發表于 05-27 19:28 ?1362次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術大會議程正式發布!

    RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

    全球開發者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質量、促進技術交流的關鍵環節。RT-Thread作為全球領先
    的頭像 發表于 05-21 18:02 ?1262次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進

    電源電路實用設計手冊—電子檔完整版

    全文完整版電子檔點擊下方附件下載獲取!
    發表于 03-14 10:11