Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компилятор PICC V9.83
Шарага > Soft - НЕ железо > Программирование МК
Прохожий
В принципе, компилятор хороший, судя по дизассемблерному листингу.
Но только в режиме PRO.
В режиме Lite он начисто забывает о существовании доброго десятка полезных команд.
Среди них:
incf,
decf,
decfsz

и заодно практически все новые команды от свежих PIC10/12/16.
Кроме этого, в режиме Lite он достаточно забавно транслирует операторы if, for и прочие аналогичные, вставляя кучу промежуточных goto.
В режиме PRO ничего такого нет.
В результате код в режиме Lite получается значительно длиннее и медленнее, чем в режиме PRO, о чем фирмачи честно предупреждают.
Но, дальше - самое интересное - устранение косяков Lite версии в PRO выдается за оптимизацию и за офигительное достижение фирмы HI-TECH.
Ну, чтобы информация была полной - Lite версия free, а PRO приблизительно 1000$.
И тут возникает ряд вопросов:
1. И не лень было специалистам HI-TECH специально фаршмачить в угоду маркетингу?
2. Определите национальность руководства фирмы HI-TECH.
3. Они что, своих пользователей держат за полных придурков, которые не в состоянии заглянуть в дизассемблерный листинг?

PS. ПМСМ, такое приветствоваться не должно.
Поэтому есть идеи по этому поводу.
О них можно поговорить отдельно в известном месте.
Если кто желает, могу поделиться.
MrYuran
Цитата(Прохожий @ 5.12.2011, 12:25) *
PS. ПМСМ, такое приветствоваться не должно.
Поэтому есть идеи по этому поводу.

Путя тут два.
1) послать мелкочипов с ихними поделиями и маркетинговыми изысками.
2) если не подходит п.1, то пилить самостоятельно back-end для GNU GCC (SDCC вроде с младшими пиками работал)

А вообще, сильно подозреваю, что "про" от "непро" отличается набором ключиков компилятора.
orthodox
Цитата(Прохожий @ 5.12.2011, 11:25) *
О них можно поговорить отдельно в известном месте.
Если кто желает, могу поделиться.

Ладно, пощли, поговорим.
А то мне как раз их советовал один друг.
Заодно про MikroEl стоит поговорить.
C виду они мне нравятся.
Хоть бы примерами, которых не нашел в Mplab , зато нашел вместо
них пару странных огрызков ненужного мне кода.
_pasha
Цитата(orthodox @ 5.12.2011, 12:46) *
про MikroEl стоит поговорить.

Стоит.
Нахуй они нужны?
ЗЫ сабж тоже. HI-TECH - ацтой, пугающий пуганых своим видавшим виды дебилизмом.
Прохожий
Цитата(_pasha @ 5.12.2011, 18:25) *
Стоит.
Нахуй они нужны?
ЗЫ сабж тоже. HI-TECH - ацтой, пугающий пуганых своим видавшим виды дебилизмом.

Поясните тогда, что применяется для младших PIC-ов?
И в чем там дебилизм?
_pasha
Цитата(Прохожий @ 5.12.2011, 18:26) *
Поясните тогда, что применяется для младших PIC-ов?
И в чем там дебилизм?

2. Дебилизм в хронических расхождениях с С99 и кол-ве багофич. В 2009 наелся, хватит.
1. SDCC либо Pic Micro Pascal
для pic18 пользуюсь микрочиповским - с Вашей же подачи поставил все переменные статик - радуюсь уже полтора года. За что и спасибо.smile.gif
orthodox
Цитата(_pasha @ 6.12.2011, 11:42) *
2. Дебилизм в хронических расхождениях с С99 и кол-ве багофич. В 2009 наелся, хватит.
1. SDCC либо Pic Micro Pascal
для pic18 пользуюсь микрочиповским - с Вашей же подачи поставил все переменные статик - радуюсь уже полтора года. За что и спасибо.smile.gif

простите ламера, переменные static - это чтобы стек не мучить?
Или просто избегать ошибок при распределении-выделении памяти?
Или, опять же, скорость увеличить за счет того же?

