小弟遇到一個奇葩的問題,求大神指點,代碼如下:
uint8_t flag = 0 ;
uint8_t cs = 0;
uint8_t try_count = 0;
unsigned int addr = 0;
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5);//關閉所有的燈
GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_14);
錯誤的地方:這些代碼是一個函式里面的內容,前面有4個變數的定義,當賦初值時,后面4行代碼不能運行,并且通過硬體可以看到的現象是程式就卡死在這里了,應該是段錯誤了。當不賦初值時,后面4行代碼就可以正常運行。分析了很久,始終不能明白不賦初值就能運行,賦了初值就不能運行,這到底是為什么???求大神指點
uj5u.com熱心網友回復:
沒有看錯吧,前面4個變數后面沒用到啊uj5u.com熱心網友回復:
這沒什么奇怪的,你首先要看看uint8_t是什么資料型別的,如果是結構或類等,那么你的用法顯然是無法編譯通過的你查查uint8_t是什么型別的,找到正確的用法即可
uj5u.com熱心網友回復:
默認uint8_t是unsinged char,如果你#include <stdint.h>,但是對于單片機程式來說,一般是自己定義的,樓主所說的賦初值什么意思?前四個變數并沒有使用,不可以理解uj5u.com熱心網友回復:
這些變數在后面的程式用到了,因為后面的程式太過了,我沒有弄上來,uint8_t肯定是unsinged char 型別的嘛,賦初值的是意思就是 :uint8_t flag = 0;不賦初值的意思就是:uint8_t flag ;就是第一種定義變數,發現程式不能往后運行,第二種定義,發現程式能往后運行,這是我除錯后的結果。但是在主程式,卻沒有發生這種現象,你們大概明白我的意思了吧,這中現象第一次遇到,一點辦法都沒得。
uj5u.com熱心網友回復:
都是基本型別,看不出什么問題在C里,所有變數只能在開始處定義,是否前面還有代碼
uj5u.com熱心網友回復:
原函式是這樣子的int32_t Ymodem_Receive (uint8_t *buf)
{
uint8_t flag = 0 ;
uint8_t cs = 0;
uint8_t try_count = 0;
unsigned int addr = 0;
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5);//關閉所有的燈
GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_14);
.........................................................
....................................................
}
uj5u.com熱心網友回復:
卡死在什么地方,GPIO第一句?還是第四句?看不出邏輯關系,賦值與否也不影響到堆疊和記憶體使用,應該不是這里的問題uj5u.com熱心網友回復:
可能你需要BuildAll , 重建整個專案。或許你加大單片機的記憶體試下。
uj5u.com熱心網友回復:
這個要看硬體對初值的要求,查一下手冊看看轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121000.html
標籤:基礎類
上一篇:求最大高度
