Перейти к содержанию
    

Разные результаты компиляции вроде бы одного и того же присваивания.

1 час назад, VladislavS сказал:

 Вы слишком много хотите от компилятора. Меня, например, больше напрягает, когда он (по моей указке) молча вот так делает

Ну так - он сделал то, что Вы и попросили. Какие тут претензии к компилятору?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 minutes ago, jcxz said:

команда STRD не может быть прервана посередине прерыванием

Может.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, aaarrr сказал:

Может.

Пруф-линк?

 

PS:

Interruptible-continuable instructions
When an interrupt occurs during the execution of an LDM, STM, PUSH or POP instruction, and when 
an FPU is implemented an VLDM, VSTM, VPUSH, or VPOP instruction, the processor:
• Stops the load multiple or store multiple instruction operation temporarily.
• Stores the next register operand in the multiple operation to EPSR bits[15:12].
After servicing the interrupt, the processor:
• Returns to the register pointed to by bits[15:12].
• Resumes execution of the multiple load or store instruction. 
When the EPSR holds ICI execution state, bits[26:25,11:10] are zero.
If-Then block
The If-Then block contains up to four instructions following an IT instruction. Each instruction 
in the block is conditional. The conditions for the instructions are either all the same, or some 
can be the inverse of others. See IT on page 3-131 for more information.

 

и других нет (Cortex-M7).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, jcxz said:

Пруф-линк?

Читайте раздел Atomicity in the Arm architecture в Architecture Reference Manual.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 минут назад, aaarrr сказал:

Читайте раздел Atomicity in the Arm architecture в Architecture Reference Manual.

Можно конкретнее?

Я его уже читал. Там нет ничего относящегося к теме "непрерываемость инструкций LDRD/STRD процессорным прерыванием".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

LDM, LDC, LDC2, LDRD, STM, STC, STC2, STRD, PUSH, POP , VLDR, VSTR, VLDM, VSTM, VPUSH, and VPOP instructions are executed
as a sequence of word-aligned word accesses. Each 32-bit word access is guaranteed to be single-copy atomic. A
subsequence of two or more word accesses from the sequence might not exhibit single-copy atomicity.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И...?  Какое это имеет отношение к "непрерываемости инструкций LDRD/STRD процессорным прерыванием"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jcxz said:

Какое это имеет отношение?

А что, не имеет? Прямым текстом написано, что атомарность не гарантируется в том числе и для STRD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, aaarrr сказал:

А что, не имеет? Прямым текстом написано, что атомарность не гарантируется в том числе и для STRD.

Там написано про атомарность относительно шинных операций. Какие операции выполняются непрерывно на шине не прерываясь доступом к шине других bus-masters.

А не про атомарность относительно прерываний в ядре. Я не зря вам это выделил и неоднократно это подчёркивал.

Относительно последнего нужно смотреть "Cortex-M Devices. Generic User Guide" параграф "Interruptible-continuable instructions" и описание регистра EPSR.

 

Да - LDRD/STRD может быть прервана другим bus-master-ом, но не прерыванием. Первое - не критично, в отличие от 2-го. Выполнение команды не будет прервано, только доступ к шине.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, jcxz said:

Там написано про атомарность относительно шинных операций.

Вот прямо так и написано?

 

13 minutes ago, jcxz said:

А не про атомарность относительно прерываний в ядре. Я не зря вам это выделил и неоднократно это подчёркивал.

Ну, я тоже вам выделю и подчеркну (однократно):

Quote

If an instruction is executed as a sequence of accesses according to these rules, some exceptions can be taken in the
sequence and cause execution of the instruction to be abandoned
.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, jcxz сказал:

Вообще-то цель моя была: обеспечить атомарную запись в 2 32-битных слова.

И нет - они не равноценны и не могут быть быть равноценными, потому что одна STRD - атомарна, 2 STR - не атомарны.

Вы это, простите, где-то написали? Не говоря уже о том что бы пояснить об этом копилятору? Он вообще-то не должен додумывать ваши хотелки, без прямого указания. :)

Хз, как оно там в ИАРе, _Atomic работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

И нет - они не равноценны и не могут быть быть равноценными, потому что одна STRD - атомарна, 2 STR - не атомарны.

(т.е. - команда STRD не может быть прервана посередине прерыванием).

Вообще-то атомарность -- более строгая вещь. В промежутках между записями двух слов STRD, в принципе, может вклиниться кто-то другой, т.е. в рамках всей системы она не атомарна. Вот в смысле невозможности прервать на середине -- это да.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, aaarrr сказал:

Вот прямо так и написано?

Ну, я тоже вам выделю и подчеркну (однократно):

Видимо нужно ещё немного и подумать?  :wink2:

Если, по-вашему, выполнение STRD может быть прервано прерыванием посередине (одно слово записано, другое - нет), тогда внимание - вопрос:

Каким образом и где процессор сохранит состояние выполнения этой команды, чтобы продолжить его после возврата из прерывания?

Как он вообще сможет её завершить после возврата?

Для LDM/STM и др. это описано в "Interruptible-continuable instructions" и для этого есть соответствующие поля EPSR. Но про LDRD/STRD там ни слова. Тогда - как?

Объясните.

 

 

12 минут назад, SII сказал:

Вообще-то атомарность -- более строгая вещь. В промежутках между записями двух слов STRD, в принципе, может вклиниться кто-то другой, т.е. в рамках всей системы она не атомарна. Вот в смысле невозможности прервать на середине -- это да.

Я это понимаю. И поэтому неоднократно подчеркнул, что речь идёт об атомарности выполнения команды одним ядром:

2 часа назад, jcxz сказал:

команда STRD не может быть прервана посередине прерыванием

Т.е. - атомарности выполнения команды по отношению к ISR, переключениям задач ОС и т.п.

15 минут назад, Kabdim сказал:

Вы это, простите, где-то написали? Не говоря уже о том что бы пояснить об этом копилятору? :)

Вообще-то я задавал вопрос безотносительно цели "Зачем мне это нужно". А цель начали придумывать Вы.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, jcxz сказал:

Вообще-то я задавал вопрос безотносительно цели "Зачем мне это нужно". А цель начали придумывать Вы.  :unknw:

Атомик будьте добры, протестируйте. Мне это интересно. Больше чем то что я неправильно угадал вашу цель в условиях вашего молчания по её поводу. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...