类型无效的操作数&var; volatile uint8_t *和' uint8_t(*)

时间:2015-03-18 11:36:05

标签: c++ arrays pointers g++

我遇到地址/指针转换问题

我跟着OOTB recive的代码(uint8_t * Buf,uint32_t * Len);函数,在数据中断被接收时异步运行

uint8_t UserRxBufferFS[APP_RX_DATA_SIZE]; //static buffer 

volatile uint8_t * __usrRxIndex = UserRxBufferFS; //volatile pointer to data end


static int8_t recive (uint8_t* Buf, uint32_t *Len)
{
    uint8_t result = USBD_OK;
    //copy *Len number of data from Buf to UserRxBufferFS 
    memcpy(UserRxBufferFS+__usrRxIndex, Buf, *Len);

    if( (uint32_t)( (__usrRxIndex )- UserRxBufferFS) + *Len > 0xff){ //calculate buffer overflow
        __usrRxIndex = UserRxBufferFS; //buffer
    } else {
        __usrRxIndex += *Len;
    }
} 

然后我尝试通过volatile __usrRxIndex捕获数据的结尾,每次捕获数据时都会更新。

但是当我尝试使用g ++ compilator编译时,我收到了错误:

error: invalid operands of types 'volatile uint8_t* {aka volatile unsigned char*}' and 'uint8_t (*)[512] {aka unsigned char (*)[512]}' to binary 'operator-'

我做了一些解决方法并将每个地址计算为数字,然后进行减法但我的问题是为什么g ++编译器不允许数组和指针减法?有一些简单的方法可以解决这个错误吗?

1 个答案:

答案 0 :(得分:1)

memcpy(UserRxBufferFS+__usrRxIndex, Buf, *Len);

这个添加不应该编译,它没有意义。你可能想要:

memcpy(__usrRxIndex, Buf, *Len);

另一件事是你在memcpy内存损坏后检测到缓冲区溢出。它需要在memcpy之前检测缓冲区溢出。