Что до Паскаля - это интересно.
Неудобно было признаться, но я в нем умею, еще со старых пор.
И он мне приятен, тем что хоть и больше набирать тексту, но набранное заметнее гораздо.
То есть меньше риска пропустить какую-то закорючку и тебя (ТУТ ЖЕ!!!) неправильно поймут.
Как-то определеннее он, что ли. Помнится, Протел был на чем-то типа этого написан, возможно, на Дельфи.
Ну ничо так, работал... Неизвестно, на чем AD теперь...

Да, так вот, кто-то еще скажет о Паскале пару теплых слов?
MrYuran
Цитата(orthodox @ 6.12.2011, 14:19) *
Да, так вот, кто-то еще скажет о Паскале пару теплых слов?

Предельный случай - язык АДА.
(Наши в ответ придумали язык РАЯ, но это совсем другая история...)
orthodox
Цитата(MrYuran @ 6.12.2011, 13:24) *
Предельный случай - язык АДА.
(Наши в ответ придумали язык РАЯ, но это совсем другая история...)

Предельные случаи и для Си можно выдумать.
Однако Паскаль построже был раньше, похоже что и сейчас тоже.
MrYuran
Для пиков ещё некий товарищ пытался сделать мелкофреймворк и программировать на C# в мелкостудии.
Правда, нынче сайт проекта лежит на боку...
orthodox
Цитата(MrYuran @ 6.12.2011, 14:05) *
Для пиков ещё некий товарищ пытался сделать мелкофреймворк и программировать на C# в мелкостудии.
Правда, нынче сайт проекта лежит на боку...

Это фтопку.
Нам бы чего поопределеннее, поближе к железу.
И однозначное такое, не допускающее многократных толкований.
MrYuran
Цитата(orthodox @ 6.12.2011, 15:30) *
Нам бы чего поопределеннее, поближе к железу.

А я так наоборот, отгораживаюсь от железа как только могу.
Слишком уж часто и непредсказуемо оно меняется.
В идеале было бы писать, тестить и отлаживать на ПЦ, а потом окончательно финальный тест на МК.
Но это опять отдельная и увесистая тема.
И опять в неопределённом светлом будущем (которое имеет тенденцию так и не наступать)
Прохожий
Цитата(orthodox @ 6.12.2011, 14:19) *
простите ламера, переменные static - это чтобы стек не мучить?
Или просто избегать ошибок при распределении-выделении памяти?
Или, опять же, скорость увеличить за счет того же?

Вы правы.
Static - это из-за особенностей архитектуры PIC18 и программного стека MCC18.
Если переменная локальная, то она размещается в программном стеке.
Все переменные, объявленные в программе main(), являются локальными по отношению к ней.
И тут начинается возня с программным стеком MCC18, отличающаяся затратами кода.
У PIС24 уже есть аппаратная поддержка стека и там следование стандарту ANSI C не приводит к затратам кода.
Возвращаясь к PIC18.
Если объявить переменную с квалификатором static, то она будет иметь абсолютный адрес.
А это, с учетом особенностей архитектуры PIC18, приводит к минимальному коду.
orthodox
Цитата(Прохожий @ 6.12.2011, 19:04) *
Все переменные, объявленные в программе main(), являются локальными по отношению к ней.

О, даже и в main? Ну это еще хуже, чем я думал... Похоже на глюк.
Хотя, если разобраться - нормально, main тоже всего лишь функция.
Прохожий
Цитата(orthodox @ 6.12.2011, 20:36) *
О, даже и в main? Ну это еще хуже, чем я думал... Похоже на глюк.
Хотя, если разобраться - нормально, main тоже всего лишь функция.

Если мне не изменяет склероз, то это требование стандарта.
Глобальные переменные объявляются либо в отдельном заголовочном файле, либо до функции main().
В последней версии MCC18 они по умолчанию - статические.
_pasha
Цитата(orthodox @ 6.12.2011, 18:36) *
О, даже и в main? Ну это еще хуже, чем я думал... Похоже на глюк.
Хотя, если разобраться - нормально, main тоже всего лишь функция.

Это паскаль как раз и давит на мозг своими иррегулярностями - главный begin end. не рассматривается как процедура.
Прохожий
Цитата(_pasha @ 6.12.2011, 21:20) *
Это паскаль как раз и давит на мозг своими иррегулярностями - главный begin end. не рассматривается как процедура.

