www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 通常我們程序跑飛的原因有以下幾個(gè)方面:1 memset/ memcpy使用錯(cuò)誤錯(cuò)誤代碼aucCpyLength=NAME_DATA_LENGTH-((wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo+1)*TAG_PAGE_LENGTH);memset(pucCpyDestAdr

通常我們程序跑飛的原因有以下幾個(gè)方面:
1 memset/ memcpy使用錯(cuò)誤
錯(cuò)誤代碼
aucCpyLength=NAME_DATA_LENGTH-((wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo+1)*TAG_PAGE_LENGTH);
memset(pucCpyDestAdress + TAG_PAGE_LENGTH,0x00,aucCpyLength)
其中:NAME_DATA_LENGTH 為64
TAG_PAGE_LENGTH 為10

錯(cuò)誤原因

由于變量 wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo 為6 ,導(dǎo)致aucCpyLength=64-70=0xFA ,由于之后調(diào)用memset函數(shù),導(dǎo)致pucCpyDestAdress 地址開(kāi)始的0xFA個(gè)地址的內(nèi)容全部被改寫(xiě)為0 ,導(dǎo)致在進(jìn)行引擎控制時(shí)指針變量運(yùn)算錯(cuò)誤而指向非法區(qū)域運(yùn)行,最終程序跑飛。


解決方法

1 memset函數(shù)調(diào)用前對(duì)長(zhǎng)度進(jìn)行最大范圍的判斷容錯(cuò)處理,避免因長(zhǎng)度超出范
圍而導(dǎo)致其它變量被修改。
2 對(duì)參與長(zhǎng)度運(yùn)算的變量進(jìn)行檢討,避免在程序中賦上超出范圍的數(shù)值。
方法舉例
i f(NAME_DATA_LENGTH>=((wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo+1)* TAG_PAGE_LENGTH ))

{
aucCpyLength=NAME_DATA_LENGTH-((wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo+1)*TAG_PAGE_LENGTH);
memset(pucCpyDestAdress+ TAG_PAGE_LENGTH,0x00,aucCpyLength);
}

2 指針使用錯(cuò)誤
錯(cuò)誤代碼
INT8U* pucCDMode;
CDDRV_L1_wvdGetCDMP3Mode(pucCDMode);
其中函數(shù)原型void CDDRV_L1_wvdGetCDMP3Mode(INT8U* pucCDMode)
錯(cuò)誤原因 指針pucCDMode沒(méi)有被初始化就使用了。
解決方法

1 對(duì)指針pucCDMode初始化

2 使用自動(dòng)變量,通過(guò)自動(dòng)變量的地址進(jìn)行運(yùn)算。
方法舉例
INT8U pucCDMode;
CDDRV_L1_wvdGetCDMP3Mode(&pucCDMode);

3 數(shù)組控制錯(cuò)誤
錯(cuò)誤代碼
for(nuiBTDrvUartRcvSvCnt=REC_DATA_CMDID_ADDR1;nuiBTDrvUartRcvSvCnt

{
nucBTDrvReceiveSaveBuffer[nuiBTDrvUartRcvSvCnt]=nucBTUartReceiveBuffer[nuiBTDrvUartRcvRp];
nuiBTDrvUartRcvRp++;
if(nuiBTDrvUartRcvRp >= RECEIVE_DATA_LENGTH_MAX){
nuiBTDrvUartRcvRp = BT_DRV_NULL;
}
}
其中nucBTDrvReceiveSaveBuffer定義大小為 200


錯(cuò)誤原因

當(dāng)nuiBTDrvOnePacketDataSize 大于nucBTDrvReceiveSaveBuffer數(shù)組大小時(shí)即nuiBTDrvOnePacketDataSize>200時(shí),導(dǎo)致 nucBTDrvReceiveSaveBuffer+200地址之后的內(nèi)容被改寫(xiě),最終導(dǎo)致程序跑飛。
這種情況發(fā)生在BT通信有干擾信號(hào)時(shí)才會(huì)產(chǎn)生。
解決方法

取得數(shù)據(jù)的大小超過(guò)通信數(shù)組規(guī)定的大小范圍時(shí),丟棄錯(cuò)誤的數(shù)據(jù)或者作相應(yīng)的其他處理。也就是說(shuō)對(duì)數(shù)組賦值時(shí)需要判斷是否超出范圍,如果超出范圍則進(jìn)行相應(yīng)處理。
方法舉例

在錯(cuò)誤的代碼前加入容錯(cuò)處理。
if(nuiBTDrvOnePacketDataSize >= RECEIVE_DATA_PROC_LENGTH)
{
nuiBTDrvOnePacketDataSize = RECEIVE_DATA_PROC_LENGTH;
}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在這篇文章中,小編將對(duì)PLC的相關(guān)內(nèi)容和情況加以介紹以幫助大家增進(jìn)對(duì)它的了解程度,和小編一起來(lái)閱讀以下內(nèi)容吧。

關(guān)鍵字: PLC 模塊化 程序

對(duì)程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一。一般是優(yōu)化了代碼的尺寸,就會(huì)帶來(lái)執(zhí)行時(shí)間的增加;如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來(lái)代碼增加的副作用。很難魚(yú)與熊掌兼得,只能在...

關(guān)鍵字: 單片機(jī) 程序

一個(gè)程序首先要保證正確性,在保證正確性的基礎(chǔ)上,性能也是一個(gè)重要的考量。要編寫(xiě)高性能的程序,必須選擇合適的算法和數(shù)據(jù)結(jié)構(gòu)。

關(guān)鍵字: CPU 程序 緩存

仿真的概念其實(shí)使用非常廣,最終的含義就是使用可控的手段來(lái)模仿真實(shí)的情況。在嵌入式系統(tǒng)的設(shè)計(jì)中,仿真應(yīng)用的范圍主要集中在對(duì)程序的仿真上。

關(guān)鍵字: 單片機(jī) 仿真器 程序

步進(jìn)電動(dòng)機(jī)是將電脈沖激勵(lì)信號(hào)轉(zhuǎn)換成相應(yīng)的角位移或線位移的離散值控制電動(dòng)機(jī),這種電動(dòng)機(jī)每當(dāng)輸入一個(gè)電脈沖就動(dòng)一步,所以又稱(chēng)脈沖電動(dòng)機(jī)。

關(guān)鍵字: 步進(jìn)電機(jī) 正反轉(zhuǎn) 程序

KeilμVision4是Keil軟件公司為8051系列微控制器及其兼容產(chǎn)品設(shè)計(jì)的集成式軟件開(kāi)發(fā)環(huán)境。μVision4集成了C51編譯器和A51匯編器,其界面類(lèi)似于Microsoft VS,支持C語(yǔ)言和匯編語(yǔ)言程序的編寫(xiě)...

關(guān)鍵字: 程序 編譯 鏈接

雙方各執(zhí)一詞,誰(shuí)也不退讓?zhuān)瑓切郯旱纳矸莩蔀檠Χㄖ@的貓:在Arm公司眼中,他已經(jīng)被罷免一切職位;在安謀中國(guó)聲明里,吳仍然一切照常。這種疊加態(tài)或許還會(huì)持續(xù)一段時(shí)間,但疊加態(tài)應(yīng)該很快就會(huì)塌縮成一個(gè)確定結(jié)果。同樣,安謀中國(guó)董事會(huì)...

關(guān)鍵字: ARM 中國(guó)董事會(huì) 程序

除了指令空間,自定義指令對(duì)應(yīng)的程序出入口也有嚴(yán)格限制。自定義指令在使用過(guò)程中出現(xiàn)任何錯(cuò)誤時(shí),Arm的工具鏈都能及時(shí)對(duì)其進(jìn)行識(shí)別、提取,并且進(jìn)行相應(yīng)的控制。目前也已經(jīng)有第三方編譯器,可以識(shí)別自定義指令集可能會(huì)出現(xiàn)的錯(cuò)誤。專(zhuān)...

關(guān)鍵字: 指令空間 程序 ARM

如果說(shuō)一眾美國(guó)科技公司遵循特朗普命令斷供華為,還算某種程度上維護(hù)所謂程序正義不得已而為之;那么各路本應(yīng)對(duì)政治保持中立的國(guó)際技術(shù)標(biāo)準(zhǔn)組織,先后宣布剔除華為成員資格,絕對(duì)算助紂為虐;而聯(lián)邦快遞將華為委托寄送目的地為中國(guó)的快遞...

關(guān)鍵字: 快遞 華為 程序

在軟件開(kāi)發(fā)過(guò)程中,我們希望軟件可以運(yùn)行無(wú)誤。但是常常事與愿違,程序經(jīng)常跑飛,或者卡死。原因有很多,有可能是因?yàn)檐浖到y(tǒng)設(shè)計(jì)的原因,或者外部傳感器的失效,再或者是程序的Bug等。為了防止程序在出現(xiàn)問(wèn)題之后,可以順利復(fù)位和重...

關(guān)鍵字: 軟件 程序 傳感器
關(guān)閉