xc8 и degenerate unsigned comparison
- A. Fig Lee
- Потрогал лапой паяльник
- Сообщения: 306
- Зарегистрирован: Сб мар 17, 2012 20:31:44
- Откуда: Нью Йорк
Re: xc8 и degenerate unsigned comparison
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658238#p3658238"]Короче, на форуме микрочип большинство людей пришло к выводу - что таки да - это баг компиля. И советуют ставить тикет на микрочип. Кому интересно ссыль на топик я приводил выше.
ПС
Просто разница меня поразила - за полчаса на буржуйском форуме адекватно всё разобрали с пришли к выводу. А на нашем родном коте - началось с оскорблений....печаль
Добавлено after 1 minute 56 seconds:
[uquote="oleg110592",url="/forum/viewtopic.php?p=3658221#p3658221"]Компилятор SDCC (3.9 свежий) на конструкцию вообще не ругнулся[/uquote]
Естественно, да и не должен - как я и писал в стартовом посте то, что пишет xc8 - это бред не совместимый со стандартом СИ.[/uquote]
А буржуины и на родном тебе корректно сразу так и сказали
Вобщем - держись нас, буржуинов и все будет хорошо.
ПС
Просто разница меня поразила - за полчаса на буржуйском форуме адекватно всё разобрали с пришли к выводу. А на нашем родном коте - началось с оскорблений....печаль
Добавлено after 1 minute 56 seconds:
[uquote="oleg110592",url="/forum/viewtopic.php?p=3658221#p3658221"]Компилятор SDCC (3.9 свежий) на конструкцию вообще не ругнулся[/uquote]
Естественно, да и не должен - как я и писал в стартовом посте то, что пишет xc8 - это бред не совместимый со стандартом СИ.[/uquote]
А буржуины и на родном тебе корректно сразу так и сказали
Вобщем - держись нас, буржуинов и все будет хорошо.
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25261
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: xc8 и degenerate unsigned comparison
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658263#p3658263"]в чём же мы не правы?[/uquote]
В том, что стандартный Си В ПРИНЦИПЕ не может быть реализован на МК. И чем примитивнее МК, тем больше заплаток будет содержать компилятор по сравнению со стандартом Си.
В этом нет ничего особенного и плохого. С этим можно и нужно жить. Как с силикон-эрратой на сам МК.
"Писателям на Си++" можно не беспокоиться. Если это положение дел им не нравится, то им вообще не стоит заниматься эмбеддом.
В том, что стандартный Си В ПРИНЦИПЕ не может быть реализован на МК. И чем примитивнее МК, тем больше заплаток будет содержать компилятор по сравнению со стандартом Си.
В этом нет ничего особенного и плохого. С этим можно и нужно жить. Как с силикон-эрратой на сам МК.
"Писателям на Си++" можно не беспокоиться. Если это положение дел им не нравится, то им вообще не стоит заниматься эмбеддом.
- A. Fig Lee
- Потрогал лапой паяльник
- Сообщения: 306
- Зарегистрирован: Сб мар 17, 2012 20:31:44
- Откуда: Нью Йорк
Re: xc8 и degenerate unsigned comparison
Почему не может? Какието ограмичения есть, но все равно
- КРАМ
- Друг Кота
- Сообщения: 25261
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: xc8 и degenerate unsigned comparison
Это не ограничения, а реализация того, что Си не предусматривает, однако целесообразно для конкретной архитектуры. Это может быть все что угодно, включая ненативную для Си разрядность, специфичный доступ к памяти или просто битовый доступ, например.
Re: xc8 и degenerate unsigned comparison
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658406#p3658406"]В том, что стандартный Си В ПРИНЦИПЕ не может быть реализован на МК.[/uquote]
А теперь давайте разбираться.
Первое:
Из чего состоит компилятор языка си - грубо можно выделить 2 компонента:
a)синтаксический лексер и парсер(препроцессора и самого языка) + оптимизатор + генератор кода
б) стандартная библиотека.
Если брать стандартную библиотеку - то да, Вы абсолютно правы, очевидно, стандартная библиотека не может быть полностью реализована на дохлых МК из-за ограниченности ресурсов. Да и бог бы с ней.
Но сама процедура разбора синтаксиса и генератор кода - вполне. Да все мы не глупые люди и понятно, что есть пара оговорок, например про совсем длинные типы типа 8байтного double(да даже 4х байтный int). И всё мы прекрасно понимаем к чему приведет их частое использование, а именно к эмуляции длинных типов на 8ми битном мк. И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки. Но в приведённом тривиальном куске кода - такого нет и в помине.
Кроме того - пара ограничений - это не повод зарубить весь компиль и пустить всё остальное не по стандарту.
Второе:
Если копнуть глубже, а именно в теорию компиляторов: исходя из листинга (повторюсь - я не силён в микрочиповском асме) - то код вполне валидный. Т.е. Варнинг получается предупреждает о том, чего попросту нет!
Кроме - того - убийственным аргументом является то, что варнинг вылезает только при включенной оптимизации. Т.е. это не проблема урезанности языка СИ на конкретном железе, а ошибка оптимизатора.
И мы с вами пришли к тому, что данная ошибка не имеет никакого отношения к железу - и даже к генератору конечного кода. Я думаю ошибка на этапе свёртки AST-дерева оптимизатором, именно там выплёвывается варнинг ещё задолго до начала генерации кода под конкретную архитектуру.
Если говорить проще - ошибка никак не связана с микроконтроллерами.
ПС
Кому интересно что такое AST-дерево - можно почитать даже в википедии https://ru.wikipedia.org/wiki/Абстрактн ... кое_дерево
Добавлено after 4 minutes 40 seconds:
Да и вообще - если б даже не существовало никаких стандартов - с учетом того что код тривиален и тип int16_t вполне себе реализуем на всей линейке микрочиповских камней - по логике вещей этот варгиг абсурден, и сточки зрения стандарта и без него
А теперь давайте разбираться.
Первое:
Из чего состоит компилятор языка си - грубо можно выделить 2 компонента:
a)синтаксический лексер и парсер(препроцессора и самого языка) + оптимизатор + генератор кода
б) стандартная библиотека.
Если брать стандартную библиотеку - то да, Вы абсолютно правы, очевидно, стандартная библиотека не может быть полностью реализована на дохлых МК из-за ограниченности ресурсов. Да и бог бы с ней.
Но сама процедура разбора синтаксиса и генератор кода - вполне. Да все мы не глупые люди и понятно, что есть пара оговорок, например про совсем длинные типы типа 8байтного double(да даже 4х байтный int). И всё мы прекрасно понимаем к чему приведет их частое использование, а именно к эмуляции длинных типов на 8ми битном мк. И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки. Но в приведённом тривиальном куске кода - такого нет и в помине.
Кроме того - пара ограничений - это не повод зарубить весь компиль и пустить всё остальное не по стандарту.
Второе:
Если копнуть глубже, а именно в теорию компиляторов: исходя из листинга (повторюсь - я не силён в микрочиповском асме) - то код вполне валидный. Т.е. Варнинг получается предупреждает о том, чего попросту нет!
Кроме - того - убийственным аргументом является то, что варнинг вылезает только при включенной оптимизации. Т.е. это не проблема урезанности языка СИ на конкретном железе, а ошибка оптимизатора.
И мы с вами пришли к тому, что данная ошибка не имеет никакого отношения к железу - и даже к генератору конечного кода. Я думаю ошибка на этапе свёртки AST-дерева оптимизатором, именно там выплёвывается варнинг ещё задолго до начала генерации кода под конкретную архитектуру.
Если говорить проще - ошибка никак не связана с микроконтроллерами.
ПС
Кому интересно что такое AST-дерево - можно почитать даже в википедии https://ru.wikipedia.org/wiki/Абстрактн ... кое_дерево
Добавлено after 4 minutes 40 seconds:
Да и вообще - если б даже не существовало никаких стандартов - с учетом того что код тривиален и тип int16_t вполне себе реализуем на всей линейке микрочиповских камней - по логике вещей этот варгиг абсурден, и сточки зрения стандарта и без него
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25261
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: xc8 и degenerate unsigned comparison
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658481#p3658481"]И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки.[/uquote]
А в Си есть фикс пойнт? Это для меня новость.... И какой он стандартной разрядности-формы?
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658481#p3658481"]по логике вещей этот варнинг абсурден, и сточки зрения стандарта и без него[/uquote]
Смысл моих комментариев в этой теме сводился к тому, что если компилятор дает возможность сгенерировать загружаемый хекс, то какая разница какие варнинги он даст в Output?
Если Вы чего то боитесь, проконтролируйте листинг дизасма. Проблема не стоит выеденного яйца.
А в Си есть фикс пойнт? Это для меня новость.... И какой он стандартной разрядности-формы?
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658481#p3658481"]по логике вещей этот варнинг абсурден, и сточки зрения стандарта и без него[/uquote]
Смысл моих комментариев в этой теме сводился к тому, что если компилятор дает возможность сгенерировать загружаемый хекс, то какая разница какие варнинги он даст в Output?
Если Вы чего то боитесь, проконтролируйте листинг дизасма. Проблема не стоит выеденного яйца.
Re: xc8 и degenerate unsigned comparison
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658498#p3658498"][uquote="fsmoke",url="/forum/viewtopic.php?p=3658481#p3658481"]И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки.[/uquote]
А в Си есть фикс пойнт?[/uquote]
Нет, встроенного конечно нет, но он легко пишется - и работает само собой быстрее. Даже через обычный uint16_t - можно написать убогий фикс поинт. А если взять uint32_t то вполне годный(хотя помоему в пиках uint32_t скатывается к 24 битам, если память не подводит). Даже с учетом эмуляции 16, 24 и 32 битных типов - получается гораздо быстрее, чем на флоатах. Там где не нужны супер точные вычисления(а таких задач 80% минимум) - вполне можно извернуться через фикс. Аппаратный сопроцессор вроде как только на 32х пиках есть, надо бы в конторе отсыпать себе поиграться на досуге - там кстати уже можно на крестах писать аккуратненько
А в Си есть фикс пойнт?[/uquote]
Нет, встроенного конечно нет, но он легко пишется - и работает само собой быстрее. Даже через обычный uint16_t - можно написать убогий фикс поинт. А если взять uint32_t то вполне годный(хотя помоему в пиках uint32_t скатывается к 24 битам, если память не подводит). Даже с учетом эмуляции 16, 24 и 32 битных типов - получается гораздо быстрее, чем на флоатах. Там где не нужны супер точные вычисления(а таких задач 80% минимум) - вполне можно извернуться через фикс. Аппаратный сопроцессор вроде как только на 32х пиках есть, надо бы в конторе отсыпать себе поиграться на досуге - там кстати уже можно на крестах писать аккуратненько
- КРАМ
- Друг Кота
- Сообщения: 25261
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: xc8 и degenerate unsigned comparison
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658502#p3658502"]Аппаратный сопроцессор вроде как только на 32х пиках есть[/uquote]
Фикс пойнт - аппаратная фича 16-разрядной платформы Микрочипа. ДСП ядро этой платформы (в dsPIC30/33 всех разновидностей) аккумуляторы В ПРИНЦИПЕ заточены под этот формат, включая инструкции add, sac (sac.r), да и все остальные тоже). Разрядность этих аккумуляторов, к слову, - 40.
Это я не к Вашему вопросу темы, а к вопросу о совместимости стандартного Си с железом МК.
Что касается фикс пойнта в Си, то реализовать такой формат поверх языка, естественно, несложно, но вот вся эта реализация будет притянута за уши, а читабельность равна нулю.
Добавлено after 2 minutes 45 seconds:
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658502#p3658502"]хотя помоему в пиках uint32_t скатывается к 24 битам, если память не подводит[/uquote]
В каких ПИКах? И с чего бы?
Фикс пойнт - аппаратная фича 16-разрядной платформы Микрочипа. ДСП ядро этой платформы (в dsPIC30/33 всех разновидностей) аккумуляторы В ПРИНЦИПЕ заточены под этот формат, включая инструкции add, sac (sac.r), да и все остальные тоже). Разрядность этих аккумуляторов, к слову, - 40.
Это я не к Вашему вопросу темы, а к вопросу о совместимости стандартного Си с железом МК.
Что касается фикс пойнта в Си, то реализовать такой формат поверх языка, естественно, несложно, но вот вся эта реализация будет притянута за уши, а читабельность равна нулю.
Добавлено after 2 minutes 45 seconds:
[uquote="fsmoke",url="/forum/viewtopic.php?p=3658502#p3658502"]хотя помоему в пиках uint32_t скатывается к 24 битам, если память не подводит[/uquote]
В каких ПИКах? И с чего бы?
- A. Fig Lee
- Потрогал лапой паяльник
- Сообщения: 306
- Зарегистрирован: Сб мар 17, 2012 20:31:44
- Откуда: Нью Йорк
Re: xc8 и degenerate unsigned comparison
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658460#p3658460"]Это не ограничения, а реализация того, что Си не предусматривает, однако целесообразно для конкретной архитектуры. Это может быть все что угодно, включая ненативную для Си разрядность, специфичный доступ к памяти или просто битовый доступ, например.[/uquote]
Если мне склероз не изменяет, нативной разрядности в си нет.
Если мне склероз не изменяет, нативной разрядности в си нет.
Re: xc8 и degenerate unsigned comparison
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658509#p3658509"]Фикс пойнт - аппаратная фича 16-разрядной платформы Микрочипа.[/uquote]
Я с дспиками никогда не работал...
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658509#p3658509"]Что касается фикс пойнта в Си, то реализовать такой формат поверх языка, естественно, несложно, но вот вся эта реализация будет притянута за уши, а читабельность равна нулю.[/uquote]
Смотря как написать, нечитабельнно можно написать и тривиальный код, всё зависит от опыта
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658509#p3658509"]В каких ПИКах? И с чего бы?[/uquote]
Сорян, не в пиках это было....и вообще не в мк . Чет загнался
Я с дспиками никогда не работал...
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658509#p3658509"]Что касается фикс пойнта в Си, то реализовать такой формат поверх языка, естественно, несложно, но вот вся эта реализация будет притянута за уши, а читабельность равна нулю.[/uquote]
Смотря как написать, нечитабельнно можно написать и тривиальный код, всё зависит от опыта
[uquote="КРАМ",url="/forum/viewtopic.php?p=3658509#p3658509"]В каких ПИКах? И с чего бы?[/uquote]
Сорян, не в пиках это было....и вообще не в мк . Чет загнался
- КРАМ
- Друг Кота
- Сообщения: 25261
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: xc8 и degenerate unsigned comparison
[uquote="A. Fig Lee",url="/forum/viewtopic.php?p=3658543#p3658543"]нативной разрядности в си нет.[/uquote]
Она определена стандартными типами.
К ним не относится разрядность 40 или 24, 1 или 4
Она определена стандартными типами.
К ним не относится разрядность 40 или 24, 1 или 4


