![](/img/trans.png)
[英]Pointer casting problem in C with Atollic TrueSTUDIO for STM32 IDE
[英]C/STM32 structure pointer
我一直在使用stm32f103,现在我正尝试在stm32f407上吃一些代码。 为了通过USART界面进行通信,我使用结构形式的fifo查询,该结构在头文件中定义:
#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};
现在,我想将数据从char数组放入fifo查询中:
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查询之后,程序将转到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。 如果我对此行发表评论,则程序可以正常运行。
检查程序堆栈大小-根据我的经验,这种不确定的行为可能是由堆栈溢出引起的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.