jcxz 245 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 1 час назад, VladislavS сказал: Вы слишком много хотите от компилятора. Меня, например, больше напрягает, когда он (по моей указке) молча вот так делает Ну так - он сделал то, что Вы и попросили. Какие тут претензии к компилятору? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба Не хочу HardFault :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 33 minutes ago, jcxz said: команда STRD не может быть прервана посередине прерыванием Может. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 4 minutes ago, jcxz said: Пруф-линк? Читайте раздел Atomicity in the Arm architecture в Architecture Reference Manual. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 40 минут назад, aaarrr сказал: Читайте раздел Atomicity in the Arm architecture в Architecture Reference Manual. Можно конкретнее? Я его уже читал. Там нет ничего относящегося к теме "непрерываемость инструкций LDRD/STRD процессорным прерыванием". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба И...? Какое это имеет отношение к "непрерываемости инструкций LDRD/STRD процессорным прерыванием"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 1 minute ago, jcxz said: Какое это имеет отношение? А что, не имеет? Прямым текстом написано, что атомарность не гарантируется в том числе и для STRD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 10 минут назад, aaarrr сказал: А что, не имеет? Прямым текстом написано, что атомарность не гарантируется в том числе и для STRD. Там написано про атомарность относительно шинных операций. Какие операции выполняются непрерывно на шине не прерываясь доступом к шине других bus-masters. А не про атомарность относительно прерываний в ядре. Я не зря вам это выделил и неоднократно это подчёркивал. Относительно последнего нужно смотреть "Cortex-M Devices. Generic User Guide" параграф "Interruptible-continuable instructions" и описание регистра EPSR. Да - LDRD/STRD может быть прервана другим bus-master-ом, но не прерыванием. Первое - не критично, в отличие от 2-го. Выполнение команды не будет прервано, только доступ к шине. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 2 часа назад, jcxz сказал: Вообще-то цель моя была: обеспечить атомарную запись в 2 32-битных слова. И нет - они не равноценны и не могут быть быть равноценными, потому что одна STRD - атомарна, 2 STR - не атомарны. Вы это, простите, где-то написали? Не говоря уже о том что бы пояснить об этом копилятору? Он вообще-то не должен додумывать ваши хотелки, без прямого указания. :) Хз, как оно там в ИАРе, _Atomic работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 2 hours ago, jcxz said: И нет - они не равноценны и не могут быть быть равноценными, потому что одна STRD - атомарна, 2 STR - не атомарны. (т.е. - команда STRD не может быть прервана посередине прерыванием). Вообще-то атомарность -- более строгая вещь. В промежутках между записями двух слов STRD, в принципе, может вклиниться кто-то другой, т.е. в рамках всей системы она не атомарна. Вот в смысле невозможности прервать на середине -- это да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 17 минут назад, aaarrr сказал: Вот прямо так и написано? Ну, я тоже вам выделю и подчеркну (однократно): Видимо нужно ещё немного и подумать? Если, по-вашему, выполнение STRD может быть прервано прерыванием посередине (одно слово записано, другое - нет), тогда внимание - вопрос: Каким образом и где процессор сохранит состояние выполнения этой команды, чтобы продолжить его после возврата из прерывания? Как он вообще сможет её завершить после возврата? Для LDM/STM и др. это описано в "Interruptible-continuable instructions" и для этого есть соответствующие поля EPSR. Но про LDRD/STRD там ни слова. Тогда - как? Объясните. 12 минут назад, SII сказал: Вообще-то атомарность -- более строгая вещь. В промежутках между записями двух слов STRD, в принципе, может вклиниться кто-то другой, т.е. в рамках всей системы она не атомарна. Вот в смысле невозможности прервать на середине -- это да. Я это понимаю. И поэтому неоднократно подчеркнул, что речь идёт об атомарности выполнения команды одним ядром: 2 часа назад, jcxz сказал: команда STRD не может быть прервана посередине прерыванием Т.е. - атомарности выполнения команды по отношению к ISR, переключениям задач ОС и т.п. 15 минут назад, Kabdim сказал: Вы это, простите, где-то написали? Не говоря уже о том что бы пояснить об этом копилятору? :) Вообще-то я задавал вопрос безотносительно цели "Зачем мне это нужно". А цель начали придумывать Вы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 28 апреля, 2021 Опубликовано 28 апреля, 2021 · Жалоба 8 минут назад, jcxz сказал: Вообще-то я задавал вопрос безотносительно цели "Зачем мне это нужно". А цель начали придумывать Вы. Атомик будьте добры, протестируйте. Мне это интересно. Больше чем то что я неправильно угадал вашу цель в условиях вашего молчания по её поводу. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться