Как разделить массив 512 байт на более мелкие кусочки? - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужно разделить мой массив из 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);

но мне нужно разбить массив байтов на два массива по 256 байтов и отправить его.когда я пытаюсь сделать это:

CDC_Transmit_FS((uint8_t*)nandtest,256);
CDC_Transmit_FS((uint8_t*)nandtest[256],256);

компилятор выдает ошибку из-за второй строки:

предупреждение: приведение к uint8_t * (он же unsigned char *) из samller intergerтип 'int8_t' (он же знак со знаком)

Как указать, что я хочу, чтобы вторая строка передающей функции начиналась с 256-байтовой позиции массива?Или создание двух разных 256-байтовых массивов - единственный вариант здесь?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы хотите взять адрес элемента.

CDC_Transmit_FS((uint8_t*)&nandtest[256],256);

В C массив, на который ссылается имя, дает адрес массива (то есть адрес элемента 0массив).Когда вы ссылаетесь на элемент в массиве, вы получаете сам элемент.Итак, во второй строке вашего 256-байтового примера вы передаете одно 8-битное значение, тогда как функция требует указатель на значение.

0 голосов
/ 20 декабря 2018

Первое утверждение верно, но для второго утверждения вам нужно использовать адрес оператора, поскольку ваша функция 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...