Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: xc8 и degenerate unsigned comparison

Пт июн 28, 2019 20:58:21

Короче, на форуме микрочип большинство людей пришло к выводу - что таки да - это баг компиля. И советуют ставить тикет на микрочип. Кому интересно ссыль на топик я приводил выше.

ПС
Просто разница меня поразила - за полчаса на буржуйском форуме адекватно всё разобрали с пришли к выводу. А на нашем родном коте - началось с оскорблений....печаль

Добавлено after 1 minute 56 seconds:
Компилятор SDCC (3.9 свежий) на конструкцию вообще не ругнулся


Естественно, да и не должен - как я и писал в стартовом посте то, что пишет xc8 - это бред не совместимый со стандартом СИ.

А буржуины и на родном тебе корректно сразу так и сказали
Вобщем - держись нас, буржуинов и все будет хорошо.

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 06:08:49

в чём же мы не правы?

В том, что стандартный Си В ПРИНЦИПЕ не может быть реализован на МК. И чем примитивнее МК, тем больше заплаток будет содержать компилятор по сравнению со стандартом Си.
В этом нет ничего особенного и плохого. С этим можно и нужно жить. Как с силикон-эрратой на сам МК.
"Писателям на Си++" можно не беспокоиться. Если это положение дел им не нравится, то им вообще не стоит заниматься эмбеддом.

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 09:48:54

Почему не может? Какието ограмичения есть, но все равно

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 09:54:32

Это не ограничения, а реализация того, что Си не предусматривает, однако целесообразно для конкретной архитектуры. Это может быть все что угодно, включая ненативную для Си разрядность, специфичный доступ к памяти или просто битовый доступ, например.

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 10:49:23

В том, что стандартный Си В ПРИНЦИПЕ не может быть реализован на МК.


А теперь давайте разбираться.
Первое:

Из чего состоит компилятор языка си - грубо можно выделить 2 компонента:
a)синтаксический лексер и парсер(препроцессора и самого языка) + оптимизатор + генератор кода
б) стандартная библиотека.

Если брать стандартную библиотеку - то да, Вы абсолютно правы, очевидно, стандартная библиотека не может быть полностью реализована на дохлых МК из-за ограниченности ресурсов. Да и бог бы с ней.

Но сама процедура разбора синтаксиса и генератор кода - вполне. Да все мы не глупые люди и понятно, что есть пара оговорок, например про совсем длинные типы типа 8байтного double(да даже 4х байтный int). И всё мы прекрасно понимаем к чему приведет их частое использование, а именно к эмуляции длинных типов на 8ми битном мк. И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки. Но в приведённом тривиальном куске кода - такого нет и в помине.

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

Второе:
Если копнуть глубже, а именно в теорию компиляторов: исходя из листинга (повторюсь - я не силён в микрочиповском асме) - то код вполне валидный. Т.е. Варнинг получается предупреждает о том, чего попросту нет!
Кроме - того - убийственным аргументом является то, что варнинг вылезает только при включенной оптимизации. Т.е. это не проблема урезанности языка СИ на конкретном железе, а ошибка оптимизатора.

И мы с вами пришли к тому, что данная ошибка не имеет никакого отношения к железу - и даже к генератору конечного кода. Я думаю ошибка на этапе свёртки AST-дерева оптимизатором, именно там выплёвывается варнинг ещё задолго до начала генерации кода под конкретную архитектуру.

Если говорить проще - ошибка никак не связана с микроконтроллерами.

ПС
Кому интересно что такое AST-дерево - можно почитать даже в википедии https://ru.wikipedia.org/wiki/Абстрактн ... кое_дерево

Добавлено after 4 minutes 40 seconds:
Да и вообще - если б даже не существовало никаких стандартов - с учетом того что код тривиален и тип int16_t вполне себе реализуем на всей линейке микрочиповских камней - по логике вещей этот варгиг абсурден, и сточки зрения стандарта и без него

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 11:29:29

И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки.

А в Си есть фикс пойнт? Это для меня новость.... И какой он стандартной разрядности-формы?
по логике вещей этот варнинг абсурден, и сточки зрения стандарта и без него

Смысл моих комментариев в этой теме сводился к тому, что если компилятор дает возможность сгенерировать загружаемый хекс, то какая разница какие варнинги он даст в Output?
Если Вы чего то боитесь, проконтролируйте листинг дизасма. Проблема не стоит выеденного яйца.

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 11:41:42

И я всю математику перевожу на fixed point обычно, чтоб уйти от плавающей точки.

А в Си есть фикс пойнт?


Нет, встроенного конечно нет, но он легко пишется - и работает само собой быстрее. Даже через обычный uint16_t - можно написать убогий фикс поинт. А если взять uint32_t то вполне годный(хотя помоему в пиках uint32_t скатывается к 24 битам, если память не подводит). Даже с учетом эмуляции 16, 24 и 32 битных типов - получается гораздо быстрее, чем на флоатах. Там где не нужны супер точные вычисления(а таких задач 80% минимум) - вполне можно извернуться через фикс. Аппаратный сопроцессор вроде как только на 32х пиках есть, надо бы в конторе отсыпать себе поиграться на досуге - там кстати уже можно на крестах писать аккуратненько :))

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 12:03:34

Аппаратный сопроцессор вроде как только на 32х пиках есть

Фикс пойнт - аппаратная фича 16-разрядной платформы Микрочипа. ДСП ядро этой платформы (в dsPIC30/33 всех разновидностей) аккумуляторы В ПРИНЦИПЕ заточены под этот формат, включая инструкции add, sac (sac.r), да и все остальные тоже). Разрядность этих аккумуляторов, к слову, - 40.
Это я не к Вашему вопросу темы, а к вопросу о совместимости стандартного Си с железом МК.
Что касается фикс пойнта в Си, то реализовать такой формат поверх языка, естественно, несложно, но вот вся эта реализация будет притянута за уши, а читабельность равна нулю.

Добавлено after 2 minutes 45 seconds:
хотя помоему в пиках uint32_t скатывается к 24 битам, если память не подводит

В каких ПИКах? И с чего бы?

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 13:55:19

Это не ограничения, а реализация того, что Си не предусматривает, однако целесообразно для конкретной архитектуры. Это может быть все что угодно, включая ненативную для Си разрядность, специфичный доступ к памяти или просто битовый доступ, например.

Если мне склероз не изменяет, нативной разрядности в си нет.

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 14:06:24

Фикс пойнт - аппаратная фича 16-разрядной платформы Микрочипа.

Я с дспиками никогда не работал...

Что касается фикс пойнта в Си, то реализовать такой формат поверх языка, естественно, несложно, но вот вся эта реализация будет притянута за уши, а читабельность равна нулю.


Смотря как написать, нечитабельнно можно написать и тривиальный код, всё зависит от опыта

В каких ПИКах? И с чего бы?

Сорян, не в пиках это было....и вообще не в мк . Чет загнался

Re: xc8 и degenerate unsigned comparison

Сб июн 29, 2019 15:04:01

нативной разрядности в си нет.

Она определена стандартными типами.
К ним не относится разрядность 40 или 24, 1 или 4
Ответить