Kabdim 0 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба Для этого есть вполне конкретные инструменты, что в С, что в С++. В чем необходимость использовать не их, а полагаться на особенности реализации платформы? Напомню вопрос был про задачи где требуется нарушать, а не кому-то хочется или кто-то не знает как правильно. 4 минуты назад, AlexandrY сказал: Первый раз слышу. В IAR не наблюдается зависимости времени компиляции от опции оптимизации. А что ИАР - это С, а С это ИАР? Я говорил про заметно более ранние времена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба 2 minutes ago, Kabdim said: Для этого есть вполне конкретные инструменты, что в С, что в С++. В чем необходимость использовать не их, а полагаться на особенности реализации платформы? Напомню вопрос был про задачи где требуется нарушать, а не кому-то хочется или кто-то не знает как правильно. А что ИАР - это С, а С это ИАР? Я говорил про заметно более ранние времена. В стандарте много чего можно понаписать. А посмотрев поглубже обнаружишь необходимость ретаргетинга. Т.е. вы сами и должны реализовывать фишки этого стандарта. В курсе что атомарность в ARM-ах не на всех областях памяти работает? Впрочем это тут тоже обсуждалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба И что компилятор, который соответствует платформе и аби размещает вам атомарные переменные в те области где не работает атомарность? Вы общее заявление о том что вы знаете некие общие случаи когда нужно нарушать стандарт аргументируете примерами из узкой области прямо связанной с железом с чем никто и не спорил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба 1 hour ago, Kabdim said: И что компилятор, который соответствует платформе и аби размещает вам атомарные переменные в те области где не работает атомарность? Вы общее заявление о том что вы знаете некие общие случаи когда нужно нарушать стандарт аргументируете примерами из узкой области прямо связанной с железом с чем никто и не спорил. Компилятор не размещает. Размещает линкер. Где будут, а где не будут работать атомарные операции даже в даташитах на микроконтроллеры не найдете. На самом деле я не собирался тут воевать со стандартом. Я его не читал и не планирую читать. И не стоит нагнетать вроде назовите "общие случаи когда нужно нарушать стандарт". Мысль была о нарушении неких правил безопасности. Тут даже доля метафоричности есть. Вы легко можете посмотреть в свой код и все это увидеть если вы пишете не под MISRA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Segment 3 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба @AlexandrY а в каких областях атомарные операции не работают в ARMах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба 14 минут назад, Segment сказал: @AlexandrY а в каких областях атомарные операции не работают в ARMах? Не обращайте внимания. Все LDR/LDRH/LDRD/STR/STRH/STRD, а также LDREX../STREX.. атомарны в пределах одного ядра Cortex-M. Неатомарны только LDM/STM, PUSH/POP. Но как я вижу - IAR например LDM/STM почти не использует при компиляции си-кода. Возможно как раз по причине их неатомарности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба 2 часа назад, AlexandrY сказал: Компилятор не размещает. Размещает линкер. Где будут, а где не будут работать атомарные операции даже в даташитах на микроконтроллеры не найдете. На самом деле я не собирался тут воевать со стандартом. Я его не читал и не планирую читать. И не стоит нагнетать вроде назовите "общие случаи когда нужно нарушать стандарт". Мысль была о нарушении неких правил безопасности. Тут даже доля метафоричности есть. Вы легко можете посмотреть в свой код и все это увидеть если вы пишете не под MISRA Т.е. вы против того что корректно написанные программы не зависят от опций компиляции, но контраргументы у вас метафоричные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 26 декабря, 2018 Опубликовано 26 декабря, 2018 (изменено) · Жалоба В 03.12.2018 в 11:25, inventor сказал: вот , например, стандартный пример: static /*volatile*/ u32 LocalTime @ ".fastdata" = 0; void Delay(int timer) { u32 Time = LocalTime; while(LocalTime - Time < timer); } В этом коде однозначно не зависимо от вида компилятора, уровня оптимизации и др внешних факторов ДОЛЖНО использоваться volatile Изменено 26 декабря, 2018 пользователем Alex77 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 26 декабря, 2018 Опубликовано 26 декабря, 2018 · Жалоба 41 минуту назад, Alex77 сказал: В этом коде однозначно не зависимо от вида компилятора, уровня оптимизации и др внешних факторов ДОЛЖНО использоваться volatile Всё-таки timer должно быть тоже u32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба On 12/9/2018 at 2:12 PM, AlexandrY said: Тут не идеи нужны, а детерминизм входа и выхода у компилятора. Вот его в C/C++ и нету. Крайне удивительное утверждение. :( Особенно в силу того, что детерминизм входа и выхода компилятора и оптимизатора есть первое, и необходимое, условие их существования вообще. При условии соблюдения всех правил ими пользования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 5 hours ago, Stanislav said: ... детерминизм входа и выхода компилятора и оптимизатора есть первое, и необходимое, условие их существования вообще. При условии соблюдения всех правил ими пользования. Эт не ответ на главный вопрос. А вопрос в том почему компилятор C сразу все не оптимизирует по максимуму, как делается с современных языках? Почему ахинея без volatile РАБОТАЕТ хотя и не ДОЛЖНА? Какая логика в этом заложена? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Для меня важный недостаток компиляторов - что они не могут заинлайнить функции, если они определены и используются в разных файлах. Или я не умею им приказать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 47 минут назад, ViKo сказал: Для меня важный недостаток компиляторов - что они не могут заинлайнить функции, если они определены и используются в разных файлах. Или я не умею им приказать. Откройте для себя чекбокс "Мультифайловая оптимизация" в свойствах проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 17 минут назад, jcxz сказал: Откройте для себя чекбокс "Мультифайловая оптимизация" в свойствах проекта. Это который из них? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 4 минуты назад, ViKo сказал: Это который из них? Этот: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться