Имеется список std::list<>
Код
typedef std::list<TTransfer> TTransferQueue;
volatile TTransferQueue mTransfers;
volatile TTransferQueue mTransfers;
, в который могут добавляться и удаляться элементы из основного кода, и обработчик прерывания, который только читает элементы. Обычно таким переменным я ставлю volatile, но в этом случае компилятор ругается:
Код
error #1163: no instance of overloaded function
"std::list<_Ty, _Ax>::end [with _Ty=TI2CController::TTransfer,
_Ax=std::allocator<TI2CController::TTransfer>]" matches the argument
list and object (the object has cv-qualifiers that prevent a match)
object type is: volatile TI2CController::TTransferQueue
: mNo(no), mBaseAddr(baseAddr), mTransfers(), mActiveTransfer(mTransfers.end()),
^
"std::list<_Ty, _Ax>::end [with _Ty=TI2CController::TTransfer,
_Ax=std::allocator<TI2CController::TTransfer>]" matches the argument
list and object (the object has cv-qualifiers that prevent a match)
object type is: volatile TI2CController::TTransferQueue
: mNo(no), mBaseAddr(baseAddr), mTransfers(), mActiveTransfer(mTransfers.end()),
^
Если убрать volatile, то код компилируется. Подскажите пожалуйста, какие нужно предпринять дополнительные действия для "правильного" доступа к списку и из основного кода, и из прерывания. Я плохо представляю, когда нужен volatile, и ставлю его во всех сомнительных случаях. Буду благодарен, если подкинете литературу по теме.