Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Мудрый кот
Сообщения: 1855
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="sergey.UA",url="/forum/viewtopic.php?p=3954967#p3954967"]У меня вот прога, и в консоли ничего не происходит.[/uquote]Умный компилятор такую "прогу" должен скомпилить во что-то вроде:

Код: Выделить всё

void main()
{
  while (1) {}
}
Что он и делает видимо. :dont_know:

Добавлено after 2 minutes 6 seconds:
И не стоит в таких случаях вообще пользоваться float. Сами догадайтесь почему.
Реклама
Потрогал лапой паяльник
Сообщения: 357
Зарегистрирован: Вс янв 11, 2015 20:33:32

Сообщение sergey.UA »

Ну это же не МК, а 32 : 64 битная винда, ей должно быть пофиг на разрядность.
Реклама
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

jcxz, если точнее, то не слишком умный, а слишком оптимизированный, и не всегда опять же это хорошо, как в соседней ветке с ацп и флагами. А умный, по идее, должен учесть, а не влияет ли вызов чего-либо в условии на что-то ещё.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Учесть должен программист, а компилятор тупо оптимизировать всеми имеющимися способами.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

о чём и речь.
Реклама
Мудрый кот
Сообщения: 1855
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="sergey.UA",url="/forum/viewtopic.php?p=3954989#p3954989"]Ну это же не МК, а 32 : 64 битная винда, ей должно быть пофиг на разрядность.[/uquote]
Причём тут "разрядность"?

Добавлено after 5 minutes 12 seconds:
[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3954993#p3954993"]и не всегда опять же это хорошо, как в соседней ветке с ацп и флагами.[/uquote]Программист должен писать код так, чтобы его работоспособность не зависела от уровня оптимизации. Если это не так, то - код кривой. И компилятор в этом не виноват.
Реклама
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

jcxz, это очень неверное утверждение. Компиляторы и оптимизаторы не богами создавались, они далеки от идеала и лажают достаточно часто для того, чтобы всё время проверять в листинге, что они там натворили и следить за ихними баг-листами. Например: https://sourceforge.net/p/sdcc/bugs/ всего 3 тысячи раз компилятор не виноват?
Мудрый кот
Сообщения: 1855
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955103#p3955103"]jcxz, это очень неверное утверждение. Компиляторы и оптимизаторы не богами создавались, они далеки от идеала и лажают достаточно часто для того, чтобы всё время проверять в листинге, что они там натворили и следить за ихними баг-листами. Например: https://sourceforge.net/p/sdcc/bugs/ всего 3 тысячи раз компилятор не виноват?[/uquote]В чём неверное? Вы считаете, что если работоспособность программы зависит от уровня оптимизации - это нормально написанная программа??? :shock:
Про баги компиляторов я ничего не говорил и они тут не при чём. Я говорил о качестве написанного программистом кода, а не о компиляторе.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

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

Мне попадались варианты, когда a += 1; a = a + 1; inc(a); компилировалось по-разному, и при разных уровнях оптимизации опять по-разному.
Насколько мне ещё качественней надо написать обычный инкремент обычной переменной, чтобы быть уверенным, что в ассемблере я увижу то же самое, как бы сам это написал, если бы писал в нём?
Однажды мне пришлось просто плюнуть и вставить вставку на асме в сишный код, потому что оптимизатор XC8 упорно не хотел сдвиг оформлять в сдвиг, он писал муть деления, что в итоге делало мою программу неработоспособной. Не думаю, что она была некачественной.
Потрогал лапой паяльник
Сообщения: 357
Зарегистрирован: Вс янв 11, 2015 20:33:32

Сообщение sergey.UA »

jcxz, ну вы же, по поводу использования float, имели ввиду завышенную размерность переменной ?
Мудрый кот
Сообщения: 1855
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955146#p3955146"]работоспособность нормальной программы может зависеть от уровня оптимизации из-за неидеальности оптимизатора и компилятора.[/uquote]Ещё раз - я говорю только о работе программиста, не компилятора.
Считаем что компилятор идеальный - работает без ошибок. Если при идеальном компиляторе работа кода скомпилённого с оптимизацией и без отличается (не по быстродействию само собой разумеется! а по выполняемому функционалу), то код скорей всего кривой.

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955146#p3955146"]Однажды мне пришлось просто плюнуть и вставить вставку на асме в сишный код, потому что оптимизатор XC8 упорно не хотел сдвиг оформлять в сдвиг, он писал муть деления, что в итоге делало мою программу неработоспособной. Не думаю, что она была некачественной.[/uquote]Если она становилась неработоспособной, потому что это был критичный по времени исполнения участок, и при делении не хватало производительности, то да - с конкретным кодом всё ок. (вопрос тогда скорее к выбранному алгоритму работы или к выбранному МК).
Но если это не так, и неработоспособность возникала не из-за нехватки времени на вычисления - то скорей всего код кривой. :dont_know:

Если Вы пишете:

Код: Выделить всё

int x = ...;
...
return x << 2;
то код должен работать вне зависимости от того какие в результате получатся команды: сделает (x<<2) компилятор сдвигом или умножением или вообще 3 сложения туда впендюрит.

Добавлено after 3 minutes 27 seconds:
[uquote="sergey.UA",url="/forum/viewtopic.php?p=3955158#p3955158"]jcxz, ну вы же, по поводу использования float, имели ввиду завышенную размерность переменной ?[/uquote]
Нет конечно. Я по поводу использования float для счётчика цикла. Подумайте - сколько раз выполнится ваш цикл?
Внимательно подумайте.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

[uquote="jcxz",url="/forum/viewtopic.php?p=3955188#p3955188"]Считаем что компилятор идеальный - работает без ошибок. Если при идеальном компиляторе работа кода скомпилённого с оптимизацией и без отличается (не по быстродействию само собой разумеется! а по выполняемому функционалу), то код скорей всего кривой.[/uquote]
Компилятор не идеален, какой практический смысл считать его идеальным? Он не такой.
Работа кода с оптимизатором и без всегда будет отличаться, притом в зависимости от настроек оптимизатора и код при этом не будет кривой. Отличия могут привести к неправильной работе.
Ну, если конечно называть код кривым из-за того, что программист не знал об особенностях именно этой версии компилятора, тогда конечно, код кривой. У микрочипа тогда весь код кривой, особенно на ранних версиях XC8.

Нормальный разработчик всегда описывает свойства проекта, и настройки компилятора обязательно.

Добавлено after 3 minutes 7 seconds:
что касается float в цикле, то: а) здесь счётчика нет; б) всё равно можно, если учитывать особенности.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955416#p3955416"]Компилятор не идеален, какой практический смысл считать его идеальным? Он не такой.[/uquote]Ошибки в компиляторах были, есть и будут. Но их количество не так велико, чтобы оказывать влияние на среднестатистические проекты. Код надо писать с рассчётом, что компилятор всё сделает по стандарту. Подвергать тестированию. А если не сделал, то исправлять компилятор.

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955416#p3955416"]Работа кода с оптимизатором и без всегда будет отличаться, притом в зависимости от настроек оптимизатора и код при этом не будет кривой.[/uquote]Только в скорости.

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955416#p3955416"]Отличия могут привести к неправильной работе.[/uquote]Вот это и есть кривой код.

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955416#p3955416"]Ну, если конечно называть код кривым из-за того, что программист не знал об особенностях именно этой версии компилятора, тогда конечно, код кривой. У микрочипа тогда весь код кривой, особенно на ранних версиях XC8.[/uquote]Ну вот и ответ, почему они RIP. Дали бы нормальный компилятор и средства отладки, может ещё и порыпались бы.

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955416#p3955416"]Нормальный разработчик всегда описывает свойства проекта, и настройки компилятора обязательно.[/uquote]Я частенько ответственный код тремя разными компиляторами собираю. Много интересного про свой код узнаёшь.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3955433#p3955433"]Только в скорости.[/uquote]
не только.
a = b;
a = c;
это не кривой код, но без явного указания что с этим делать оптимизатор испортит логику.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

С чего бы это? Он поступит точно исходя из того что за сущности из себя представляют a, b и с. От полного выкидывания кода до запуска МБР.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

Он поступит так, как видел это программист, создававший его.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Нет, он поступит в соответствии со стандартом языка программирования.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

Угу.
Мудрый кот
Сообщения: 1855
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955434#p3955434"]a = b;
a = c;
это не кривой код, но без явного указания что с этим делать оптимизатор испортит логику.[/uquote]
Это вообще не код. И единственное что с ним сделает компилятор/оптимизатор - выдаст сообщение об ошибке. Так как типы a,b,c - не определены. А без них невозможно понять что делает этот "код".

Если же предположить что: a,b,c имеют тип int (int a,b,c;), то этот код соответствует коду:
a = c
и компилятор его нормально скомпилит.
Что такое "испортит логику" - не понимаю. Логика тут простая - "а присвоить с", какая же ещё?

Добавлено after 10 minutes 55 seconds:
[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3955416#p3955416"]Работа кода с оптимизатором и без всегда будет отличаться, притом в зависимости от настроек оптимизатора и код при этом не будет кривой. Отличия могут привести к неправильной работе.[/uquote]
Только скоростью. Как уже выше сказали. Если не только скоростью - код кривой.
Или приведите реальный пример такого кода, работа которого будет отличаться в зависимости от оптимизации (на нормальном компиляторе, а не некоем почти никем не используемым и давно заброшенным).
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

[uquote="jcxz",url="/forum/viewtopic.php?p=3955618#p3955618"]Это вообще не код. И единственное что с ним сделает компилятор/оптимизатор - выдаст сообщение об ошибке. Так как типы a,b,c - не определены. А без них невозможно понять что делает этот "код".[/uquote]В случае разных типов я бы указал приведение к типу. Его тут есть?
тот код соответствует коду:
a = c
и компилятор его нормально скомпилит.
Что такое "испортит логику" - не понимаю. Логика тут простая - "а присвоить с", какая же ещё?
Вообще-то, есть ещё такое понятие как время. В одно время мне нужно, чтоб а равнялось б, а в другое время, чтоб с, даже если это время равно одному такту. Неважно, зачем. Это может быть что-то параллельное: что-то где-то рядом читает a. Может быть требованием какой-либо периферии, например получение доступа к флэш у STM.
Только скоростью. Как уже выше сказали. Если не только скоростью - код кривой.
Или приведите реальный пример такого кода, работа которого будет отличаться в зависимости от оптимизации (на нормальном компиляторе, а не некоем почти никем не используемым и давно заброшенным).
Сдаюсь. Тратить время на поиски глюков оптимизатора не хочу. Когда попадётся очередной, если не забуду - покажу Вам персонально. Новый и используемый всеми компилятор безгрешен. Логика его безупречна. В любом ином случае - кривой код или компилятор старый и никем не используется...
Опции, отключающие или ограничивающие влияние оптимизатора на код придумали для таких неверующих в его святость, как я.
Ответить

Вернуться в «Разные вопросы по МК»