C ++, уменьшая элемент однобайтовой (летучих) массива, не является атомным! ПОЧЕМУ? (Также: как я могу придумать атомносC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++, уменьшая элемент однобайтовой (летучих) массива, не является атомным! ПОЧЕМУ? (Также: как я могу придумать атомнос

Сообщение Anonymous »

Я только что проиграл дни, буквально, ~ 25 часов работы, из-за попытки отладить код из-за чего-то простого, чего я не знал, делая фиж-шестигранную боевой бот (см. Его здесь и на моем личном веб-сайте здесь). < /p>
Оказывается, уменьшается элемент массива в Co ++, не в Avr Atmega328 8-b-b-b-b-b-b-bitinir (Not avr Atmega328 8-b-b-bitinir (Not avr Atmega328 8-b-b-bitinir (Not avr Atmega3288-b-b-bitinir (Not avr Atmega328 8-b-bitinir). Атомная операция и требует атомных охранников (а именно отключения прерываний). Почему это ??? Кроме того, каковы все методы C, чтобы обеспечить атомный доступ к переменным на микроконтроллере Atmel AVR?// Global variables:
const uint8_t NUM_INPUT_PORTS = 3;
volatile uint8_t numElementsInBuf[NUM_INPUT_PORTS];

ISR(PCINT0_vect) // External pin change interrupt service routine on input port 0
{
// Do stuff here
for (uint8_t i=0; i

Подробнее здесь: https://stackoverflow.com/questions/363 ... atomic-why
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»