fun(){
if(){
fun_1();
}
else if (){
fun_2();
}
}
在fun_1()中獲得賦值的全域變數在回圈到第二次進入fun()的else if中,監視器顯示清零了, 這是為什么呢?
uj5u.com熱心網友回復:
把代碼補全,看看你是如何操作全域變數的uj5u.com熱心網友回復:
switch(USB_FunCode){
case USB_FUN_READ:{
if(USB_CtrlCode == USB_CTRL_LIST){
FLASH_READ_LIST(LIST_ARRAY_TEMP,&DATA_SUMNUM,&DATA_FLAG);
DataLen = DATA_SUMNUM*9 + 3;
//FrameLen = DataLen + 5;
// USB_Frame[2] = DataLen >> 8;
// USB_Frame[3] = DataLen;
USB_Frame[6] = DATA_SUMNUM;
for(i = 0;i < DATA_SUMNUM*9;i++){
USB_Frame[i + 7] = LIST_ARRAY_TEMP[i];
}
//USB_Frame[FrameLen-1] = USB_SendFrameSum(&USB_Frame[4],DataLen);
}
else if(USB_CtrlCode == USB_CTRL_DATA) {
DATA_SN = *(data + 6);
//FLASH_READ_LIST(LIST_ARRAY_TEMP,&DATA_SUMNUM,&DATA_FLAG);
if(DATA_SN > 0 && DATA_SN <= DATA_SUMNUM){
DataLen = FLASH_READ_DATA(&USB_Frame[6],DATA_SN) + 2;
void FLASH_READ_LIST(uint8_t * pBuffer,uint8_t *SUMNUM,uint8_t *FLAG)
{
uint8_t HEAD[2] = {0};
Hal_W25QXX_Read(HEAD,0,2);
if(HEAD[1] == 255){
Hal_W25QXX_Erase_Chip();
HEAD[0] = 0;
HEAD[1] = 0;
*SUMNUM=HEAD[0];
*FLAG=HEAD[1];
Hal_W25QXX_Write(HEAD,0,2);
}
else{
*SUMNUM=HEAD[0];
*FLAG=HEAD[1];
}
Hal_W25QXX_Read(pBuffer,2,*SUMNUM*9);
}
uint16_t FLASH_READ_DATA(uint8_t *pbuff,uint8_t SN)
{
uint16_t NumByteToRead = 0;
NumByteToRead += LIST_ARRAY_TEMP[SN*9-2]<<8;
NumByteToRead += LIST_ARRAY_TEMP[SN*9-1];
Hal_W25QXX_Read(pbuff,SN*65536,NumByteToRead);
return (NumByteToRead);
}
uj5u.com熱心網友回復:
通過監視器發現,當進入FLASH_READ_DATA這個函式時,LIST_ARRAY_TEMP的值被清零了。我在這個else if內重新呼叫FLASH_READ_LIST這個函式問題可以解決。不知道為何這樣, 全域變數的值 不是應該賦過一次之后就能保存到下次被改寫嗎。
uj5u.com熱心網友回復:
LIST_ARRAY_TEMP在哪里定義的,確定是全域變數?如果真是,除了系統復位,陣列里內容不可能會被清零,有軟體看門狗嗎?uj5u.com熱心網友回復:
感謝回復, 起初我也有這個疑問。LIST_ARRAY_TEMP定義在這個源檔案中,在.h中申明, 并且在main.c中include過。我嘗試直接在main.c的main()前定義, 現象依舊。而且確定不是復位, 因為只有這個陣列被清零, 其他變數都好好的。uj5u.com熱心網友回復:
你這個if(USB_CtrlCode == USB_CTRL_LIST)
else if(USB_CtrlCode == USB_CTRL_DATA)
你是怎么確保哪個分支先執行的?如果你沒進入if(條件不滿足),先進入else if(條件滿足),那LIST_ARRAY_TEMP就沒有被設定。
uj5u.com熱心網友回復:
我除錯過了, 先發送指令讀取list資訊,上位機得到回復確認正確后, 再發送讀取data指令, 發現結果不符, 除錯監控變數, 發現了這個問題。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/15864.html
標籤:C語言
上一篇:識別區域顏色
下一篇:C++求大佬
