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

 
 
> Атомарная работа с данными в Cortex-M3
Rev0.0
сообщение Aug 8 2013, 18:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 3-05-13
Пользователь №: 76 718



Привет!
Почитал разные материалы про атомарные операции, никак не могу прийти к выводу в чем опасность чтения? При модификации все понятно - произошло прерывание или переключение задач в ОСРВ, которое вклинилось между инструкциями, данные испортятся.
А вот при чтении?
Возьмем функцию на Cortex-M3:
long long a;
void store(void)
{
a=0xDDCCFFEE12345678;
}
Ассемблерный код после компиляции такой:
0x00001314 493A LDR r1,[pc,#232] ; @0x00001400
0x00001316 483B LDR r0,[pc,#236] ; @0x00001404
0x00001318 4A3B LDR r2,[pc,#236] ; @0x00001408
0x0000131A E9C21000 STRD r1,r0,[r2,#0]
Если я располагаю этот код в одной задаче ОСРВ, а читаю допустим в другой, то ведь никаких проблем не будет т.к. переменная a меняется по последней инструкции? В чем подвох?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amaora
сообщение Aug 13 2013, 14:27
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Есть lock-free способы. Например как-то так, для одного писателя и одного читателя,

Код
struct data d[3], *w, *r;

writer ()
{
  struct data *p;

  for (i = 0; i < 3; ++i) {
    p = d + i;
    if (p != r && p != w)
      break;
  }

  p->adc1 = ADC1;
  p->adc2 = ADC2;
  ...

  w = p;
}

read ()
{
  r = w;

  return r;
}

r = read ();

foo(r->adc1);
bar(r->adc2);
...


Но,

- Нужно время на отладку своей реализации, надо не забывать о соблюдении порядка доступа к памяти, как на уровне генерации кода так и при работе конвеера вычислителя
- Надежность блокировок может быть важнее производительности
- Неизвестно ещё, что будет быстрее sm.gif

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 14:59
Рейтинг@Mail.ru


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