Прерывание записи в регистр на микроконтроллере LP C - PullRequest
0 голосов
/ 30 января 2020

В эти дни я решил проблему ложной записи в регистр. Проблема заключалась в том, что я много писал в регистре вывода GPIO (LPC_GPIO_PORT-> SET [1]) в основном l oop. В процедуре прерывания я записывал в те же самые регистры, и когда прерывание происходило как раз в то время, когда эти регистры записывались в основной l oop, по возвращении из прерывания изменения в эти регистры отбрасывались и заменялись теми, которые были записаны. в регистр перед вводом прерывания.

Я использую микроконтроллер LPC1549. Запись в регистр прерываний используется для управления двигателем BLD C, поэтому вы можете слышать громкий удар от двигателя каждые 10-30 секунд. Сокращая регистры записи в основном l oop, я полностью устранил проблему. Вопрос в том, одинаковы ли все регистры в микроконтроллере? Я не могу найти что-либо, описывающее эту проблему, которая может быть серьезной, а также трудно найти, когда она начинает вызывать проблемы.

1 Ответ

0 голосов
/ 28 февраля 2020

Звучит как «Проблема критической секции». Эта топика c намного больше всплывает в литературе об операционных системах, но существует в любой управляемой прерываниями платформе, которая имеет общие ресурсы. Это может помочь вашему поиску взглянуть на эту проблему.

В вашем случае у вас есть 2 средства доступа к данным: обработчик прерываний и основной l oop. оба получают доступ к одному и тому же общему ресурсу (ввод-вывод с отображением в память). Это может привести к немедленной перезаписи обновлений в зависимости от времени двух событий, как вы описали выше.

Что касается вашего второго вопроса, это может повлиять на любые общие ресурсы в параллельной системе.

...