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

 
 
> Атомарность чтения, в Cortex M3
Serg_el
сообщение Apr 1 2014, 08:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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 - это сложные указатели на структуры и для того, чтобы получить в итоге адрес, нужно несколько ассемблерных команд. Гарантируется ли в это случае компилятором сохранение всех участвующих регистров в стеке?

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:50
Рейтинг@Mail.ru


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