哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

3天內不再提示

靜態(tài)分析有助于代碼可移植性

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Chris Tapp ? 2022-06-28 11:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

typedef 無符號字符 U8;

typedef unsigned int U16;

typedef unsigned long U32;

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

typedef 無符號字符 U8;

typedef 無符號短 U16;

typedef unsigned int U32;

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

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

編譯器實現(xiàn)引起的可移植性問題

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

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

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

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

編碼標準

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

C 中的整數(shù)轉換

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

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

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

U8 u8a = 200U;

U8 u8b = 100U;

U8 u8r = u8a + u8b;

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

但是,當整數(shù)提升與隱式擴展轉換同時發(fā)生時,可能會造成混淆??紤]以下:

U16 u16a = 0xffffU;

U16 u16b = 0x0001U;

U32 u32r = u16a + u16b;

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

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

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

u32r = (u32) u16a + u16b;

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

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

poYBAGK6fCGAQ1o2AAH-WXrqZfA267.png

整數(shù)提升也會影響其他操作??紤]以下:

u16a = 0x1234U;

u16r = ~u16a 》》 8;

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

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

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

u16r = ( U16 )~u16a 》》 8;

評估代碼適用性

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

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

pYYBAGK6fCqAaVH9AAKRnPFNo9U070.png

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

