產品固件燒寫方案

?1、前言

? ? ?一成熟的量產的嵌入式產品,軟件一般分為BootLoader和App,BootLoader用于啟動校驗、App升級、App版本回滾等功能,BootLoader在cpu上電第一階段中運行,之后跳轉至App地址執行應用程序。

? ? ?因此,在發布固件的時候,會存在BootLoader固件和App固件;此時我們期望是將BootLoader固件和App固件合并成為一個固件,這樣在量產時只需燒錄一次即可。

2. HEX和bin的區別

? ? 一般而言,是將HEX文件燒入MCU中,其中BIN文件數據燒到單片機的FLASH中,STM32具體地址是0x8000000。

? ??hex指Intel標準的HEX文件,文件內容都是ASCII編碼,HEX文件中同時包含數據和地址信息,所以在燒寫或下載HEX文件的時候,不需要用戶指定地址。Hex文件如果用特殊的程序來查看(一般記事本就可以實現)。打開后可發現,整個文件以行為單位,每行以冒號開頭,內容全部為16進制碼(以ASCII碼形式顯示)
? ?HEX基本格式:
<0x3a>
[數據長度1Byte]
[數據地址2Byte]
[數據類型1Byte]
[數據nByte]
[校驗1Byte]
<0x0d>
<0x0a>

? ? ?二進制文件,一個后綴名為".bin"的文件,只是表明它是binary格式。比如虛擬光驅文件常用.bin作為后綴,但并不意味著所有.bin文件都是虛擬光驅文件。
? ? BIN文件只有純粹的數據(代碼)信息,并不包含地址,所以燒寫BIN時就需要指定燒寫地址,一般可以在燒寫工具上修改。

很直觀的可以看到BIN文件只是HEX文件中的數據區域。

3.合并bootloader app

?1、生成app bootliader的bin文件

? 配置keil或其工具生成app bootliader對應的bin文件。

? ?2.將bootloader填充到固定大小

? ? ?一般我都希望將bootloader后面的app燒寫到固定位置,但是生成的bootloader大小肯定是變化的,這是后我們需要預設bootloader的最大尺寸,將剩余的位置填充oxff,保證app燒寫在固定的flash位置。

? ?bootloader的bin文件填充分為兩部分。

#include "stdafx.h"
#include <stdlib.h>#define  VERSION                "V1.01.161225"int _tmain(int argc, _TCHAR* argv[])
{if (argc < 3){printf("err! argc < 3.\n");return -1;}long   len = (long)strtol(argv[2], NULL, 16);printf("fz append. %s\n",VERSION);printf("file:%s, size:0x%x\n",argv[1],len);FILE	*fp;long	off;long    append = 0;//test file is exist and calculate file size//"..\\test\\aa.bin"if ((fp = fopen(argv[1], "rb"))==NULL){printf("Can not open file\n");return -1;}fseek(fp,0,SEEK_END);off=ftell(fp);fclose(fp);if (off >= len){printf("file size is too large. %d > %d\r", off, len);return -1;}else{append = len - off;}//append data 0xFFif ((fp = fopen(argv[1], "ab+"))==NULL){printf("Can not open file\n");return -1;}fseek(fp,0,SEEK_END);printf("open sucess.append size %d append %d\r\n",off,append);while(append--){fputc('\xff',fp);}fclose(fp); return 0;
}

上面的代碼可用Microsoft Visual?Studio的IDE編譯生成AppendFixSize.exe?。為填充代碼,下面的為填充腳本。

@echo off
@AppendFixSize.exe     Boot.bin    0x4000
@echo   append finish
copy /b .\Boot.bin + .\App.bin Firmware.bin 
srec_cat.exe Firmware.bin -Binary -offset 0x8000000 -o Firmware.hex -Intel
del Firmware.bin
@pause

后續將Fireware.hex 燒入MCU中即可

參考文檔:

??如何將BootLoader與APP合并成一個固件

??hex文件與bin文件的區別以及如何在keil中生成bin文件_bin文件hex文件-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215748.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Mockjs模擬(假數據)接口(axios)

