1
我一直在使用stm32f103,現在我想在stm32f407上吃一些代碼。 要通過USART接口進行通信我在使用結構的形式FIFO查詢,在頭文件中定義:C/STM32結構指針
#define FIFO_BUF_SIZE 128
typedef struct {
char data[FIFO_BUF_SIZE];
uint16_t startIndex;
uint16_t endIndex;
}FIFO, *ptrFIFO;
全球這種結構的聲明在源文件:
FIFO RX_Buff={{},0,0};
FIFO TX_Buff={{},0,0};
現在我希望把從數據字符數組先進先出查詢:
void USART_PrintData(USART_TypeDef * USART, char str[]){
ptrFIFO pTX = &TX_Buff;
int i=0;
while(str[i]!='\0'){
FIFO_Put(pTX, str[i]);
i++;
}
//here in working program is code for sending data
//deleted from program for tests
}
void FIFO_Put(ptrFIFO fifo, char data){
uint16_t tmp;
tmp = fifo->startIndex;
fifo->data[tmp]=data;
tmp = (tmp+1)%(FIFO_BUF_SIZE-1);
fifo->startIndex=tmp;
}
該代碼已經工作的STM32F103但不會對F407。傳遞給FIFO_Put(最後一次登錄後),並寫入FIFO查詢,PROGRAMM去Default_Handler或內存(取決於幽默的)奇怪的地址,但是當採用這種結構我直接正常工作:
void FIFO_Put(char data){
uint16_t tmp;
tmp = TX_Buff.startIndex;
TX_Buff.data[tmp]=data;
tmp = (tmp+1)%(FIFO_BUF_SIZE-1);
TX_Buff.startIndex=tmp;
}
我沒有想法是什麼錯誤。
感謝您的任何幫助。
我試着調試,問題是在功能FIFO_Put()最後一行:
fifo->startIndex=tmp;
當函數把最後的跡象FIFO,最後一行程序跳轉後default_handler。 如果我評論這一行,程序工作正常。
對我來說看起來不錯。你可以將它附加到調試器嗎? –
也許這是堆棧大小問題? –
謝謝!這是問題所在。我的項目基於本網站的模板:http://www.freddiechopin.info/。在鏈接器腳本中有兩個堆棧:主堆棧和進程堆棧。第一個的大小設置爲0,當我在1024程序重置開始工作。我想知道爲什麼有兩個堆棧? – nawigator1