Как работает данный синтаксис - C (СИ)

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

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

Добрый день, подскажите пожалуйста, как работает синтаксис:
Листинг программы
  1. #define RM_INPUT 0x00B1 // Цифровые входы
  2. typedef __packed struct
  3. {
  4. u16 fDoor: 1;
  5. u16 fMag1Ans: 1;
  6. u16 fMag2Ans: 1;
  7. u16 fStartButton: 1;
  8. u16 fStopButton: 1;
  9. u16 fButton3: 1;
  10. u16 fButton4: 1;
  11. u16 fButton5: 1;
  12. u16 fDIN4: 1;
  13. } DiscrInputRegStruct;
  14. #define DiscInputReg (*(DiscrInputRegStruct*)(MB_MEMORY+RM_INPUT))
Здесь работа идет с протоколом MODBUS. Есть общий массив данных куда пишет микроконтроллер и откуда читает ПК - MB_MEMORY. Для удобства номера ячеек дефайнятся, то есть в ячейке MB_MEMORY[RM_INPUT] лежат "упакованные" 9 бит состояния цифровых входов, которые оформляются как структура. Интересует, как работает данная строка
Листинг программы
  1. #define DiscInputReg (*(DiscrInputRegStruct*)(MB_MEMORY+RM_INPUT))
И как его использовать в дальнейшем? Спасибо
Как я понял тут создается указатель на элемент с адресом нулевого элемента массива + RM_INPUT, а дальше не понял

Решение задачи: «Как работает данный синтаксис»

textual
Листинг программы
  1. if(MB_MEMORY[RM_INPUT] & (1 << 2)) {/*do smth*/}

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


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

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

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы