久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
MCU不定時死機-移植STM32標準例程惹的禍
[打印本頁]
作者:
guyu98
時間:
2021-9-14 13:47
標題:
MCU不定時死機-移植STM32標準例程惹的禍
在開發一款智能化儀器時,需定時采集數據,并同時進行數據分析、儲存和遠距離光纖傳送。因此選用了帶有浮點運算功能的STM32F407高性能 MCU。也移植了許多STM32F4的標準例程。程序編譯仿真等一切順利。但試運行時不定時死機,多則幾天,少則幾小時,毫無規律。
死機的原因很多,如環境干擾;電路板設計不合理產生自激;中斷沖突;中斷程序中沒有清除中斷標志位;地址溢出;堆棧溢出;無條件的死循環等等。
因是試機時死機,所以首先考慮環境干擾問題,經屏蔽隔離,消除環境干擾后,故障依舊,機外因素排除。
認真檢查了各中斷優先等級,設置的中斷時刻,中斷服務函數等均無任何沖突。仿真檢查也無異常。折騰了一天,程序梳理了幾遍,也沒發現蛛絲馬跡,但故障依舊。
無奈之際,利用逐一停用程序模塊的方法發現了問題,當停用sd卡模塊后不再死機。可以斷定問題出在SD卡模塊上,但是SD卡模塊程序是移植的標準例程,不會是標準例程有問題吧!
于是對sdio_sdcard.c文件逐句分析。在SD_Error SD_SelectDeselect(u32 addr)函數中發現如下加黑的語句:
while(SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
{
*tempbuff=SDIO->FIFO;
tempbuff++;
}
INTX_ENABLE();
SDIO_ClearFlag(SDIO_STATIC_FLAGS);
}else if(DeviceMode==SD_DMA_MODE)
{
TransferError=SD_OK;
StopCondition=0;
TransferEnd=0;
SDIO->MASK|=(1<<1)|(1<<3)|(1<<8)|(1<<5)|(1<<9);
SDIO->DCTRL|=1<<3;
SD_DMA_Config((u32*)buf,blksize,DMA_DIR_PeripheralToMemory);
while(((DMA2->LISR&(1<<27))==RESET)&&(TransferEnd==0)&&(TransferError==SD_OK)&&timeout)timeout--;
if(timeout==0)return SD_DATA_TIMEOUT;
if(TransferError!=SD_OK)errorstatus=TransferError;
}
return errorstatus;
}
匯編語言中
CPSID I PRIMASK=1 是關閉中斷
CPSIE I PRIMASK=0 是開啟中斷
INTX_ENABLE()是在sys.h中用匯編語言定義的開啟所有中斷函數;
即:
_asm void INTX_ENABLE(void)
{
CPSIE I
BX LR
}
INTX_DISABLE()是在sys.h中用匯編語言定義的關閉所有中斷函數;
即:
__asm void INTX_DISABLE(void)
{
CPSID I
BX LR
}
指令“CPSID I和CPSIE I”都是對狀態寄存器CPSR中中斷標志位進行操作,只是簡單的不讓CPU響應中斷,并沒有阻止中斷的發生,也沒有清除中斷標志。
SDIO_ClearFlag(SDIO_STATIC_FLAGS)是在STM32f4xx_sdio.c 中定義的,是清除SDIO 掛起標志庫函數。
至此不定時死機的機理就真相真相大白了:由于采集的數據各不相同,處理這些數據的耗時也不相同,處理數據后產生的中斷時間也就不固定。雖然在程序編制時精心安排了各中斷的優先等級,某些外設中斷還會提前或延時到CF卡的讀寫時間段內。因在sdio_sdcard.c函數中,多次使用了INTX_DISABLE()與INTX_ENABLE()函數關閉和開啟中斷。由于這些函數沒有阻止中斷的發生,中斷發生時同樣會產生中斷標志,只是暫時停止中斷的執行。當開啟所有中斷時,就有可能出現多個中斷標志,使中斷發生沖突,這必定會引起死機。
解決辦法是注銷掉sdio_sdcard.c文件所有INTX_DISABLE()和INTX_ENABLE()函數,把cf卡的讀寫操作放入一個中斷服務函數中,并把該中斷設為最高等級,退出中斷服務函數前,先清除所有中斷標志。經此處理后再也沒出現過死機。
作者:
jxcrgt35
時間:
2021-9-15 18:53
分析透徹,學習了
作者:
hz_dyg
時間:
2021-10-8 16:54
這種處理方式,好像是不對的吧!即使不死機,那也是有問題的
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久精品av麻豆的观看方式
|
国产999精品久久久影片官网
|
亚洲欧洲一区二区
|
中文字幕91av
|
国产偷久久一级精品60部
|
成人精品国产免费网站
|
羞羞视频免费观看
|
国产精品一区二区久久
|
日本韩国欧美在线观看
|
成人av一区
|
亚洲成人激情在线观看
|
国产精彩视频一区
|
中文字幕精品一区二区三区精品
|
91福利在线观看
|
日韩免费视频
|
99精品一区二区三区
|
国产精品1区2区
|
av网站免费在线观看
|
欧美日韩国产三级
|
免费一区二区三区
|
99re6在线视频精品免费
|
亚洲成人一区二区三区
|
亚洲欧美日韩中文字幕一区二区三区
|
午夜网址
|
欧美一级特黄aaa大片在线观看
|
www国产成人免费观看视频,深夜成人网
|
久久久在线视频
|
日韩快播电影网
|
高清国产一区二区
|
999久久久久久久久6666
|
精品日韩一区
|
鸳鸯谱在线观看高清
|
男女羞羞视频大全
|
久久精品亚洲欧美日韩精品中文字幕
|
国产精品久久久久久久久久
|
一区在线观看
|
国产精品久久久久久久久久久久午夜片
|
国产精品九九视频
|
色综合一区二区
|
一区二区在线看
|
国产成人精品一区二区三区四区
|