原創(chuàng)|行業(yè)資訊|編輯:鄭恭琳|2020-08-27 10:16:21.510|閱讀 492 次
概述:自成立以來,Gimpel軟件就一直為嵌入式和安全關(guān)鍵軟件社區(qū)提供支持,而我們的工具已經(jīng)為MISRA和其他相關(guān)編碼標準提供了近20年的支持。當前版本的PC-lint Plus通過引入對AUTOSAR17編碼準則的支持而建立在此跟蹤記錄的基礎(chǔ)上。1.3版支持將近200條準則(超過60%的靜態(tài)可檢查準則),并且在每個發(fā)行版中都添加了對其他準則的支持。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
自成立以來,Gimpel軟件就一直為嵌入式和安全關(guān)鍵軟件社區(qū)提供支持,而我們的工具已經(jīng)為MISRA和其他相關(guān)編碼標準提供了近20年的支持。當前版本的PC-lint Plus通過引入對AUTOSAR17編碼準則的支持而建立在此跟蹤記錄的基礎(chǔ)上。1.3版支持將近200條準則(超過60%的靜態(tài)可檢查準則),并且在每個發(fā)行版中都添加了對其他準則的支持。
通過專用診斷程序支持許多準則,以確保準確分析與準則及其例外相關(guān)的細節(jié)。通過將對au-autosar.lnt文件(隨PC-lint Plus分發(fā))的引用添加到您的現(xiàn)有配置中,可以很容易地完成對AUTOSAR兼容性的檢查。該文件啟用與AUTOSAR準則相對應(yīng)的消息,并將文本添加到已發(fā)布的消息中,以指定與每個適用消息關(guān)聯(lián)的規(guī)則。au-autosar.lnt文件是使用標準PC-lint Plus選項語法的,易于閱讀的純文本配置文件,可以輕松地對其進行修改以滿足任何單個項目的需求。
PC-lint Plus隨附的參考手冊包括一個支持矩陣,詳細列出了每個指南的支持級別以及每個指南的支持機制。
考慮以下示例:
using int32_t = int; namespace Networking { enum class MsgType { NORMAL, SYN, ACK, ERROR, OTHER }; class CommMsg { public: CommMsg(int32_t msg_id = 0); virtual ~CommMsg(); CommMsg & operator=(const CommMsg& other) { _msg_id = other._msg_id; _payload = other._payload; _mt = other._mt; } private: int32_t _msg_id; void * _payload; MsgType _mt; }; }
當使用PC-lint Plus分析此示例時,報告的AUTOSAR違規(guī)包括(其中包括):
note 9418: enum 'Networking::MsgType' does not have an explicitly specified
underlying type [AUTOSAR Rule A7-2-2]
enum class MsgType { NORMAL, SYN, ACK, ERROR, OTHER };
^
note 9169: constructor 'Networking::CommMsg::CommMsg(int32_t)' can be used for
implicit conversions from fundamental type 'int32_t' (aka 'int') [AUTOSAR Rule A12-1-4]
CommMsg(int32_t msg_id = 0);
^
warning 1529: assignment operator 'Networking::CommMsg::operator=' should check
for self-assignment [AUTOSAR Rule A12-8-5]
CommMsg & operator=(const CommMsg& other) {
^
賦值運算符似乎并未檢查是否將變量的值賦值給它自己(賦值給它)。具體來說,PC-lint Plus正在尋找賦值運算符的第一條語句,如果它是if語句,則使用==或!=將其與&argument或std::addressof(argument)進行比較。
重要的是檢查自我分配,以便知道舊值是否應(yīng)進行刪除操作。類分配器經(jīng)常忽略這一點,因為分配給自己是違反直覺的。但是,通過使用別名(指針、引用、函數(shù)參數(shù))的魔術(shù),一個毫無戒心的程序員可能會偶然發(fā)現(xiàn)一個偽裝的自賦值。
如果您當前正在使用以下測試
if( arg == *this)
我們建議您將其替換為更有效的方法:
if( &arg == this || arg == *this)
有關(guān)指定規(guī)則的信息,請查閱AUTOSAR指南文檔。
在上面的示例中,將以下測試添加到CommMsg::operator=的開頭即可解決1529報告的問題(并將防止在以后的運行中發(fā)布1529):
if (this == &other) { return *this; }
偏差是指源代碼中違反規(guī)則的情況被視為可接受的實例。當針對AUTOSAR的合規(guī)性時,“必需”規(guī)則而不是“咨詢”規(guī)則必須有形式上的偏差。在這兩種情況下,都可以使用適當?shù)囊种圃?strong>PC-lint Plus中配置偏差。當引用特定的符號或類型時,或在特定的行上時,可以通過多種方式來抑制大多數(shù)消息,例如在文件,函數(shù)或語句中。某些類型的禁止操作要求在源代碼中添加注釋,但大多數(shù)不需要。
例如,消息9418報告違反了AUTOSAR規(guī)則A7-2-2(要求枚舉在其定義中明確指定基礎(chǔ)類型),該消息始終在消息中包含枚舉的名稱。要僅針對該定義禁止顯示消息9418,可以將-esym(9418,Networking :: MsgType)選項添加到項目的配置文件中,或在包含有問題的定義的源代碼中的lint注釋中。評論可以遵循此選項,也許帶有與正式偏離政策相關(guān)的信息,例如-esym(9418,Networking::MsgType)“A7-2-2的偏差,請參見ABC-123進行批準”。
PC-lint Plus區(qū)分庫代碼(默認情況下包括外部和系統(tǒng)頭,但可以自定義以包括頭和模塊的任何子集)和項目代碼。默認情況下,PC-lint Plus將檢查庫代碼和項目代碼是否符合AUTOSAR。通常希望將檢查范圍限制為項目代碼,這很容易在引用au-misra3.lnt文件后,通過使用選項-wlib=4 -wlib=1來重置庫警告級別來完成。也可以使用-elib和+elib選項輕松地為庫代碼啟用或禁用單個消息。
相關(guān)推薦:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn