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

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

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

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

嵌入式項目中的軟件數(shù)據(jù)兼容性

科技綠洲 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-22 11:38 ? 次閱讀

大家好,我是雜燴君。

嵌入式項目中,軟件是一個不斷迭代的過程,需要考慮各種兼容性。之前我們的項目,因為這方面考慮得比較少,導致項目中后期開發(fā)起來很被動。

項目系統(tǒng)總體設計階段,應盡可能地考慮到未來可以遇見的情況,覆蓋到盡可能多的業(yè)務擴展。項目雖然分階段開發(fā),各個階段完成的功能都不一樣,總體設計要指向最終的需求。

數(shù)據(jù)兼容性

1、協(xié)議制定

制定的協(xié)議要滿足整個項目所有數(shù)據(jù)的交互。

比如:

圖片

這里的 ID 設置為 1 個字節(jié),可能有一定的風險。后面功能加著加著,可能 1 個字節(jié)的 ID 滿足不了,就得改協(xié)議。盡管可能滿足了某個項目的需求,但萬一之后其它項目也用了這一套代碼,但是 1 個字節(jié)的 ID 滿足不了,又得改代碼。這里設置 2 字節(jié)可能會好一點,基本上能滿足絕大部分情況的使用。

不一定為了覆蓋范圍更廣而設置 4 字節(jié),這樣可能有點冗余。很多情況都有一個平衡點,需要自己權衡。

Length字段只設置了 1 個字節(jié),可能也有一定的奉獻。后面功能中如果有發(fā)較大的數(shù)據(jù),可能要分好多包發(fā),原本可以發(fā)得很快,被這里限制死了。到時候想要提速,就得改協(xié)議。

之前項目里,幾塊板間的通信都用同一套協(xié)議。但后期發(fā)現(xiàn)該協(xié)議滿足不了新需求,但為了不影響到前面的數(shù)據(jù),又搞了一套協(xié)議。導致項目里有兩套差不多一樣的協(xié)議處理代碼。

協(xié)議應該是項目一開始考慮好、制定好,整個項目開發(fā)期間,都不應該再做改動。

2、數(shù)據(jù)添加

后面新增的數(shù)據(jù),不應該插入現(xiàn)有的數(shù)據(jù)中,應該單獨增加一個數(shù)據(jù)ID。

比如:

現(xiàn)有的數(shù)據(jù)中,有一條數(shù)據(jù)叫做設備信息的數(shù)據(jù),設備信息里包含了:設備IP、設備Mac。這個數(shù)據(jù)會顯示在手機APP上。對應的 C 語言代碼:

#define  MSG_ID_DEV_INFO   0x0001

typedef struct _dev_info
{
 char dev_ip[IP_MAX_LEN];
 char dev_mac[MAC_MAX_LEN];
}dev_info_t;

假如后面需要再顯示一個設備的sn,這個數(shù)據(jù)我們應該加在哪里?

如果是項目前中期,這時候還是在開發(fā)階段,我們可以隨意修改。因為設備sn也是設備信息的一部分,可以直接在設備信息這個數(shù)據(jù)里添加會比較合理:

#define  MSG_ID_DEV_INFO   0x0001

typedef struct _dev_info
{
 char dev_ip[IP_MAX_LEN];
 char dev_mac[MAC_MAX_LEN];
    char dev_sn[SN_MAX_LEN];
}dev_info_t;

如果是產(chǎn)品已經(jīng)在市場上流通,這時候這么加的話,軟件兼容性就不太好。因為假如你的手機APP版本與設備版本不匹配,原有的設備IP及設備MAC這兩個設備信息可能都顯示不出來,因為我們這么一改,破壞了原有的數(shù)據(jù)結構,而手機APP按照原來的數(shù)據(jù)來做解析的,會解析不過。

這時候可以這么來加:

#define  MSG_ID_DEV_INFO   0x0001
#define  MSG_ID_DEV_SN     0x0002

typedef struct _dev_info
{
 char dev_ip[IP_MAX_LEN];
 char dev_mac[MAC_MAX_LEN];
}dev_info_t;

typedef struct _dev_sn
{
    char dev_sn[SN_MAX_LEN];
}dev_sn_t;

這樣,哪怕手機APP版本與設備版本沒有對應上,原來的數(shù)據(jù)還是能正常顯示的。當然,最好的情況當然是在開發(fā)階段就合理地設計好。不然,像這種情況,只能犧牲一些程序可讀性來換取程序兼容性了。這會讓后面看代碼的人覺得很奇怪,你這個sn不也是數(shù)據(jù)設備信息嗎,怎么還單獨給一個ID。后面接手這個代碼的人可能就會把這一塊代碼給改了。

圖片

溫馨提示:在沒有完全弄懂維護項目的代碼為什么這么實現(xiàn)的情況下,能正常在跑的程序還是別亂動得好,哪怕你覺得這是屎山代碼。否則可能會出大問題。要么等到軟件重構時再修改,要么就繼續(xù)打補丁。

3、數(shù)據(jù)刪除

如果是刪除本模塊內(nèi)部自己使用的數(shù)據(jù),你想怎么刪就怎么刪。

如果是刪除與其它模塊進行交互的數(shù)據(jù),這就不能這么隨意了。比如,請求、應答的方式。應答端給請求端返回的數(shù)據(jù)是不能隨意刪的,如果要刪,一定要確保請求端已經(jīng)沒有請求數(shù)據(jù)的需求,并且已經(jīng)去掉相關代碼時,這時候應答端才去刪數(shù)據(jù),否則還是留著吧。

4、數(shù)據(jù)修改

其實數(shù)據(jù)定了,為了保證軟件兼容性,應該是要禁止修改的。

如果一定要修改,可以先增加一條新數(shù)據(jù),后面慢慢切為新數(shù)據(jù)、刪除舊數(shù)據(jù)。

接口兼容性

正在使用的接口,應該盡量不要修改。如果要修改,一定不要影響之前的功能。

之前就有遇到類似的情況。舉個例子:

typedef enum _sys_status
{
 SYS_STATUS_IDLE,
 SYS_STATUS_RUNNING,
 SYS_STATUS_STOP,
}sys_status_t;

static sys_status_t g_sys_status;

sys_status_t get_sys_status(void)
{
 return g_sys_status;
}

這里的系統(tǒng)狀態(tài)是要顯示在手機APP上的,不同的狀態(tài)顯示不同的圖標。后面要新增一個狀態(tài),結果數(shù)據(jù)提供者這么改:

typedef enum _sys_status
{
 SYS_STATUS_IDLE,
 SYS_STATUS_NEW_STATUS,
 SYS_STATUS_RUNNING,
 SYS_STATUS_STOP,
}sys_status_t;

static sys_status_t g_sys_status;

sys_status_t get_sys_status(void)
{
 return g_sys_status;
}

接口提供者把新增的數(shù)據(jù)插入了中間,影響了枚舉原有的順序。結果手機APP上圖標顯示亂了。

影響到接口的修改,要保證原有的數(shù)據(jù)不受影響。

系統(tǒng)兼容性

在軟件升級過程中,需要考慮軟件所依賴的其他系統(tǒng)組件是否發(fā)生變化,以確保升級后軟件能夠正常運行,不會影響其他系統(tǒng)組件的正常運行。如果其他系統(tǒng)組件發(fā)生變化,則需要進行相關測試和文檔更新,以確保整個系統(tǒng)能夠正常運行。

另外隨著項目的迭代,這一套代碼有可能運行于不同的系統(tǒng)不同的芯片平臺。

比如,我們嵌入式Linux項目,有些項目里會用到一些第三方庫,這時候可能會編譯成動態(tài)庫的形式。要考慮升級的時候能不能升級動態(tài)庫。如果不能,就得把依賴的庫一起編譯到可執(zhí)行程序里。

另外,如果使用動態(tài)庫,之后產(chǎn)品軟硬件迭代換了一個芯片平臺的話,我們就需要重新交叉編譯一次所依賴的庫。如果為了保證這一塊的兼容性,也可以考慮把所依賴的庫與用戶代碼一起編譯。

