Программа выпадает в ошибку при работе с указателями - 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.
Объяснение кода листинга программы
ccrc
- это переменная, которая будет использоваться для хранения значения контрольной суммы цикла.BUF_RX
- это массив, который содержит данные, полученные из приемного буфера.BUF_RX[2]
- это второй элемент массиваBUF_RX
, который будет использован для получения байта.BUF_RX[3]
- это третий элемент массиваBUF_RX
, который будет использован для получения второго байта.(uint16_t)BUF_RX[2] << 8
- это операция сдвига, которая перемещает старший байт второго элемента массиваBUF_RX
влево на 8 позиций.| BUF_RX[3]
- это операциялогическое ИЛИ
, которая объединяет полученное значение из операции сдвига с третьим элементом массиваBUF_RX
.ccrc
- это переменная, которая будет использоваться для хранения значения контрольной суммы цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д