一、什么是MockJs Mock.js官網 Mock.wiki.git mock測試就是在測試過程中&#xff0c;對于某些不容易構造或者不容易獲取的對象&#xff0c;用一個虛擬的對象來創建以便測試的測試方法。 二、安裝mockjs npm install mockjs 三、 MockJs使用 簡單使用&#xff1a; // 使用…

JFrog----常見的開源協議以及應用注意點

文章目錄 1. MIT 許可證2. GPL&#xff08;通用公共許可證&#xff09;3. LGPL&#xff08;較寬松的通用公共許可證&#xff09;4. Apache 許可證 2.05. BSD 許可證開源協議的選擇和注意點結論 開源軟件近年來在軟件開發中變得越來越流行。使用開源軟件可以節省時間和資源&…

Unity優化——加速物理引擎1

大家好&#xff0c;這里是七七&#xff0c;今天開始更新物理引擎相關的優化部分了&#xff0c;本文介紹的是物理引擎內部工作情況。 Unity技術有兩種不同的物理引擎&#xff1a;用于3D物理的Nvidia的PhysX和用于2D物理的開源項目Box2D。然而&#xff0c;Unity對它們的實現是高…

Nginx rewrite 參數

目錄 常用的Nginx 正則表達式 rewrite 和 location的區別 location location 大致分三類&#xff1a; location 常用的匹配規則&#xff1a; location 優先級&#xff1a; rewrite rewrite跳轉實現 rewrite 執行順序如下 語法格式 flag標記說明 rewrite實際操作 基…

【虹科干貨】使用Netropy廣域網模擬器測試簡化SD-WAN測試

文章速覽&#xff1a; 為什么需要WAN模擬器&#xff1f;什么是WAN模擬器&#xff1f;用WAN模擬器測試SD-WANSD-WAN損傷測試 現如今大家都在使用SD-WAN產品節省網絡成本&#xff0c;但是也面臨著一些復雜的算發問題&#xff0c;那么如何簡化SD-WAN系統的測試和評估&#xff1f;…

Ubuntu部署EMQX開源版MQTT服務器-Orange Pi部署-服務器部署

一、前言 作為全球最具擴展性的 MQTT 消息服務器&#xff0c;EMQX 提供了高效可靠海量物聯網設備連接&#xff0c;能夠高性能實時移動與處理消息和事件流數據&#xff0c;本文將介紹如何在Ubuntu 22.04上部署MQTT服務器。我們本次選擇開源版&#xff0c;使用離線安裝方式部署。…

總結6種@Transactional注解的失效場景

作者簡介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中興通訊、美團架構師&#xff0c;現某互聯網公司CTO 聯系qq&#xff1a;184480602&#xff0c;加我進群&#xff0c;大家一起學習&#xff0c;一起進步&#xff0c;一起對抗互聯網寒冬 引言 昨天有粉絲咨詢了…

超卓航科引領冷噴涂增材制造革新,推動先進核反應堆發展

近日&#xff0c;超卓航科憑借其卓越的冷噴涂增材制造技術&#xff0c;成為推動核能領域創新的重要力量。該公司利用冷噴涂工程技術&#xff0c;或為核反應堆的制造和修復開辟了全新的道路。 冷噴涂技術是一種頗具前景的固態粉末沉積方法&#xff0c;可用于涂層制造、增材制造和…

GNSS - PPP軟件 - GAMP 在VS2019/2022下完成調試、跑通程序(超詳細!)

目錄 一、前期準備 二、調試詳細步驟 1.VS中新建項目 2.復制源碼至項目文件夾 3.將源碼中“.c”文件和“.h”文件添加至項目指定位置 4.修改項目屬性&#xff1a; (1)【 配置屬性 -> C/C ->預處理器 ->預處理器定義】添加如下 (2)【配置屬性->鏈接器->調…

《C++ Primer》第12章 動態內存(二)

參考資料&#xff1a; 《C Primer》第5版《C Primer 習題集》第5版 12.1.5 unique_ptr&#xff08;P417&#xff09; unique “擁有”它所指向的對象&#xff0c;某個時刻只能有一個 unique_ptr 指向一個給定對象。 當我們定義一個 unique_ptr 時&#xff0c;需要將其綁定到…

