реклама на сайте
подробности

 
 
> Shared std::list между обычным кодом и обработчиком прерывания
harmaa
сообщение Jul 17 2014, 11:07
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 19-07-13
Пользователь №: 77 600



Здравствуйте.
Имеется список std::list<>
Код
  typedef std::list<TTransfer> TTransferQueue;
  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()),
                                                                             ^


Если убрать volatile, то код компилируется. Подскажите пожалуйста, какие нужно предпринять дополнительные действия для "правильного" доступа к списку и из основного кода, и из прерывания. Я плохо представляю, когда нужен volatile, и ставлю его во всех сомнительных случаях. Буду благодарен, если подкинете литературу по теме.

Сообщение отредактировал harmaa - Jul 17 2014, 11:09
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01332 секунд с 7
ELECTRONIX ©2004-2016