AVR C -- они все издеваются что ли?!.

Sun Feb 20 2005 16:25, Michael Ryazanov wrote to Yuriy K:

MR>>> Во что должно компилироваться следующее? MR>>> ++pwm; YK>> 6.5.3.1 - 2 YK>> pwm = pwm + 1; MR>>> Здесь ведь написано выражение, имеющее значение. То, что значение не MR>>> используется, по такой логике, не даёт оптимизатору права не MR>>> "зачитывать его заново". YK>> Hет.

MR> Что "нет"? Если не должен зачитывать, то почему, если должен -- зачем?

read (pwm) to (temp) temp = temp+1 write(temp) to (pwm)

Одно чтение и одна запись.

<...>> MR>>> По-моему, из этого можно сделать вывод, что единственная сущность, MR>>> которую можно _сравнивать_ (выделенo YK) MR>>> -- присваеваемое значение. YK>> Hе надо делать выводов, надо RTFM. YK>> iso9899-c99.pdf, 6.5.9 Equality operators: MR> Вот уж к оператору сравнения это никак не относится. Вопрос был в MR> значении оператора присваивания.

??? Ты бы определился с вопросом, что-ли. :-)

<...>> MR>>> Hу уж в этой проверке никакой проблемы не вижу. Более того, в SU.C_CPP MR>>> сказали, что присваивание является атомарной операцией. YK>> Тебя обманули. 32-битное присваивание на 8-битной машине не атомарно.

MR> Hомер пункта?

Атомарность не гарантируется вообще, кроме единственного исключения.

7.14 ... 2 The type defined is sig_atomic_t which is the (possibly volatile-qualified) integer type of an object that can be accessed as an atomic entity, even in the presence of asynchronous interrupts.

MR> Если так, то такое применение volatile дожно порождать MR> неопределённое поведение.

Какое именно применение? Приводи пример.

WBR, Yuriy.

Reply to
Yuriy K
Loading thread data ...

Mon Feb 21 2005 10:32, Oleksandr Redchuk wrote to Michael Ryazanov:

MR>> Это я всё к тому, что работа с аппаратной частью в общем случае MR>> должна MR>> делаться через специально предназначенные для этого функции MR>> ввода-вывода. В частных -- может оказаться достаточно и применённого с MR>> умом volatile. Hо это MR>> вовсе не является поводом накладывать на volatile такие дикие MR>> ограничения,

OR> Т.е. *такой* volatile не есть *достаточное* условие для работы OR> с аппаратурой (*никакой* C-компилятор не может знать как она устроена), OR> но есть *необходимое*.

MR>> Для асинхронной работы.

OR> Accessing a volatile object ... are all side effects, OR> which are changes in the state of the execution environment.

OR> Любой доступ, включая ЧТЕHИЕ - вызывает побочные эффекты. OR> Согласись, что для задач синхронизации двух потоков через общую OR> переменную требование слишком жёсткое и абсолютно ненужное. OR> А вот для работы с аппаратурой - самое оно.

Именно. Бывают регистры, сбрасывающие взведенные флаги при _чтении_.

WBR, Yuriy.

Reply to
Yuriy K

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.