游戲中小地圖的制作__unity基礎開發教程

小地圖的制作 Icon標識制作制作攝像機映射創建地圖UI效果“不一樣的效果” 在游戲中經常可以看到地圖視角的存在&#xff0c;那么地圖視角是如何讓實現的呢&#xff1f; 這一期教大家制作一個簡易的小地圖。 &#x1f496;點關注&#xff0c;不迷路。 老樣子&#xff0c;我們還…

Leetcode 131 分割回文串

題意理解&#xff1a; 分割回文子串&#xff0c;可以看作是劃分連續的字幕組合——所以也可以用回溯的方法來解決 每個位置選與不選——該位置切割|不切割 對于每一段子串——>判斷是否是回文串&#xff1a; 是&#xff1a; 繼續切割 不是&#xff1a; 剪枝 解題方法…

Ubuntu Destktop 22.04 設置 ssh 超時時間

Ubuntu Destktop 22.04 使用 ssh 連接服務器時&#xff0c;發現一段時間不操作就會自動斷開連接&#xff0c;解決方法如下&#xff1a; 打開 /etc/ssh/ssh_config 文件&#xff1a; sudo vim /etc/ssh/ssh_config在文件最后添加&#xff1a; # ssh 客戶端會每隔 30 秒發送一…

在線免費制作各種證件照,有需要的收藏

現在很多場合都需要一寸證件照&#xff0c;比如辦理身份證、出國簽證等。以往&#xff0c;我們都需要到專門的照相館拍攝&#xff0c;但是現在&#xff0c;有了隨時照微信小程序&#xff08;抖音和支付搜索億鳴證件照哦&#xff09;&#xff0c;你可以足不出戶就能夠制作一寸證…

linux shell

文章目錄 預設參數腳本自動開終端if語句語法常用判斷命令文件/目錄判斷&#xff1a;字符串判斷數值判斷邏輯判斷 if高級特性&#xff1a; 預設參數 $$ Shell本身的PID&#xff08;ProcessID&#xff09;$! Shell最后運行的后臺Process的PID$? 最后運行的命令的結束代碼&#…

MySQL InnoDB Replication部署方案與實踐

1. 概述 MySQL Innodb ReplicaSet 是 MySQL 團隊在 2020 年推出的一款產品&#xff0c;用來幫助用戶快速部署和管理主從復制&#xff0c;在數據庫層仍然使用的是主從復制技術。 ReplicaSet 主要包含三個組件&#xff1a;MySQL Router、MySQL Server 以及 MySQL Shell 高級客戶…

eventBus父組件$emit一次子組件多次收到¥

eventBus父組件$emit一次子組件多次收到$on 參考&#xff08;EventBus踩坑1-CSDN博客&#xff09; 父組件emit出了事件&#xff0c;這個過程需要一定時間&#xff0c;這段時間過長&#xff0c;子組件還未接收到父組件的emit&#xff0c;父組件認為子組件沒有收到&#xff0c;…

12 位多通道國產芯片ACM32F403/F433 系列,支持 MPU 存儲保護功能,應用于工業控制,智能家居等產品中

ACM32F403/F433 芯片的內核基于 ARMv8-M 架構&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片內核 支持一整套DSP指令用于數字信號處理&#xff0c;支持單精度FPU處理浮點數據&#xff0c;同時還支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升應用的…

Java - Mybatis借助PageHelper實現分頁,集成SpringBoot

未使用SpringBoot 第?步&#xff1a;引?依賴 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version> </dependency> 第?步&#xff1a;在mybatis-config.xml…

PyTorch張量:內存布局

你可能對 torch 上的某些函數感到困惑&#xff0c;它們執行相同的操作但名稱不同。 例如&#xff1a; reshape()、view()、permute()、transpose() 等。 這些函數的做法真的不同嗎&#xff1f; 不&#xff01; 但為了理解它&#xff0c;我們首先需要了解一下張量在 pytorch 中…