Прошу Вас изложить инструкции по применению SDCC.
Если это не отнимет у Вас много времени.
_pasha
Цитата(Прохожий @ 6.12.2011, 19:51) *
Прошу Вас изложить инструкции по применению SDCC.
Если это не отнимет у Вас много времени.

Якши.
1. Читаем бегло хрень
2. Заглядываем в доку на компилер - какие там ключики
3. Пишем makefile
4. Добиваемся совместимости с mpasm

Конкретнее - я к утречку выложу, нада ж подготовить примеры и шоб работало. pardon.gif
Прохожий
Цитата(_pasha @ 6.12.2011, 22:13) *
Якши.
1. Читаем бегло хрень
2. Заглядываем в доку на компилер - какие там ключики
3. Пишем makefile
4. Добиваемся совместимости с mpasm

Конкретнее - я к утречку выложу, нада ж подготовить примеры и шоб работало. pardon.gif

А, что? К MPLAB, или иной IDE не прикручивается?
Только через makefile?
_pasha
Цитата(Прохожий @ 6.12.2011, 20:24) *
А, что? К MPLAB, или иной IDE не прикручивается?
Только через makefile?

Я не пробовал, ибо это было до "дружбы" с mplab-c18, мыкфайл не пугал особо

Нынче пишут
Цитата
apparently sdcc is not fully supported yet


Плагин вроде под эклипс был... или нет? не помню.
Есть под C::B пошаговое руководство.
Линуховых под PIKLAB - не пробовал.
Как-то так. Не был. Не состоял. Не участвовал.
PS
wiki for SDCC under C::B
_pasha
Еще ресурс полезный
Я тут покопался, за 2,5 года много воды утекло. Сразу н найдешь. Сейчас убегаю, но к данному вопросу вернусь обязательно. Тем более, что sdcc 3.1 хотелось потестить.
MrYuran
Цитата(Прохожий @ 6.12.2011, 22:24) *
Только через makefile?

Это как первый секс smile.gif
Сначала необычно, потом привыкаешь.

Кроме makefile есть ещё другой подход- scons (Software CONStructor).
Питоноскрипт. (Паша не одобрит)

А я вот уже ни за какие коврижки не доверю такой интимный процесс, как сборку прошивки, какому-то автоматическому буилдеру, т.к. секс все равно возможен, но уже нетрадиционный...
Прохожий
Цитата(MrYuran @ 7.12.2011, 10:43) *
Это как первый секс smile.gif
Сначала необычно, потом привыкаешь.

Кроме makefile есть ещё другой подход- scons (Software CONStructor).
Питоноскрипт. (Паша не одобрит)

А я вот уже ни за какие коврижки не доверю такой интимный процесс, как сборку прошивки, какому-то автоматическому буилдеру, т.к. секс все равно возможен, но уже нетрадиционный...

Я начинал с Электроники60 и ОС RT11, если кто помнит.
Там все было через файлы с ключами, только называлось это по-другому.
А окончательную сборку я гоняю в симуляторе в виде дизассемблированного дампа.
Там все косяки видно сразу.
И если, что-то не нравится, я комфортно переключаю нужные рюшечки.
А не судорожно копошусь в тексте, ища один-единственный символ...
Поэтому makefile у меня может иметь место, если компилятор будет хорош и бесплатен.
MPLAB позволяет работать и в таком режиме.
dxp
QUOTE (MrYuran @ 7.12.2011, 12:43) *
Это как первый секс smile.gif
Сначала необычно, потом привыкаешь.

