|
Атомарность чтения, в Cortex M3 |
|
|
|
Apr 1 2014, 08:41
|

Местный
  
Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473

|
Коллеги!
Правильно ли я понимаю, что чтение переменной в основном цикле, значение которой изменяется в прерывании, можно считать атомарным?
Т.е. к примеру существует структура, элементами которой являются:
1) 32-битная переменная, значение которой меняется через некий интерфейс (UART, CAN и т.п.) - изменяется в прерывании получения пакета; 2) копия этой переменной, значение которой может использоваться в основном цикле как угодно (чтение, запись), но к которой нет доступа из прерываний; 3) 32-битная переменная, значение которой уменьшается до 0 в прерывании таймера (время жизни переменной 1) и устанавливается равной некой константе в прерывании получения пакета;
typedef struct { volatile unsigned int Value_int;
unsigned int Value;
volatile unsigned int Valid_Timer; } RxParameterInfo;
В основном цикле, если переменная 3 не равна 0, переменная 2 = переменной 1, иначе = 0.
if (Valid_Timer) { Value = Value_int; } else { Value = 0; }
Вопрос возник из-за того, что Value = Value_int; состоит из минимум 3х ассемблерных команд. Но как я понимаю при входе в прерывание регистры R0-R2 автоматически сохраняются, а остальные через PUSH. Т.е. мы в итоге не теряем информации об адресах и в результате присваивания в худшем случае в Value мы будем иметь предыдущее значение Value_int.
Также интересно, если Value или Value_int - это сложные указатели на структуры и для того, чтобы получить в итоге адрес, нужно несколько ассемблерных команд. Гарантируется ли в это случае компилятором сохранение всех участвующих регистров в стеке?
|
|
|
|
Сообщений в этой теме
Serg_el Атомарность чтения Apr 1 2014, 08:41 demiurg_spb Цитата(Serg_el @ Apr 1 2014, 12:41) Прави... Apr 1 2014, 09:15 Serg_el Цитата(demiurg_spb @ Apr 1 2014, 13:15) Н... Apr 1 2014, 09:20  demiurg_spb Цитата(Serg_el @ Apr 1 2014, 13:20) А что... Apr 1 2014, 09:24   Serg_el Цитата(demiurg_spb @ Apr 1 2014, 13:24) Э... Apr 1 2014, 09:42    demiurg_spb Повторюсь, не нужно блокировать прерывания при зап... Apr 1 2014, 10:31     Serg_el Цитата(demiurg_spb @ Apr 1 2014, 14:31) П... Apr 1 2014, 11:12    jcxz Цитата(Serg_el @ Apr 1 2014, 15:42) Опаса... Apr 1 2014, 12:05 Golikov A. Да вы вообще не о том думаете.
Какая разница вам ... Apr 1 2014, 12:06 Serg_el Всем спасибо за комментарии! Apr 1 2014, 12:48 demiurg_spb Цитата(Serg_el @ Apr 1 2014, 16:48) Всем ... Apr 2 2014, 03:30 amaora Это такой ABI, один набор регистров сохраняется вн... Apr 1 2014, 16:41 KnightIgor Цитата(Serg_el @ Apr 1 2014, 09:41) Колле... Apr 2 2014, 05:20 Golikov A. туманно вы в конце написали а главное решения то н... Apr 2 2014, 06:06 KnightIgor Цитата(Golikov A. @ Apr 2 2014, 07:06) ту... Apr 2 2014, 08:28 Golikov A. Цитата2.1. Установить флаг.
2.2. Выполнить действи... Apr 2 2014, 09:04 KnightIgor Цитата(Golikov A. @ Apr 2 2014, 10:04) а ... Apr 2 2014, 09:33 Golikov A. давайте еще раз, я чего то не понимаю
моя последо... Apr 2 2014, 11:48 KnightIgor Цитата(Golikov A. @ Apr 2 2014, 12:48) да... Apr 2 2014, 14:27 SasaVitebsk По-моему, задача обработки фифо решена была нескол... Apr 2 2014, 16:15 jcxz Цитата(SasaVitebsk @ Apr 2 2014, 22:15) П... Apr 3 2014, 00:39  SasaVitebsk Цитата(jcxz @ Apr 3 2014, 03:39) Для FIFO... Apr 3 2014, 02:12   jcxz Как так? FIFO не должно переполняться. Что-то у ва... Apr 3 2014, 02:54    SasaVitebsk Цитата(jcxz @ Apr 3 2014, 05:54) Как так?... Apr 3 2014, 06:32 demiurg_spb Цитата(SasaVitebsk @ Apr 2 2014, 20:15) Р... Apr 3 2014, 03:57 Golikov A. Цитатато есть прерывание РАБОТАЕТ внутри куска. И ... Apr 2 2014, 16:59 adnega Хорошо бы примерчик взаимной блокировки от KnightI... Apr 3 2014, 06:23 jcxz Цитата(adnega @ Apr 3 2014, 12:23) И еще:... Apr 3 2014, 08:24  SasaVitebsk Цитата(jcxz @ Apr 3 2014, 11:24) Так вот ... Apr 3 2014, 10:23  adnega Цитата(jcxz @ Apr 3 2014, 12:24) Я пользу... Apr 3 2014, 14:23   jcxz Цитата(adnega @ Apr 3 2014, 20:23) На чис... Apr 3 2014, 15:21 Golikov A. ЦитатаИ еще: кто-нить пользуется SVC? Может, лучше... Apr 3 2014, 06:52 demiurg_spb Цитата(Golikov A. @ Apr 3 2014, 10:52) на... Apr 3 2014, 06:56 andrewlekar ЦитатаSVS - это че?
Это видимо имелось в виду прог... Apr 3 2014, 06:58 jcxz Цитата(andrewlekar @ Apr 3 2014, 12:58) П... Apr 3 2014, 11:45 andrewlekar ЦитатаИнтересно - как вы с помощью мьютексов и про... Apr 3 2014, 13:29 jcxz Цитата(andrewlekar @ Apr 3 2014, 19:29) П... Apr 3 2014, 14:38 kostyan Цитата(andrewlekar @ Apr 3 2014, 19:29) П... Apr 4 2014, 01:26 andrewlekar Тут достаточно не критической секции, а запрета ко... Apr 3 2014, 15:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|