Как получить доступ к переменным из функций main () и IRQ ()? - PullRequest
0 голосов
/ 04 декабря 2018

Я готовлюсь к тесту на следующей неделе, и мы изучаем микроконтроллеры.Мы только что сделали пример кода с прерываниями, и он сообщил им температуру в F и C, когда мы нажали кнопку (прервано).как получить доступ к C и F из функций main и IRQ ()?

1 Ответ

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

Самый простой способ разделить переменную между обработчиками IRQ и основным потоком в любой голой железной системе:

  • Убедитесь, что тип переменной - тот, который ЦП может атомарно прочитатьи напишите.

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

    Чтобы прочитатьзначение, используйте что-то вроде const atomic_type local_copy = shared_variable; и работайте с этой локальной копией.Выражение типа shared_variable * shared_variable может использовать разные значения для shared_variable.

  • Убедитесь, что только один обработчик IRQ (который должен выполняться только один раз в одно и то же время) или только основнойпоток записывает в общую переменную.

    Все остальные части кода могут читать только общую переменную.

Если данные, которые вы хотите передать между обработчиком IRQи основной поток не вписывается в атомарный тип, развлекайтесь со сложными протоколами блокировки.

...