當然,這個根據(jù)實際情況進行權衡取舍。如果依賴的庫很多,一起編譯到可執(zhí)行程序里,導致可執(zhí)行程序很大,到時候更新也不好更新。

功能兼容性

涉及到功能的添加的,盡量不要影響到之前已開發(fā)的功能。不然也會增加用戶對產(chǎn)品的學習成本。比如某些指示燈在前一個版本的快閃、慢閃代表什么意思,這個在之后就盡量不要去修改了,不然用戶又得重新理解。

性能兼容性

在軟件升級過程中,需要考慮軟件的性能是否發(fā)生變化,以確保升級后軟件的性能仍然能夠滿足用戶需求。如果軟件的性能發(fā)生變化,則需要進行相關測試和優(yōu)化,以確保軟件能夠正常運行,并且能夠滿足用戶的性能需求。

比如,原來正常升級需要3分鐘,某個版本之后升級變成了6分鐘,升級效率變差了。

安全兼容性

在軟件升級過程中,需要考慮軟件的安全性是否得到加強,以確保升級后軟件的安全性能夠得到保障,不會出現(xiàn)新的安全風險。如果軟件的安全性得到加強,則需要進行相關測試和文檔更新,以確保軟件能夠正常運行,并且能夠保障用戶的安全。

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

    關注

    5121

    文章

    19413

    瀏覽量

    312407
  • 軟件
    +關注

    關注

    69

    文章

    5080

    瀏覽量

    88704
  • C 語言
    +關注

    關注

    0

    文章

    18

    瀏覽量

    14291
