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