Программа выпадает в ошибку при работе с указателями - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. Пишу на C для контроллера. Вырезка из программы ниже. Суть проблемы. При попытке сравнить ccrc c Crc16 вываливается в ошибку HardFault. Ломаю голову что не так и не нахожу ответа. Может кто ткнёт пальцем куда копать и что не так?
uint16_t *ccrc;
uint8_t BUF_RX[32];
uint16_t CalcCrc;
uint16_t Crc16( uint8_t D, uint8_t L);
 
ccrc = (uint16_t *) &BUF_RX[2];
CalcCrc = Crc16(BUF_RX, 5);
if (CalcCrc!=*ccrc)

Решение задачи: «Программа выпадает в ошибку при работе с указателями»

textual
Листинг программы
ccrc = ((uint16_t)BUF_RX[2] << 8 | BUF_RX[3]);    // ccrc min 16 bit.

Объяснение кода листинга программы

  1. ccrc - это переменная, которая будет использоваться для хранения значения контрольной суммы цикла.
  2. BUF_RX - это массив, который содержит данные, полученные из приемного буфера.
  3. BUF_RX[2] - это второй элемент массива BUF_RX, который будет использован для получения байта.
  4. BUF_RX[3] - это третий элемент массива BUF_RX, который будет использован для получения второго байта.
  5. (uint16_t)BUF_RX[2] << 8 - это операция сдвига, которая перемещает старший байт второго элемента массива BUF_RX влево на 8 позиций.
  6. | BUF_RX[3] - это операция логическое ИЛИ, которая объединяет полученное значение из операции сдвига с третьим элементом массива BUF_RX.
  7. ccrc - это переменная, которая будет использоваться для хранения значения контрольной суммы цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы