Rasberry PI PICO (RP2040) продолжение темы

На одном ядре - DOS, на втором супервайзер. :slight_smile:

суперкластер ага)

тогда уж вин95

начать с win 3.1

если по честному тогда уж с win 2.0

Вопрос к поднаторевшим: Корректно ли использовать в качестве семафора использовать булеву volatile переменную в многопоточной обработке во избежания коллизий при доступе к переменной. Пример в коде:

/// Осциллоскоп ¯\_(ツ)_/¯ 
#include <GyverOLED.h>

GyverOLED<SSH1106_128x64> oled;

volatile uint16_t sensorValue;
volatile bool fBuzy = false;

void setup() {
  Serial.begin(115200);
}

void loop() {
  uint16_t tempVal;
  tempVal = analogRead( A0);
  fBuzy^=true;  // установить флаг занятости
  sensorValue = tempVal;
  fBuzy^=true;  // сбросить флаг занятости
  Serial.println(sensorValue);
  delay(1);
}

void setup1() {
  oled.init();
  Wire.setClock( 1200000L);
}

void loop1() {
  uint16_t tempVal;
  uint16_t prevVal;
  
  oled.clear();
  prevVal = 0;
  for (byte x = 0; x < 128; x++) {
    while ( fBuzy);
    tempVal = sensorValue;
    tempVal = (tempVal - 200)<<1;
    oled.line( x, prevVal, x+1, tempVal, x?1:0);
    //oled.dot( x, tempVal, 1);
    prevVal = tempVal;
    delay(1);
  }  
  oled.update();
}

А переводить volatile не пробовал перед тем как задать вопрос вопрос?

Идея состояла в использовании не оптимизированной булевой переменной в качестве семафора с изменением её атомарной операцией XOR…
В общем то, работать это будет, если судить по обсуждению на c++ - When to use volatile with multi threading? - Stack Overflow. Но не рекомендуется…

Кем?