Существует библиотека Arduino под названием 'ByteBuffer' (найдено здесь ), которая представляет собой реализацию циклического буфера. Я немного изменил его (назвав его «ByteBufferPro»), отключив поддержку всех небайтовых типов данных и добавив несколько удобных методов. Я намереваюсь использовать это в своей программе обслуживания прерываний, которая уже выполняет некоторые тяжелые задачи. Чтобы уменьшить нагрузку на ISR, я намерен позволить ISR помещать байты информации в кольцевой буфер (поскольку их захват / хранение является критичным по времени), но фактическая обработка этой информации не так критична по времени, что я делаю в основном цикле ().
Следуя логике, что любая переменная, которая может быть обновлена в ISR, должна иметь в объявлении квалификатор 'volatile', я объявил буфер как volatile, но теперь я вижу следующие ошибки компиляции: -
ByteBufferProExample.cpp: In function 'void setup()':
ByteBufferProExample:12: error: passing 'volatile ByteBufferPro' as 'this' argument of 'void ByteBufferPro::init(unsigned int)' discards qualifiers
ByteBufferProExample.cpp: In function 'void loop()':
ByteBufferProExample:24: error: passing 'volatile ByteBufferPro' as 'this' argument of 'void ByteBufferPro::clear()' discards qualifiers
Хотите знать, в чем причина, и как я могу это исправить? Если взять криббидж по поводу указателя 'this', у меня есть ощущение, что если я переключу реализацию ByteBuffer с C ++ на C (OO на процедурный), это будет простой способ исправить это, хотя мне действительно нравится OO семантика. Сделал бы так, если бы не было другого пути.