繁体   English   中英

C / STM32结构指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM