Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Совместное использование *.сpp файлов и *.c
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
zltigo
QUOTE (sergeeff @ Jun 26 2011, 00:44) *
Имеем в начале работы процессор, компилятор и стандартную библиотеку.

Забыли главное - голову на плечах и опыт отличный от нуля. Без этих двух вещей получаем воинствуещего ламера inventor sad.gif.
QUOTE
Проект всегда итерационен (почти).

Подход а-ля Александреску характерен для научных работ - давайте на бумаге/модели получим, хоть какой-то результат и потом подумаем, что дальше делать. У инженеров в сложных случаях тоже есть понятие НИОКР, но это именно заранее запланированный этап.


QUOTE (inventor @ Jun 26 2011, 08:35) *
Именно так и есть, обычно все библиотеки САМ перекопилируешь-выкидывая оттуда
все ненужное и исправляя ихние ошибки.

sm.gif sm.gif sm.gif
sergeeff
Цитата(zltigo @ Jun 26 2011, 11:26) *
Забыли главное - голову на плечах и опыт отличный от нуля.


Это само собой подразумевалось. Однако, при переходе на новый процессор+компилятор всегда есть определенная доля неизведанности, понимание которой приходит не СРАЗУ, а по мере работы над проектом.

Потом, мне кажется, спор возник из-за наличия двух принципиально различных типов проектов. Первые, по типу обучения в вузе "зазубрил/сдал/забыл", а вторые - большие проекты, пишущиеся и развивающиеся годами. Коллеги работают в разных типах проектов, отсюда и разное видение проблем.
zltigo
QUOTE (sergeeff @ Jun 26 2011, 12:37) *
Однако, при переходе на новый процессор+компилятор всегда есть определенная доля неизведанности, понимание которой приходит не СРАЗУ, а по мере работы над проектом.

На новый процессор - для этого существуют отладочные платы - купил, попробовал, в том числе и принципиально узки места по железу/софту, осознал...
С компиляторами все еще проще - они достаточно все одинаково хороши и обычно кроссплатформенны, посему, как правило, компилятор уже достаточно знаком.
Исключения встречаются, но они скорее всего уже именно исключения, если необходимо вдруг наконец-то заставить работать что-то старое неведомо кем сделанное. И тогда имеем какой-нибудь достаточно ущербный контроллер и такой-же замерший в прошлом компилятор. Я в прошлом году дважды с таким сталкивался - PIC16 + Hi-Tech C компилятор и M8C + ImageCraft. Это дополнительно создает некоторые хлопоты. Но это был такой прыжок в прошлое. Нехарактерный.
QUOTE
Потом, мне кажется, спор возник из-за наличия двух принципиально различных типов проектов.

Категорически нет. Проблема просто у уровне знаний - ниже плинтуса, или выше.
sergeeff
Цитата(zltigo @ Jun 26 2011, 13:18) *
Категорически нет. Проблема просто у уровне знаний - ниже плинтуса, или выше.


Согласитесь,что проект <4Kb и проект >1Mb несколько отличаются. И технологии при их реализации тоже.

А вообще, солнышко светит, лето, воскресенье. Надо пользоваться случаем и отдыхать, чего всем и желаю.
MrYuran
Цитата(zltigo @ Jun 25 2011, 22:53) *
Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода.

Да, но не надо переживать о нескольких лишних байтах/циклах там, где это совершенно некритично.
Некоторые в ужасе хватаются за голову, видя в контроллерном проекте float.
Ну а что такого? Если скорость всех расчётов на порядки выше, чем скорость поступления сэмплов с АЦП.
Вот это видимо и имелось в виду.
Не надо пытаться заоптимизировать всё до смерти без насущной необходимости.
Иметь представление об узких местах и проектировать с их учётом - надо.

А про оптимизацию, по-моему, Макконнел рассуждал в "совершенном коде".
У него было там что-то типа "мысли об оптимизации могут совершенно заблокировать разработку проекта. "

Вот нашёл, цитата из книги:
Цитата
Как правило, не стоит тратить много усилий на оптимизацию отдельных мето-
методов. Эффективность в основном определяется конструкцией высокого уровня.
Обычно микрооптимизация выполняется, только когда закончена вся программа
и выясняется, что высокоуровневая конструкция исчерпала свои возможности
обеспечить нужную производительность. Не теряйте время на вылизывание от-
отдельных методов, пока не выяснится, что это необходимо.
dxp
Цитата(inventor @ Jun 24 2011, 22:50) *
Не было времени сегодня искать пример,
щас попробую его описать.
Процессор работает на чатоте 14 Мгц
обменивается с другим процом на частоте 1Мгц.
На асме около 70 строк кода обработчика прерывания.
На С примерно в два раза больше.
Программа на С работает на пределе.
Но не сбоит.
Даже не представляю как это будет работать на С++.
Да...вся программа умещается во внутренней памяти DSP.

И где тут пример? Привели какие-то общие фразы, дескать, тут быстрее, тут медленее, а С++ тут вообще в пролёте. Где аргументы? Где доказательства? Реальный пример давайте. Например, вот написали протокол обмена по UART на С++, оказалось в два раза медленнее, чем на С. Вот и давайте оба варианта (на С и на С++) в студию. Это будет пример, который можно обсуждать.

Цитата(zltigo @ Jun 26 2011, 01:53) *
Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием sad.gif.
Нам такие товарищи эмбеддерам совсем НЕ товарищи.


Цитата(zltigo @ Jun 26 2011, 15:26) *
Подход а-ля Александреску характерен для научных работ - давайте на бумаге/модели получим, хоть какой-то результат и потом подумаем, что дальше делать. У инженеров в сложных случаях тоже есть понятие НИОКР, но это именно заранее запланированный этап.

Насчёт Александреску вынужден не согласиться. У него показаны приёмы, как сделать написание кода более удобным и безопасным. Это, конечно, требует труда вникать (например, списки типов я так до конца и не вкурил - хоть и интересно, но актуальности пока нет и не предвидится, хотя имею в виду). Но у него помимо "тяжёлых" вещей вроде разработки на основе стратегий, немало просто полезных фишек вроде "распознавания конвертируемости и наследования на этапе компиляции". Конечно, подобные приёмы возникли от недостатка соответствующих средств в самом языке, но само решение очень красиво и, главное, в отличие от typeof(), выполняется на этапе компиляции. Или его менеджер памяти, который оптимизирован (скорость и компактность) для работы небольшими (десятки байт) объектами. Для AVR, конечно, не пойдёт, но на каком-нить АРМе уже вполне может оказаться кстати.

Вообще, Александреску представляет очень интересный взгляд на хорошо известные штатные языковые средства, и взгляд этот у него очень нестандартен. Даже если не подсаживаться на эти приёмы, поизучать (даже просто прочитать на разок) оказывается очень нелишним. Достойное чтиво и неплохая разминка для мозгов.
MrYuran
Цитата(dxp @ Jun 27 2011, 10:57) *
Даже если не подсаживаться на эти приёмы, поизучать (даже просто прочитать на разок) оказывается очень нелишним. Достойное чтиво и неплохая разминка для мозгов.

Согласен, хотя я пока ниасилил. Выглядит как книга магических заклинаний: завораживает, но ничего не понятно! Остаётся пользоваться готовыми рецептами, самому готовить ещё учиться и ещё два раза.
zltigo
QUOTE (dxp @ Jun 27 2011, 08:57) *
Насчёт Александреску вынужден не согласиться......

Я не об этом - он реально занимается решением ДРУГИХ задач и выхватывать из его книг какие-то слова, например, о вреде преждевременной оптимизации и поминать их всуе, как минимум, не корректно.
QUOTE (MrYuran @ Jun 27 2011, 08:43) *
Вот нашёл, цитата из книги:

Золотые слова - подпишусь под каждым. Только вот К ЖУТЧАЙШЕМУ моему сожалению толпы эмбеддерщиков об оптимизации на верхних уровнях думают с трудом sad.gif. Зато по рассуждать о том что на десяти командах они на АSM обгонят компилятор это всегда готовы sad.gif. А услышав слова о вреде преждевременной оптимизации поснимают галочки где-нибудь в IDE и скажут, что Александреску с Макконнелом так велят sad.gif.
Умение оптимизировать на верхних уровнях определяется в том числе и инструментальными средствами которые человек освоил. Одно дело, когда человек пошел от сохи железа и постиг программирование в кодах (на самом деле он считает, что пишет, на ASM, но реально это настолько минималистичное использование даже ASM, что это практически кодирование sad.gif). Другое, когда уже понимает и имеет успешный опыт, например, в C++. Это другие горизонты, другое понимание и другие возможности.
dxp
Цитата(MrYuran @ Jun 27 2011, 14:02) *
Согласен, хотя я пока ниасилил. Выглядит как книга магических заклинаний: завораживает, но ничего не понятно! Остаётся пользоваться готовыми рецептами, самому готовить ещё учиться и ещё два раза.

Мне тоже не всё понятно было (пока её только на разок прошёл), но кое-что уже в кассу. Например, подсмотрел приём, который он там реализует для стратегий:
Код
template<typename T> class A : public T { ... };

Т.е. шаблон, позволяющий генерировать реализацию с выбором базы для неё. Простая, в общем-то, штука, но как-то само в голову не пришло. Эту вещь реально поюзал.

Или реализация класса Conversion (п.2.7). Довольно простое и изящное решение на основе свойств оператора sizeof(). Пока применить не пришлось, но имею в виду. Очень нравится незамутнённый нестандартный взгляд на привычные, уже набившие оскомину вещи. Что ни говори, а Александреску молодец, и каждый при желании может там найти для себя что-то полезное и интересное.
ar__systems
Цитата(inventor @ Jun 23 2011, 07:21) *
код написанный на С++
исполняется дольше кода написанного на С или на asm
хоть ты усрись с оптимизацией


Блин ну ладно еще асм с с сравнивать, это еще как бы куда ни шло, хотя с оговоркой - кто писал си и кто писал асм. Но С++ с С противопоставлять - вы понимаете что что С++ принципиально не отличается от С?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.