Я так и не привык. :(

QUOTE (MrYuran @ 7.12.2011, 12:43) *
Кроме makefile есть ещё другой подход- scons (Software CONStructor).
Питоноскрипт. (Паша не одобрит)

+100500! Уже лет пять-шесть как не нарадуюсь. Про make вспоминаю как про страшный сон. Или когда жизнь заставляет.

QUOTE (MrYuran @ 7.12.2011, 12:43) *
А я вот уже ни за какие коврижки не доверю такой интимный процесс, как сборку прошивки, какому-то автоматическому буилдеру, т.к. секс все равно возможен, но уже нетрадиционный...

Сборка из оболочки хороша для попробовать или для быстрого поднятия проекта на незнакомой платформе. Потом, конечно, надо переходить на привычные рельсы (хороший редактор + хорошая система сборки).
orthodox
Подтвердите, господа, мои опасения.
Сборка, вот эта вот о которой все говорят — это обязательно?
То есть, если есть всего один файл - все равно надо?
Понятно, что хедеры как бы все равно участвуют.
Но самому непременно надо разбивать проект на много много маленьких
кусочков, для получения удовольствия от склеивания?
Или, если проект небольшой, можно этого не делать?

Потому что все эти ключи к компилятору... Там и так не могу разобраться,
получается что написать инструкцию для сборки, по сути, как еще одну программу что ли...
Завидую тем, кто такой умный.
MrYuran
Цитата(orthodox @ 7.12.2011, 15:41) *
получается что написать инструкцию для сборки, по сути, как еще одну программу что ли...
Завидую тем, кто такой умный.

Не программу, а сценарий.
Сборка происходит в любом случае, независимо от количества исходных файлов.
Идея раздельной компиляции проста до безобразия.
Каждый файл (модуль) компилируется отдельно, в результате получается .obj, представляющий собой откомпилированные фрагменты кода с символическими ссылками вместо связей.
Второй этап - собственно сборка (линковка).
Линкер собирает эти откомпилированные кусочки, располагает их по конкретным адресам и вместо ссылок прописывает непосредственные связи.

Автоматический сборщик делает тоже так, но в его работу вмешаться невозможно.
В то время как ручной вариант полностью под контролем разработчика.
А самое главное - абсолютная независимость от среды разработки. Хоть в блокноте рисуй.
Прохожий
Цитата(orthodox @ 7.12.2011, 14:41) *
...
Завидую тем, кто такой умный.

Это Вас пугают.
На самом деле - ничего этого не надо.
В большинстве наших с Вами случаев.
Особенно в том, о котором мы говорили.
MrYuran
Цитата(Прохожий @ 7.12.2011, 19:00) *
На самом деле - ничего этого не надо.
В большинстве наших с Вами случаев.

Ещё один плюс - волей-неволей приходится в конце концов открыть документацию на компилятор.
И внезапно узнать много нового и интересного.

Ну да ладно, не буду уже утомлять...
Я для себя уже давно выбрал GCC.
Как ИАРовцы не скажут, "one tool, more platforms"
orthodox
Цитата(MrYuran @ 8.12.2011, 8:26) *
Ещё один плюс - волей-неволей приходится в конце концов открыть документацию на компилятор.
И внезапно узнать много нового и интересного.

Например? Читал неоднократно.
Пришел в ужас - от количества опций рябит в глазах, и каждый раз одна из них может вообще иначе все скомпилировать.
Сделать программу нерабочей или неправильно рабочей.

Все это ради того, чтобы иметь возможность хранить наработки, рассчитанные под разные варианты применения и складывать их как кубики?
Это точно надо на среднее семейство ПИК, когда вся программа в 2 к укладывается максимум, а то и пару сот бит?
И обязательно надо вслепую складывать кубики? мне кажется? просмотреть их на предмет соответствия условиям (камню, и что там еще) —
перед компиляцией вручную — полезнее. Ну, в общем, примера хочу.
Производительность — как-то могу понять.
Желание иметь независимость от камня - понять могу. Но исполнение этого желания надо думать, не от нас зависит.
лучше бы подстраховаться, нет?
dxp
QUOTE (orthodox @ 8.12.2011, 16:52) *
Например? Читал неоднократно.
Пришел в ужас - от количества опций рябит в глазах, и каждый раз одна из них может вообще иначе все скомпилировать.
Сделать программу нерабочей или неправильно рабочей.

Вы преувеличиваете. Реально там всего несколько ключей основных вроде задающих уровень оптимизации и подобного. А остальные вспомогательные - пути, форматы промежуточных файлов и т.д. Совсем не сложно на самом деле. Надо просто попробовать. С простого. Или с примера, благо их есть полно подо всё, что угодно.
Прохожий
Цитата(orthodox @ 8.12.2011, 13:52) *
Например? Читал неоднократно.
Пришел в ужас - от количества опций рябит в глазах, и каждый раз одна из них может вообще иначе все скомпилировать.
Сделать программу нерабочей или неправильно рабочей.

В принципе, если все написано правильно, то такого быть не должно.
Программа должна работать при всех уровнях оптимизации.
Еще один аспект, на который обычно обращают внимание - это, так называемый startup, т. е. некий код, предшествующий Вашей программе.
Цитата(orthodox @ 8.12.2011, 13:52) *
Все это ради того, чтобы иметь возможность хранить наработки, рассчитанные под разные варианты применения и складывать их как кубики?
Это точно надо на среднее семейство ПИК, когда вся программа в 2 к укладывается максимум, а то и пару сот бит?

Полезно, но необходимостью не является. Можно старым дедовским копипастом.
Цитата(orthodox @ 8.12.2011, 13:52) *
Желание иметь независимость от камня - понять могу. Но исполнение этого желания надо думать, не от нас зависит.
лучше бы подстраховаться, нет?

Полная независимость от камня невозможна.
А зачастую она требует значительного оверхеда.


Цитата(MrYuran @ 8.12.2011, 8:26) *
Ещё один плюс - волей-неволей приходится в конце концов открыть документацию на компилятор.
И внезапно узнать много нового и интересного.

Я всегда вдумчиво просматриваю документацию на компиляторы АСМ, С и Линкер.
Особенно в разделе ключей.
И что мешает в IDE быстро нащелкать рюшечками желаемую комбинацию ключей и убедиться в том, что все правильно, посмотрев на получившийся результат в виде командной строки?
Если говорить об MPLAB-е, то он выводит все командные строки для всех включенных в дело программ.
Для MCC18 их 3 штуки - C компилятор, Ассемблер и Компоновщик.
orthodox
тссс....тише не спугните... замигал первый в жизни светодиодик.
теперь тихонечно тихонечно модифицируем эту маленькую тест-программку...
И сразу писать проект, ну тот самый... Бо времени нету катастрофически.
_pasha
Всё, песец!
Обещал сдцц мэйкфайл, оно сырое мама не горюй. Психанул, пишу свой удобный вариант, только их 4, по числу платформ. А мне 51-е понадобились..
Прохожий
Цитата(_pasha @ 10.12.2011, 18:31) *
Всё, песец!
Обещал сдцц мэйкфайл, оно сырое мама не горюй. Психанул, пишу свой удобный вариант, только их 4, по числу платформ. А мне 51-е понадобились..

Есть результаты по реальному применению сабжа темы.
Результаты оптимизации - 5-.
Качество ассемблерного кода - 5 (в режиме PRO).
Изделие гонялось 8 часов с порчей сети инвертором в 6 кВт.
Замечаний к работе МК и программы нет.
Если кому нужны инструкции по установке и применению - их есть у меня.
A.T.Tappman
Не знаю, врёт товарищ или нет, но забавно получается. http://ithappens.ru/story/8049
MrYuran
Цитата(A.T.Tappman @ 19.12.2011, 11:31) *
Не знаю, врёт товарищ или нет, но забавно получается. http://ithappens.ru/story/8049

У Криса Касперски в книжке по оптимизации подобный пример был, только на "взрослом" процессоре, с выходом за границы выравнивания кэша.
Помню тему на элхе, где программу для DSP-процессора оптимизировали по скорости в десятки (!) раз.
orthodox
Цитата(MrYuran @ 19.12.2011, 11:03) *
У Криса Касперски в книжке по оптимизации подобный пример был, только на "взрослом" процессоре, с выходом за границы выравнивания кэша.
Помню тему на элхе, где программу для DSP-процессора оптимизировали по скорости в десятки (!) раз.

А где это в «невзрослых процессорах» сиречь МК , 32 бита читаются за одно обращение?
Хотя да, вроде есть такие уже...
_pasha
Цитата(A.T.Tappman @ 19.12.2011, 9:31) *
Не знаю, врёт товарищ или нет, но забавно получается. http://ithappens.ru/story/8049

А нехрен generic types напрямую использовать! Хотя бы, через stdint.h
MrYuran
Цитата(orthodox @ 19.12.2011, 21:46) *
А где это в «невзрослых процессорах» сиречь МК , 32 бита читаются за одно обращение?
Хотя да, вроде есть такие уже...

Даже в копеечных Cortex M0, которые в розницу дешевле младших пиков и авр
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.