sadr0b0t / stepper_h

Stepper motor control library for ChipKIT/Arduino
GNU Lesser General Public License v3.0
3 stars 1 forks source link

Сделать переменные модуля таймера volatile? #30

Closed sadr0b0t closed 4 months ago

sadr0b0t commented 7 years ago

Статья про прерывания на ардуино http://robotosha.ru/arduino/arduino-interrupts.html

Все понятно, есть одно замечание про то, что если какие-то переменные модифицируются из прерывания и основного цикла, лучше их пометить как volatile (запретить отправлять во внутренние регистры), чтобы избежать некоторых трудно предсказуемых и плохо уловимых проблемных ситуаций.

Что такое переменные volatile? Переменные, к которым имеют доступ функции обработки прерываний и обычные функции должны быть объявлены как volatile. Такое объявление сообщит компилятору, что эти переменные могут измениться в любой момент и поэтому компилятор должен перезагрузить переменную каждый раз, когда вы ссылаетесь на нее, а не полагаться на копию, которая может храниться в регистре процессора.

Нужно посмотреть на код таймера и понять, может ли там всплыть такой косяк и если да, то добавить метки volatile внутренним переменным модуля.

sadr0b0t commented 4 months ago

модификатор добавил (на самом деле, довольно давно) https://github.com/sadr0b0t/stepper_h/commit/7c86bd608d6c2f0e7c2900997e5ce0d2605a9f00

код компилируется, тесты проходит (ожидаемое), специально заметить изменение в тестах не представляется возможным - до этого никаких проблем не ловил