ЦелиИспользуя глобальный массив как указатель, C
У меня есть глобальный массив TX и функция CRC, который должен прогрессировать через этот массив. Функция CRC не должна обрабатывать первый байт. Чтобы этого избежать, я пытаюсь увеличить массив, выполнив TX ++. Это вызывает проблемы.
Проблема
Пожалуйста, бросим быстрый взгляд на код ниже:
void Send_To_Manager(void)
{
TX[0] = 0x55;
TX[1] = 0x00;
TX[2] = 0x01;
TX[3] = 0x00;
TX[4] = COMMON_COMMAND;
TX++;
TX[5] = CRC8(TX,4);
TX[6] = CO_RD_VERSION;
TX += 5;
TX[7] = CRC8(TX,1);
TX -= 6;
UART_TX(8);
}
Я хотел бы ослепить функцию CRC8 первого байта в массиве TX. Выполняя TX ++, я ожидаю, что TX [0] будет 0x00. Однако я получаю сообщение об ошибке:
ошибка: неверный аргумент типа для увеличения
Я также получаю ошибки для TX + = 5; и TX - = 6, как:
ошибка: несовместимые типы в присвоении
Я играл вокруг с этим, так что вместо того, чтобы, если функция имеет массив, такие как:
void Send_To_Manager(unsigned char data[100])
{
data++;
}
Вышеприведенные работы как предполагалось.
Вопросы
- Почему я могу сделать это для массивов на основе функций, а не глобальные массивы?
- Если я действительно хочу сделать это для глобальных массивов, как я могу это сделать?
- Как вы предпочитаете достижение вышеуказанной цели?
Благодарим вас за ваше время.
Я заметил дополнительную ошибку на то, что я пытался сделать. вместо TX [5] = CRC8 (TX, 4); это должно быть TX ++; temp = CRC8 (TX, 4); TX--; TX [5] = temp; –
@ Volcano В этом случае вам вообще не нужно изменять 'TX', просто вызовите' CRC8 (TX + 1, 4) '. – zakinster