-
- Это Ваша гипотеза. Практика показывает, что некоторые компиляторы даже с nop выбрасывают цикл. Поэтому как сказали выше или volatile или встроенные intrinsic функции типа delay_cycles(size_t). И вообще это плохая практика, т.к. например, на разной Хитрый Китаец(55 знак., 09.07.2018 01:49)
- а вот это уже стрёмный компилятор, если выбрасывает полезный код. Можно пример - какие компиляторы занимаются подобным вредительством? - sladkoejka(10.07.2018 09:47)
- Вопрос в критериях полезности. Видимо, Вы не смогли донести до компилятора свои критерии или в коде есть другая ошибка. VLLV(150 знак., 10.07.2018 10:08)
- Ну так покажите ошибку в коде, тут всего 21 строка, но код зависает: sladkoejka(624 знак., 14.07.2018 15:54)
- Код, скомпилированный чем-то другим, работает? - VLLV(16.07.2018 10:29)
- да, код скомпилированный в SDCC и в Keil, работает без проблем. Хотя... в SDCC вроде какая-то другая проблема была - уже не помню, но код работал. - sladkoejka(17.07.2018 00:29 - 00:32)
- Не знаю зачем, но в компиляторе XC16 от Микрочипа предусмотрен квалификатор volatile даже для ассемблерной вставки. Nikolay_Po(119 знак., 16.07.2018 10:08 - 10:14)
- Код, скомпилированный чем-то другим, работает? - VLLV(16.07.2018 10:29)
- Ну так покажите ошибку в коде, тут всего 21 строка, но код зависает: sladkoejka(624 знак., 14.07.2018 15:54)
- Вопрос в критериях полезности. Видимо, Вы не смогли донести до компилятора свои критерии или в коде есть другая ошибка. VLLV(150 знак., 10.07.2018 10:08)
- а вот это уже стрёмный компилятор, если выбрасывает полезный код. Можно пример - какие компиляторы занимаются подобным вредительством? - sladkoejka(10.07.2018 09:47)
- ну как ничего не делает )) он декрементирует константу. volatile более правильно - 0men(05.07.2018 14:47)
- volatile в данном случае бесполезен, т.к. к переменная локальная и никто её изменить не может. Volatile говорит компилятору что переменная может измениться и при её использовании нужно всегда перечитывать, а не использовать закешированное в sladkoejka(20 знак., 05.07.2018 14:52)
- Ну ты всё правильно типа написал, только забыл сделать правильные практические выводы из собственного знания :-)) - =AlexD=(05.07.2018 15:00)
- volatile говорит компилятору, что эта переменная может измениться в любой момент и код с ее участием не следует оптимизировать. Кеширование тут ни при чем вообще. - 0men(05.07.2018 14:55)
- И при другом уровне или профиле оптимизации подобранная задержка для delay бывает летит к чертям :) - Petrovich(05.07.2018 15:00, )
- volatile предназначена исключительно для того, чтобы компилятор не кэшировал значение этой переменной в регистрах, а каждый раз вычитывал её значение. Другого смысла у volatile нет. Все эти попытки использовать volatile для циклов - это от sladkoejka(183 знак., 05.07.2018 15:14)
- )) ну ну - 0men(05.07.2018 15:16)
- volatile предназначена исключительно для того, чтобы компилятор не кэшировал значение этой переменной в регистрах, а каждый раз вычитывал её значение. Другого смысла у volatile нет. Все эти попытки использовать volatile для циклов - это от sladkoejka(183 знак., 05.07.2018 15:14)
- И при другом уровне или профиле оптимизации подобранная задержка для delay бывает летит к чертям :) - Petrovich(05.07.2018 15:00, )
- volatile в данном случае бесполезен, т.к. к переменная локальная и никто её изменить не может. Volatile говорит компилятору что переменная может измениться и при её использовании нужно всегда перечитывать, а не использовать закешированное в sladkoejka(20 знак., 05.07.2018 14:52)
- Это Ваша гипотеза. Практика показывает, что некоторые компиляторы даже с nop выбрасывают цикл. Поэтому как сказали выше или volatile или встроенные intrinsic функции типа delay_cycles(size_t). И вообще это плохая практика, т.к. например, на разной Хитрый Китаец(55 знак., 09.07.2018 01:49)