色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

靜態分析有助于代碼可移植性

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Chris Tapp ? 2022-06-28 11:56 ? 次閱讀

代碼重用通常是新項目中的主要考慮因素,無論是在利用先前項目的遺留代碼方面,還是作為后續項目的基礎。靜態分析可用于確保遺留代碼不會成為項目中問題的根源,并保證在其開發過程中生成的任何代碼不會影響任何將其作為代碼庫的項目。

C 代碼特別容易受到移植問題的影響,特別是因為不能期望編譯器檢測到它們,因為代碼將符合語言規范(假設沒有使用語言擴展)。因此,開發人員必須使用靜態分析工具來確認移植將按計劃進行。靜態分析工具可以通過多種方式幫助解決此問題。

int 大小引起的可移植性問題

int 中的精度(位數)可能因系統而異。為了解決這個問題,通常定義一組 typedef 來將系統類型映射到應用程序類型。可以為 16 位架構定義以下示例:

typedef 無符號字符 U8;

typedef unsigned int U16;

typedef unsigned long U32;

如果將代碼移植到 32 位架構,則此示例可以更改為以下內容:

typedef 無符號字符 U8;

typedef 無符號短 U16;

typedef unsigned int U32;

然而,移植并不是那么簡單,因為 int 大小的變化會對代碼產生一些不太明顯的影響。例如,其結果取決于整數提升效果的任何表達式都可能表現出不同的行為。因此,只有在包含受影響類型的對象的所有表達式中的精度符合目的時,這種更改才合適。靜態分析可以用來驗證這個假設。

編譯器不會報告任何這些問題,因為代碼對于目標環境完全有效,即使它的行為可能不符合預期。

編譯器實現引起的可移植性問題

與編譯器相關的實現定義的、未指定的或未定義的行為的差異可能會導致移植時出現缺陷。

實現定義的行為是編譯器之間可能不同但由編譯器供應商記錄的行為。靜態分析工具可以檢測調用此類行為的代碼,以便將其消除以促進移植。

也可以檢測到未指定或未定義的行為;但是,它帶來的不僅僅是可移植性問題,因為這種行為可能會在同一編譯器的不同版本之間以未記錄的方式發生變化,甚至可能在同一編譯器內的各種用例之間發生變化。調用這種行為的代碼可以工作,但很可能會非常脆弱。值得注意的是,遷移到不同版本的編譯器可以被視為移植。

編譯器不需要檢測實現定義的、未指定的或未定義的行為的使用,因為代碼是完全有效的。

編碼標準

諸如 MISRA C:2004 (www.misra-c.com) 等公開可用的編碼標準,可以通過靜態分析工具嚴格執行,包括防御這些可移植性問題的規則。后面的例子使用了這個標準。

C 中的整數轉換

在 C 中對表達式求值期間,管理不同算術類型的隱式轉換方式和時間的規則很復雜。為確保移植代碼時結果符合預期,在考慮了所有此類隱式轉換后,表達式中的所有操作都應以相同的類型進行。

與整數提升相關的隱式轉換很容易導致代碼的執行方式與開發人員期望的方式大不相同。整數提升基本上要求將任何小于 int 的類型(例如 char、short)轉換為 int,然后再將其用作表達式中的操作數。許多嵌入式系統廣泛使用這些類型,因為它們通常允許更有效地使用內存資源,這可能會受到限制以節省成本、空間和功率。

整數提升是保值的(意味著保留大小和符號),但對象的符號可能會改變。此外,表達式將以比操作數類型更寬的類型進行計算。考慮以下示例:

U8 u8a = 200U;

U8 u8b = 100U;

U8 u8r = u8a + u8b;

在此示例中,u8a 和 u8b 在加法發生之前都被轉換為寬度至少為 16 位的有符號整數。然后將加法的結果隱式轉換回 8 位,然后再存儲到 u8r 中。在這種情況下,開發人員可能會期待結果 (44),因為可以合理地假設他們知道賦值時發生的模 2 運算。這意味著結果實際上與以 8 位精度進行操作時的結果相同(整數提升不影響結果)。

但是,當整數提升與隱式擴展轉換同時發生時,可能會造成混淆。考慮以下:

U16 u16a = 0xffffU;

U16 u16b = 0x0001U;

U32 u32r = u16a + u16b;

在 32 位架構上,u32r 的類型為 unsigned int,而 u16a 和 u16b 的類型為 unsigned short。整數提升將導致操作數在加法之前轉換為有符號整數,結果將在賦值時隱式轉換為無符號整數,最終值為 0x10000。開發人員可以(也許有理由)依靠發生的整數提升來確保加法不會像使用 16 位算術時那樣換行。

如果開發人員決定將代碼移植到 16 位架構,則 u32r 將具有 unsigned long 類型,而 u16a 和 u16b 將具有 unsigned int 類型。這一次,在加法發生之前(也在 unsigned int 中),不會對已經是 unsigned int 的操作數應用任何轉換,并且 0x0000 的結果將在賦值時隱式轉換為 unsigned long,最終值為0x0000。以更廣泛的類型執行添加的假設現在不再有效,并且存在發生意外回繞的風險。

這表明當代碼從一個平臺移植到另一個平臺時,它可以多么容易地表現出不同的行為。這里的真正問題與在分配結果時發生的隱式擴大轉換有關。這可以通過確保始終使用強制轉換以必要的精度評估表達式來消除,例如:

u32r = (u32) u16a + u16b;

( u32 ) 強制轉換確保表達式始終以具有適當精度的類型進行評估。在前面的示例中,這意味著表達式是以 unsigned long 而不是 unsigned int 計算的。如圖 1 所示,靜態分析可以很容易地檢測到隱式加寬。

圖 1: LDRA 工具套件等靜態分析工具可以突出顯示有效 C 代碼中的問題,這些問題在移植時可能導致功能錯誤。因為代碼是有效的 C,編譯器不會檢測到這些問題。

poYBAGK6fCGAQ1o2AAH-WXrqZfA267.png

整數提升也會影響其他操作。考慮以下:

u16a = 0x1234U;

u16r = ~u16a 》》 8;

在 16 位架構上,這將導致 u16a 的位被反轉,頂部字節移入底部字節,將 0x00ED 分配給 u16r。

但是,在 32 位架構上,u16a 將在補碼發生之前轉換為帶符號的 int(32 位),從而將值 0xFFED 分配給 u16r。

再一次,使用強制轉換將確保行為符合預期:

u16r = ( U16 )~u16a 》》 8;

評估代碼適用性

靜態分析工具是代碼移植的寶貴幫助。如圖 2 所示,這些工具允許開發人員評估遺留代碼并確保以允許移植的方式開發新代碼。

圖 2:靜態分析工具報告,例如 LDRA 工具套件中的這個示例,可以有效評估代碼移植的適用性。

pYYBAGK6fCqAaVH9AAKRnPFNo9U070.png

在項目生命周期中盡早采用靜態分析將確保盡早驗證遺留代碼,并確保任何新代碼從一開始就可移植。通過縮短開發時間和顯著降低殘留缺陷水平,開發人員可以快速收回使用此類工具所涉及的初始支出。

審核編輯:郭婷

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

    關注

    22

    文章

    2114

    瀏覽量

    73785
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49231
收藏 人收藏

    評論

    相關推薦

    如何提高嵌入式代碼質量?

    的功能,有助于提高代碼的復用和可維護。 2. 清晰的文檔:包括設計文檔、接口文檔和代碼注釋,能夠幫助開發人員理解
    發表于 01-15 10:48

    系統化課程體系——2天倒計時!

    包括:電磁兼容、信號完整和電氣安全。時域和頻域分析有助于優化電磁問題。了解電流定律和電磁場原理有助于識別輻射源和傳導路徑。接地設計是減少
    的頭像 發表于 12-16 09:52 ?230次閱讀
    系統化課程體系——2天倒計時!

    紅外感應單片機在智能衛浴的抗干擾分析

    一、自身優勢帶來的抗干擾潛力 自帶恒流驅動電路 :XD08M3232單片機自帶恒流驅動電路,這一特性可能有助于增強其在智能衛浴環境中的抗干擾。因為恒流驅動電路可以使相關感應部件的工作電流保持穩定
    發表于 12-14 15:41

    魯棒分析方法及其應用

    對輸出的影響,找出最敏感的輸入。這有助于識別哪些參數或輸入對系統或算法的性能影響最大,從而在設計時給予更多的關注。 壓力測試 :以超出正常范圍的輸入測試系統,找出崩潰或產生不可接受輸出的臨界點。這種方法能夠模擬極端情況,評估
    的頭像 發表于 11-11 10:21 ?2541次閱讀

    汽車異構硬件平臺開發如何進行靜態代碼分析

    先進的靜態代碼分析工具,其新版本中引入的多CCT功能為開發人員提供了強大的支持,該功能不僅簡化了多編譯器環境下的代碼分析過程,還可以極大增強
    的頭像 發表于 10-09 16:15 ?570次閱讀
    汽車異構硬件平臺開發如何進行<b class='flag-5'>靜態</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>

    多級寬帶放大器各級之間pcb獨立分開,信號線用sma線相接,電源線用普通銅線導線,有助于抗干擾嗎?

    請問,多級寬帶放大器各級之間pcb獨立分開,信號線用sma線相接,電源線用普通銅線導線,有助于抗干擾么?
    發表于 09-05 06:35

    關于一些有助于優化電源設計的新型材料

    眾所周知,人們對更高電源效率的追求正在推動性能的全方位提升。材料科學的進步對于優化電源設計和開發更高效、更緊湊和更可靠的解決方案發揮著關鍵作用。下文列出了一些有助于優化電源設計的新材料。
    的頭像 發表于 08-29 15:26 ?481次閱讀

    MSPM0-高級控制計時器有助于實現更好的控制和更好的數字輸出

    電子發燒友網站提供《MSPM0-高級控制計時器有助于實現更好的控制和更好的數字輸出.pdf》資料免費下載
    發表于 08-28 11:30 ?0次下載
    MSPM0-高級控制計時器<b class='flag-5'>有助于</b>實現更好的控制和更好的數字輸出

    恒訊科技分析:香港站群服務器為什么要做偽靜態處理呢?

    提高搜索引擎優化(SEO)效果:偽靜態處理可以使得動態網頁URL看起來像是靜態網頁的URL,這有助于搜索引擎更好地索引網站內容。搜索引擎通常偏好靜態網頁,因為它們認為
    的頭像 發表于 07-31 12:49 ?299次閱讀

    有助于提高網絡設備性能的FRAM SF25C20(MB85RS2MT)

    有助于提高網絡設備性能的FRAM SF25C20(MB85RS2MT)
    的頭像 發表于 07-25 09:49 ?320次閱讀
    <b class='flag-5'>有助于</b>提高網絡設備性能的FRAM SF25C20(MB85RS2MT)

    國內低代碼平臺推薦--萬界星空科技低代碼平臺

    代碼平臺是一種應用程序,它為編程提供圖形用戶界面,從而以極快的速度開發代碼,減少傳統編程工作。 這些工具有助于快速開發代碼,最大限度地減少手工編碼的工作量。這些平臺不僅
    的頭像 發表于 07-18 15:39 ?340次閱讀
    國內低<b class='flag-5'>代碼</b>平臺推薦--萬界星空科技低<b class='flag-5'>代碼</b>平臺

    愛普生的高精度傳感技術有助于監控自動化

    Epson、JREast和NaganoKeiki聯合開發了一種適用于鐵路運營商的實用撓度監測設備-愛普生的高精度傳感技術有助于監控自動化-SeikoEpsonCorporation(TSE:6724
    的頭像 發表于 06-27 10:53 ?377次閱讀
    愛普生的高精度傳感技術<b class='flag-5'>有助于</b>監控自動化

    基于MM32F5270的Ethernet實現LwIP協議棧移植

    LwIP是輕量化的TCP/IP協議,由瑞典計算機科學院(SICS)的Adam Dunkels 開發的一個小型開源的TCP/IP協議棧。LwIP具有高度可移植性代碼開源,提供了三種編程接口(API):RAW API、NETCONN API 和 Socket API,用于與
    的頭像 發表于 06-21 10:28 ?1294次閱讀
    基于MM32F5270的Ethernet實現LwIP協議棧<b class='flag-5'>移植</b>

    FPGA的IP軟核使用技巧

    夠與所使用的FPGA平臺和開發工具無縫集成。 閱讀和理解IP軟核的文檔 : 在使用IP軟核之前,務必仔細閱讀和理解其提供的文檔,包括用戶手冊、技術參考手冊、示例代碼等。這將有助于您更好地理解IP軟核
    發表于 05-27 16:13

    在微芯片上使用3D反射器堆棧有助于加快6G通信的發展

    一項新的研究發現,在微芯片上使用3D反射器堆棧可以使無線鏈路的數據速率提高三倍,從而有助于加快6G通信的發展。
    的頭像 發表于 03-13 16:31 ?734次閱讀
    主站蜘蛛池模板: yellow视频免费观看| 91精品一区二区三区在线观看| 国产午夜不卡| 欧美18精品久久久无码午夜福利 | 天天躁日日躁狠狠躁午夜剧场| 拔萝卜在线高清观看视频| 年轻的搜子8中字在线观看| 51国产偷自视频在线视频播放| 久久中文字幕乱码免费| 91麻豆精品| 青柠在线观看免费完整版| 穿着丝袜被男生强行啪啪| 我把寡妇日出水好爽| 国产网站免费观看| 一品道门免费视频韩国| 久久偷拍国2017的| 99久女女精品视频在线观看| 全免费a级毛片免费看| 国产精品成人啪精品视频免费观看| 无码欧美喷潮福利XXXX| 国产色精品久久人妻无码看片| 亚洲精品色情婷婷在线播放| 黑丝美女被人操| 强姧伦久久久久久久久| 高清 国产 在线 亚洲| 无码国产成人午夜在线观看不卡| 国产人成无码视频在线观看| 亚洲视频一区| 嗯啊好爽视频| 国产二区自拍| 伊人影院综合网| 欧美一区二区三区久久综| 国产99视频精品一区| 亚洲毛片网| 女人被躁到高潮嗷嗷叫69| 超碰caoporen国产| 亚洲成人黄色在线| 两个人的视频日本在线观看完整| FREE性丰满HD毛多多| 亚洲国产亚综合在线区尤物| 免费99精品国产人妻自在线|