我需要分割我的512字节数组,我有一个类似的函数
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
并且我有一个名为nandtest的数组,下面的两行代码可以正常工作。
int8_t nandtest[520] = {0};
CDC_Transmit_FS((uint8_t*)nandtest,512);
但是我需要将bytes数组分成两个256bytes数组并将其发送。 当我尝试这样做时:
CDC_Transmit_FS((uint8_t*)nandtest,256);
CDC_Transmit_FS((uint8_t*)nandtest[256],256);
由于第二行,编译器给我错误:
警告:从samller interger强制转换为uint8_t *(又名unsigned char *) 输入“ int8_t”(又名带符号的字符)
如何指示我要从数组的256字节位置开始传输函数的第二行?还是在这里创建两个不同的256字节数组是唯一的选择?
答案 0 :(得分:1)
第一条语句是正确的,但是对于第二条语句,您需要使用运算符的地址,因为CDC_Transmit_FS函数期望缓冲区的地址,但是您正在将值传递到位置nandtest [256]。
CDC_Transmit_FS((uint8_t*)nandtest,256);
与:
相同CDC_Transmit_FS((uint8_t*)&nandtest[0],256);
要传递第二个256字节缓冲区,请使用以下命令传递257字节的地址:
CDC_Transmit_FS((uint8_t*)&nandtest[256],256);
答案 1 :(得分:0)
您要获取元素的地址。
CDC_Transmit_FS((uint8_t*)&nandtest[256],256);
在C中,以名称引用的数组会产生该数组的地址(也就是说,该数组的元素0的地址)。当您引用数组中的元素时,您将获得元素本身。因此,在您的256字节示例的第二行中,您正在传递单个8位值,而该函数需要一个指向该值的指针。