丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 問答

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】通過例子了解公交車錯誤,不要踩坑。

你好,我是雜湯君。

最近踩了公交車錯誤的坑,簡單總結(jié)了一下,再分享一下。

什么是公交車錯誤?

平時開發(fā)過程中,我們經(jīng)常遇到的導(dǎo)致流程崩潰的錯誤大部分是分段錯誤。段錯誤是指訪問超出系統(tǒng)提供的內(nèi)存空間的內(nèi)存,包括空指針操作、數(shù)組超出范圍等。

與段錯誤一樣,總線錯誤(Bus Error)是因?yàn)閷ξ磁判虻刂返脑L問導(dǎo)致CPU讀數(shù)據(jù)違反了特定的總線規(guī)則。

出于性能考慮,當(dāng)需要訪問數(shù)據(jù)時,CPU必須對地址進(jìn)行排序。如果不是地址排序訪問,SIGBUS信號將發(fā)送到進(jìn)程,進(jìn)程將生成核心dump。

總線錯誤與CPU體系結(jié)構(gòu)相關(guān),某些體系結(jié)構(gòu)中的CPU支持支持無序訪問。下面我們通過例子分析一下。

總線錯誤示例

# include

# include

#pragma pack(1)

Struct struct_x

{

CHAR A;

float b;

CHAR C;

}

#pragma pack()

int main(void)

{

struct struct _ x test={ 0 };

printf(' sizeof(struct struct _ x)=% LD \ n ',size of(測試));

=1;

=2.0;

=3;

char * a=;

float * b=;

char * c=;

Printf('*a=%d,addr=%p\n ',*a,a);

Printf('*b=%f,addr=%p\n ',*b,b);

Printf('*c=%d,addr=%p\n ',*c,c);

return 0;

}#pragma pack編譯器排序可以更改。

#pragma pack(n) /*指定以n字節(jié)對齊*/

#pragma pack() /*取消對齊自定義字節(jié)*/在PC端正常工作。

X86/x64系列CPU都支持非對齊訪問,因此還提供了禁用此機(jī)制的開關(guān)。如果X86/x64體系結(jié)構(gòu)不需要排序訪問,則會產(chǎn)生性能成本。

但是,在arm主板上測試以下內(nèi)容:

發(fā)生總線錯誤,因?yàn)楹诵淖兞縯est的成員B的地址是未排序的地址。CPU訪問地址要求是4字節(jié)對齊,訪問*(addr0x001)導(dǎo)致異常。

此時,請?jiān)趕truct_x的成員a、b之前添加占3個字節(jié)的成員d,以查看是否報告了錯誤。

Struct struct_x

{

CHAR A;

茶d[3];

float b;

CHAR C;

}

此時,成員b可以正常訪問,因?yàn)閎的地址在4字節(jié)對齊地址中。

上述公交車錯誤無疑是由于對齊問題造成的。

但是這里有一個疑問。將成員B的類型更改為int類型是否會導(dǎo)致總線錯誤?

# include

# include

#pragma pack(1)

Struct struct_x

{

CHAR A;

int b;

CHAR C;

}

#pragma pack()

int main(void)

{

struct struct _ x test={ 0 };

printf(' sizeof(struct struct _ x)=% LD \ n ',size of(測試));

=1;

=2;

=3;

char * a=;

int * b=;

char * c=;

Printf ('sizeof (float)=% d,sizeof (int)=% d \ n ',sizeof (float),sizeof (int)

Printf('*a=%d,addr=%p\n ',*a,a);

Printf('*b=%d,addr=%p\n ',*b,b);

Printf('*c=%d,addr=%p\n ',*c,c);

return 0;

}

其中,int類型的b成員可以正常訪問。其中,成員B的地址與上面發(fā)生總線錯誤的成員B的地址(float類型)完全相同。float類型和int類型也占用4個字節(jié),但int類型B成員可能支持未排序的訪問。

現(xiàn)在,暫時認(rèn)為CPU是這樣設(shè)計(jì)的。能說明這個問題的朋友歡迎評論討論。感謝大家。

摘要

上述int類型的B成員可以正常訪問,但在實(shí)際編程中,必須小心修改排序。如有必要,請嘗試使修改后的排序的代碼范圍盡可能小。例如,只關(guān)注結(jié)構(gòu)體,很清楚有這樣的事情,所以在后面添加代碼時要非常小心。

以上是這次分享。如果你認(rèn)為文章有幫助,請轉(zhuǎn)達(dá),謝謝。(大衛(wèi)亞設(shè))。

我想你喜歡:

共享好的嵌入式數(shù)據(jù)摘要貼紙。

1024G嵌入式資源廣播!包括但不限于C/C、單片機(jī)、Linux等。私信回復(fù)1024,可以免費(fèi)收到!

1.《【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】通過例子了解公交車錯誤,不要踩坑?!吩曰ヂ?lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】通過例子了解公交車錯誤,不要踩坑?!穬H供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/why/3089348.html

上一篇

【半自動洗衣機(jī)三個孔螺絲怎么卸】傳染病是通過在家清潔洗衣機(jī)來學(xué)習(xí)的。太簡單了

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】海爾線控制器故障確認(rèn)、參數(shù)確認(rèn)和鎖定

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】海爾線控制器故障確認(rèn)、參數(shù)確認(rèn)和鎖定

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,海爾線控制器故障排除: 海爾中央空調(diào)壞了,電線控制面板上會顯示帶有感嘆號的三角形。故障排除方法是(例如)將計(jì)時鍵長按5 ~ 10秒,左上角的數(shù)字閃爍,等待切換到錯誤代碼1E(十六進(jìn)制數(shù),1為16,e為...

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】Can總線分析工具的工作流示例

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】Can總線分析工具的工作流示例

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,今天以活動錯誤分析為例,總線診斷功能區(qū)顯示活動錯誤、錯誤警告和總線數(shù)據(jù)錯誤,如下圖所示。 診斷分析:此時,設(shè)備由于CAN通信傳輸速率不一致、電纜連接錯誤、終端電阻錯誤等原因,是CAN數(shù)據(jù)傳輸錯誤。請注...

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】Modbus的通信參數(shù)存在于flash中。如果感到困惑,該怎么辦

  • 【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】Modbus的通信參數(shù)存在于flash中。如果感到困惑,該怎么辦
  • 【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】Modbus的通信參數(shù)存在于flash中。如果感到困惑,該怎么辦
  • 【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】Modbus的通信參數(shù)存在于flash中。如果感到困惑,該怎么辦
【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】海爾XQG65-HB1286變頻輥顯示EARu通信故障維修。

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】海爾XQG65-HB1286變頻輥顯示EARu通信故障維修。

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,海爾XQG65-HB1286變頻滾筒洗衣機(jī)。2011年購買,洗衣機(jī)壞了,維修過程記錄如下。對大家都有參考的用途。這臺洗衣機(jī)的工作控制和電機(jī)驅(qū)動分別由工作顯示控制、變頻電機(jī)驅(qū)動板兩個儀表板控制。 變頻驅(qū)...

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】總結(jié)液晶電視進(jìn)入公共汽車的方法,希望對機(jī)械師有用

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】總結(jié)液晶電視進(jìn)入公共汽車的方法,希望對機(jī)械師有用

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,LCD電視主板如何進(jìn)入公交車,如果你知道更多朋友,歡迎添加。 海神:從菜單中選擇“平衡音量”,然后按1969鍵 昌紅:把音量降低到0,按靜音,按菜單按鈕,然后按0816 音樂視頻:信號源2580 江歌...

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】總結(jié)的幾種液晶電視進(jìn)入公交車的方法。

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】總結(jié)的幾種液晶電視進(jìn)入公交車的方法。

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,LCD電視主板如何進(jìn)入公交車,如果你知道更多朋友,歡迎添加。 海神:從菜單中選擇“平衡音量”,然后按1969鍵 昌紅:把音量降低到0,按靜音,按菜單按鈕,然后按0816 音樂視頻:信號源2580 江歌...

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】十大品牌液晶電視總線的進(jìn)入方法與調(diào)整

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】十大品牌液晶電視總線的進(jìn)入方法與調(diào)整

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,十大品牌液晶電視總線的進(jìn)入方法與調(diào)整 1、海信電視進(jìn)入工程模式方法 用遙控器選擇,菜單-在聲音設(shè)置中選擇平衡,輸入0532即可進(jìn)入工程模式。海信電視都是這樣的。 這個輸入。 2、LG等離子體工程模式輸...

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】海爾LCD電視LE42A520不開燈,也不修理——食物,真是可惜。

【海爾總線數(shù)據(jù)調(diào)亂了怎么辦】海爾LCD電視LE42A520不開燈,也不修理——食物,真是可惜。

海爾總線數(shù)據(jù)調(diào)亂了怎么辦相關(guān)介紹,電話維修海爾LCD TV LE42A520開機(jī)燈也不亮,現(xiàn)場測試電源5V、12V、24V正常,板上穿孔,無法維修,X寶買了板子,開門滑稽表情。(屏幕參數(shù)不對,公交車也找不到調(diào)試項(xiàng)目,公交車方法Me 先...