審核編輯:郭婷

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

    關注

    22

    文章

    2124

    瀏覽量

    77351
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Perforce 靜態(tài)分析現(xiàn)已正式支持 Rust語言!

    您是否正計劃通過 Rust 編程來提升內存安全,卻又擔心它無法覆蓋所有的安全漏洞?Perforce QAC 和 Klocwork 現(xiàn)在已支持分析 Rust 代碼,填補了開源代碼檢查工
    的頭像 發(fā)表于 04-08 15:38 ?400次閱讀
    Perforce <b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>現(xiàn)已正式支持 Rust語言!

    愛立信與T-Mobile合作測試驗證Cloud RAN軟件可移植性

    愛立信與T-Mobile已在英偉達人工智能基礎設施上成功測試愛立信Cloud RAN軟件,該測試驗證了愛立信Cloud RAN軟件的可移植性,并提供了網(wǎng)絡自由選擇計算機解決方案的道路。
    的頭像 發(fā)表于 03-14 10:43 ?1472次閱讀

    分析嵌入式軟件代碼的漏洞-代碼注入

    安全漏洞時,測試人員必須采取一個攻擊者的心態(tài)。 諸如模糊測試的技術可能是有用的,但是該技術通常太隨機,無法高度可靠。 靜態(tài)分析可以有效地發(fā)現(xiàn)代碼注入漏洞。注意到早期生成的靜態(tài)
    發(fā)表于 12-22 12:53

    【新啟航】碳化硅襯底 TTV 厚度不均勻測量的特殊采樣策略

    質量評估提供更可靠的數(shù)據(jù)支持。 引言 在碳化硅半導體制造領域,晶圓總厚度變化(TTV)不均勻是影響器件性能和良率的關鍵因素。精確測量 TTV 厚度不均勻有助于及時發(fā)
    的頭像 發(fā)表于 08-28 14:03 ?784次閱讀
    【新啟航】碳化硅襯底 TTV 厚度不均勻<b class='flag-5'>性</b>測量的特殊采樣策略

    碳化硅襯底 TTV 厚度不均勻測量的特殊采樣策略

    質量評估提供更可靠的數(shù)據(jù)支持。 引言 在碳化硅半導體制造領域,晶圓總厚度變化(TTV)不均勻是影響器件性能和良率的關鍵因素。精確測量 TTV 厚度不均勻有助于及時發(fā)
    的頭像 發(fā)表于 08-27 14:28 ?1244次閱讀
    碳化硅襯底 TTV 厚度不均勻<b class='flag-5'>性</b>測量的特殊采樣策略

    什么是熱重分析法(TGA)

    分析為LED產品的品質控制和優(yōu)化提供了關鍵數(shù)據(jù)支持,有助于確保LED在實際應用中的穩(wěn)定性和耐用。熱重分析的構成熱重分析儀主要由以下幾個關鍵
    的頭像 發(fā)表于 08-19 21:29 ?1307次閱讀
    什么是熱重<b class='flag-5'>分析</b>法(TGA)

    大模型真的有助于自動駕駛落地嗎?

    其實大模型帶來的并不是單一的“萬能解”,而是一個能夠顯著提升認知、生成和推理能力的新工具箱。它能加速數(shù)據(jù)閉環(huán)、提升對復雜場景的理解、改善人機交互、并在工程流程中提高效率。
    的頭像 發(fā)表于 08-16 09:43 ?1293次閱讀
    大模型真的<b class='flag-5'>有助于</b>自動駕駛落地嗎?

    汽車軟件團隊必看:基于靜態(tài)代碼分析工具Perforce QAC的ISO 26262合規(guī)實踐

    ISO 26262合規(guī)指南,從ASIL分級到工具落地,手把手教你用靜態(tài)代碼分析(Perforce QAC)實現(xiàn)高效合規(guī)。
    的頭像 發(fā)表于 08-07 17:33 ?1295次閱讀
    汽車軟件團隊必看:基于<b class='flag-5'>靜態(tài)</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>工具Perforce QAC的ISO 26262合規(guī)實踐

    從手寫代碼到AUTOSAR工具鏈:J1939Tp應用篇

    J1939Tp是我學習AUTOSAR CP諸多BSW模塊的起點,其分層架構完美體現(xiàn)了AUTOSAR規(guī)范的精髓,掌握J1939Tp有助于深入理解通信(COM)相關模塊的程序執(zhí)行過程。
    的頭像 發(fā)表于 07-10 16:37 ?5415次閱讀
    從手寫<b class='flag-5'>代碼</b>到AUTOSAR工具鏈:J1939Tp應用篇

    機智云配網(wǎng)教程第三期:單片機代碼移植實戰(zhàn)

    :stm32f103c8t6,WiFi模塊:ESP-01s,下載器:ST-LINK2.軟件:keil5的工程文件模板,mcu代碼代碼資源:未移植移植后(注:本文是基于stm32標
    的頭像 發(fā)表于 07-01 17:32 ?2074次閱讀
    機智云配網(wǎng)教程第三期:單片機<b class='flag-5'>代碼</b><b class='flag-5'>移植</b>實戰(zhàn)

    直流電能表銘牌圖標、數(shù)字的含義,你認識多少?

    了解這些內容的含義,有助于您在購買電能表時準確選型。
    的頭像 發(fā)表于 06-06 13:53 ?2697次閱讀
    直流電能表銘牌圖標、數(shù)字的含義,你認識多少?

    山東LP-SCADA故障回溯功能的好處

    或歷史數(shù)據(jù)的采集與分析,能夠快速定位故障發(fā)生的時間、地點和可能的原因,從而顯著提高故障排查的效率。這有助于減少停機時間,降低生產損失。 精準定位故障根源 在故障發(fā)生時,僅憑現(xiàn)場觀察和經驗判斷往往難以準確找到
    發(fā)表于 05-29 14:42

    如何在恩智浦FRDM開發(fā)平臺上實現(xiàn)代碼的高效復用

    從零開始評估微控制器可能充滿挑戰(zhàn)。即使在編寫代碼之前,開發(fā)人員也需要深入了解想要使用的外設的特性。它們是否能夠在不同產品間以一致方式運行?這些所謂的可移植性究竟有多可靠?面對這些不確定性,創(chuàng)建真正可移植
    的頭像 發(fā)表于 05-27 14:35 ?1163次閱讀
    如何在恩智浦FRDM開發(fā)平臺上實現(xiàn)<b class='flag-5'>代碼</b>的高效復用

    STM32與機智云連接實現(xiàn)步驟與技巧(下篇):機智云代碼移植與優(yōu)化

    在《STM32與機智云連接實現(xiàn)步驟與技巧(上篇)》中,我們介紹了硬件連接和通信協(xié)議配置。本篇將重點講解如何將機智云相關代碼移植到STM32,完成數(shù)據(jù)上傳和設備控制。我們將介紹如何在STM32中配置
    的頭像 發(fā)表于 05-23 18:10 ?1304次閱讀
    STM32與機智云連接實現(xiàn)步驟與技巧(下篇):機智云<b class='flag-5'>代碼</b><b class='flag-5'>移植</b>與優(yōu)化

    基本電路分析(經典學習指導系列)

    對于電工技術、電氣工程方面的人士是個很好的借鑒,有助于電路分析。 從直流電阻電路分析開始,一直講到交流電路。 對于數(shù)學基礎方面,使用者不需要懂得微分或積分預算,用導數(shù)來說明電壓與電流
    發(fā)表于 05-13 15:29
    晋州市| 额敏县| 扎兰屯市| 西平县| 隆昌县| 潮安县| 汝州市| 象山县| 旅游| 定边县| 武穴市| 济宁市| 壶关县| 富宁县| 射阳县| 武山县| 阳春市| 镶黄旗| 内江市| 交口县| 深圳市| 汉沽区| 临湘市| 灵武市| 临沂市| 贡觉县| 富裕县| 佛山市| 汾西县| 平顶山市| 衡水市| 莲花县| 德格县| 怀仁县| 沅江市| 囊谦县| 定襄县| 崇仁县| 灵川县| 革吉县| 隆林|