收藏 人收藏

    評論

    相關推薦

    談談嵌入式軟件兼容性

    嵌入式項目中軟件是一個不斷迭代的過程,需要考慮各種兼容性。之前我們的項目,因為這方面考慮得比較少,導致
    發(fā)表于 06-27 11:08 ?631次閱讀
    談談<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的<b class='flag-5'>兼容性</b>

    適合初學者的嵌入式項目有哪些?

    適合初學者的嵌入式項目有哪些? 嵌入式學習是一個實踐很強的領域,通過實際項目可以幫助你鞏固理論知識并提升技能。以下是幾個適合初學者練手的
    發(fā)表于 07-11 10:23

    嵌入式計算機系統(tǒng)的電磁兼容性有什么特點?

    EMC(ElectromagneticCompatibility)——電磁兼容()是一門多學科交叉的邊緣學科。電磁兼容技術已在很多領域中得到廣泛的應用,在
    發(fā)表于 03-20 07:52

    【知識科普】嵌入式軟件開發(fā)是什么?

    基礎、簡單操作系統(tǒng)為核心CPU種類多,通用弱系統(tǒng)開銷小,效率高達到一定的兼容性,拓展性用戶體驗度不高,交互界面不夠友好3. 以嵌入式操作系統(tǒng)為標志兼容性好,適用于不同平臺系統(tǒng)開銷小,
    發(fā)表于 06-17 11:09

    在云端管理嵌入式設計的硬件及軟件(DigiPCBA)

    的任何文件。在現(xiàn)有項目中嵌入式系統(tǒng)固件創(chuàng)建一個新文件夾請注意,擁有項目編輯權限的任何人員(包括您的固件開發(fā)人員)均可訪問項目文件夾,并根據(jù)需要為固
    發(fā)表于 04-14 15:16

    嵌入式軟件與非嵌入式軟件的區(qū)別

    的缺點:1.軟硬件耦合度高導致軟件移植差 2.軟件開發(fā)人員必須懂硬件 3.軟件功能差;優(yōu)點:簡單,開發(fā)成本低。
    發(fā)表于 10-27 06:18

    嵌入式軟件的重要

    隨著目前大型復雜武器系統(tǒng)的研制和國家重點預研項目任務越來越多,開發(fā)與測試工作越來越重。作為智能化裝備的核心,嵌入式軟件的比重明顯加大,開展自動化的嵌入式
    發(fā)表于 10-27 06:59

    ARM編譯器for Embedded Version 6.20移植和兼容性指南

    Arm?編譯器嵌入式遷移和兼容性指南為從舊版本的Arm編譯器遷移到Arm編譯器嵌入式6的用戶提供遷移和兼容性信息。
    發(fā)表于 08-10 07:17

    嵌入式軟件系統(tǒng)設計中的正交分析

    嵌入式軟件系統(tǒng)設計中的正交分析 嵌入式軟件系統(tǒng)設計領域存在“正交”的思想。本文結合實際項目經(jīng)
    發(fā)表于 03-29 15:09 ?710次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>系統(tǒng)設計中的正交<b class='flag-5'>性</b>分析

    淺論嵌入式系統(tǒng)離線測試

    隨著嵌入式系統(tǒng)的發(fā)展,迫切需要在嵌入式系統(tǒng)開發(fā)階段對嵌入式系統(tǒng)進行離線測試與分析,以保證系統(tǒng)的軟件應用程序、硬件具有兼容性、高可靠
    發(fā)表于 09-26 14:59 ?924次閱讀

    嵌入式軟件是什么意思_嵌入式軟件的分類有哪些

    本文首先闡述了嵌入式軟件的概念,其次介紹了嵌入式軟件的特征,最后介紹了嵌入式軟件的分類。
    發(fā)表于 08-31 15:54 ?1.6w次閱讀

    Python在嵌入式項目中的輔助開發(fā)總結

    Python在嵌入式項目中的輔助開發(fā)總結(嵌入式開發(fā)試題)-該文檔為Python在嵌入式項目中的輔助開發(fā)總結文檔,是一份很不錯的參考資料,具
    發(fā)表于 08-04 10:11 ?5次下載
    Python在<b class='flag-5'>嵌入式</b><b class='flag-5'>項目中</b>的輔助開發(fā)總結

    嵌入式項目基本架構

    機設備,也有溫度傳感器、人體傳感器等數(shù)據(jù)采集設備。關于它的詳細介紹見下面章節(jié)。 上位機:它的設計是純軟件。可以模擬嵌入式終端與云服務器調(diào)試、可以作為嵌入式終端的產(chǎn)測、可以作為云服務器的
    發(fā)表于 10-21 12:21 ?4次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>項目</b>基本架構

    嵌入式軟件開發(fā)的特點、設計流程、嵌入式軟件的結構

    處理器內(nèi)部儲存器資源中。3.嵌入式軟件的開發(fā)一般需要開發(fā)工具、目標系統(tǒng)、測試設備。4.嵌入式軟件對實時的要求更高。5.
    發(fā)表于 11-03 15:21 ?38次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發(fā)的特點、設計流程、<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的結構

    軟件兼容性測試報告模板

    兼容性測試 兼容性測試報告 軟件兼容性測試要考慮什么?》 1、向前兼容和向后兼容。向前
    的頭像 發(fā)表于 01-05 10:24 ?937次閱讀
    主站蜘蛛池模板: 欧美黄色片在线播放 | 亚洲一区高清 | 日韩一级片在线免费观看 | 男人天堂网在线观看 | 黄色在线观看网址 | 成人区精品一区二区毛片不卡 | 免费在线观看a | 四虎最新免费网址 | 亚洲综合一二三区 | 4438成人成人高清视频 | 亚洲国产香蕉视频欧美 | 日本污视频在线观看 | 天天干天天干天天干天天干天天干 | 性久久久久 | 成人免费看黄页网址大全 | 香港经典a毛片免费观看爽爽影院 | 六月丁香激情网 | 在线免费黄 | 3p性小说 | 婷婷丁香久久 | 国产美女精品久久久久久久免费 | 欧美成人午夜不卡在线视频 | 美日韩免费视频 | 狠狠色噜噜综合社区 | 色老头成人免费视频天天综合 | 女bbbbxxxx毛片视频 | 亚洲欧美色鬼久久综合 | 久久亚洲国产成人影院 | 你懂的福利 | 免费伦费一区二区三区四区 | 中文字幕一区视频 | 华人黄网站大全 | 国产老肥熟xxxx | 伊人男人天堂 | www.色噜噜| 泰剧天堂 | 2018天天操夜夜操 | 午夜高清视频在线观看 | 美女又黄又www | 钻石午夜影院 | 明日花绮罗在线观看 |