|
|
  |
Совместное использование *.сpp файлов и *.c, Не компилируются совместно файлы Си и Си++ |
|
|
|
Jun 25 2011, 17:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 25 2011, 12:47)  После этого я совсем перестал понимать смысл  вкладываемый Вами в словосочетания "преждевременная оптимизация". Ну да ладно, переживу. По-моему, вполне понятно о чем идет речь. Заявляется (голословно), что С++ язык медленный, а С и, уж конечно, ASM, намного быстрее. Посему, задача изначально проектируется не на С++. Ровно про это писал Александреску со-товарищи, а именно, сначала сделайте работоспособное решение, а потом, изучайте узкие места и их оптимизируете. Вроде я "мастерам" не противоречу, говоря о "преждевременной оптимизации"-
|
|
|
|
|
Jun 25 2011, 18:53
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 25 2011, 19:38)  Ровно про это писал Александреску со-товарищи, а именно, сначала сделайте работоспособное решение, а потом, изучайте узкие места и их оптимизируете. Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием  . Нам такие товарищи эмбеддерам совсем НЕ товарищи. Думать о построении системы и узких местах нужно СРАЗУ, а не потом рассматривая что такое выросло и как "оптимизировать" сие ЗАПЛАТКАМИ. Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 25 2011, 22:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 25 2011, 21:53)  Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием  . Нам такие товарищи эмбеддерам совсем НЕ товарищи. Думать о построении системы и узких местах нужно СРАЗУ, а не потом рассматривая что такое выросло и как "оптимизировать" сие ЗАПЛАТКАМИ. Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода. Ну ладно. Александреску нам не авторитет. Мне тоже не все его мысли и рецепты нравятся, хотя встречаются и очень изящные решения. Посмотрим с другой стороны. Имеем в начале работы процессор, компилятор и стандартную библиотеку. Начинаем работать? Начинаем. Прикидываем все, где чего и как по-лучше написать. Сделали. И вдруг (или не вдруг) натыкаемся на то, что стандартная memcpy полная г...о (на форуме мы это неоднократно обсуждали), а мы ее пользуем в хвост и в гриву. Затем выясняется, что и memset такая же. А потом понимаем, что вся куча написана через жо...у. Мы про это тоже СРАЗУ должны были знать на начальном этапе проектирования? Откуда? Нам фирма-изготовитель компилятора "любезно" рассказала? Вы всегда можете предсказать какой именно алгоритм сортировки окажется самым быстрым на вашем конкретном типе данных? Ой ли. С другой стороны, может и с этими хреновыми (не оптимальными) функциями все вполне бы катило и заказчика устраивало? Мы тогда жили бы себе в спокойном чувстве полного самоудовлетворения и над всей этой ерундой и не задумывались. Резюме (мое личное, может и неправильное) - невозможно все заранее предусмотреть (кое что можно), хотя бы из-за ограниченности собственных временнЫх возможностей и сил. Проект всегда итерационен (почти).
|
|
|
|
|
Jun 26 2011, 05:03
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(sergeeff @ Jun 26 2011, 01:44)  Проект всегда итерационен (почти). Не могу согласиться. Практически во всех проектах можно безболезненно заложить ресурсов в два раза больше, чем требуется при первоначальной оценке. При некотором отличном от нуля опыте этого вполне хватает, чтобы изменения ТЗ и особенности функционирования семейства контроллеров и/или библиотек уложились в резерв.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 26 2011, 06:35
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(sergeeff) Сделали. И вдруг (или не вдруг) натыкаемся на то, что стандартная memcpy полная г...о (на форуме мы это неоднократно обсуждали), а мы ее пользуем в хвост и в гриву. Затем выясняется, что и memset такая же. А потом понимаем, что вся куча написана через жо...у. Мы про это тоже СРАЗУ должны были знать на начальном этапе проектирования? Откуда? Нам фирма-изготовитель компилятора "любезно" рассказала? Именно так и есть, обычно все библиотеки САМ перекопилируешь-выкидывая оттуда все ненужное и исправляя ихние ошибки. Что в этом неправильного?
|
|
|
|
|
Jun 26 2011, 08:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 26 2011, 00:44)  Имеем в начале работы процессор, компилятор и стандартную библиотеку. Забыли главное - голову на плечах и опыт отличный от нуля. Без этих двух вещей получаем воинствуещего ламера inventor  . QUOTE Проект всегда итерационен (почти). Подход а-ля Александреску характерен для научных работ - давайте на бумаге/модели получим, хоть какой-то результат и потом подумаем, что дальше делать. У инженеров в сложных случаях тоже есть понятие НИОКР, но это именно заранее запланированный этап. QUOTE (inventor @ Jun 26 2011, 08:35)  Именно так и есть, обычно все библиотеки САМ перекопилируешь-выкидывая оттуда все ненужное и исправляя ихние ошибки.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 26 2011, 09:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

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

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 26 2011, 12:37)  Однако, при переходе на новый процессор+компилятор всегда есть определенная доля неизведанности, понимание которой приходит не СРАЗУ, а по мере работы над проектом. На новый процессор - для этого существуют отладочные платы - купил, попробовал, в том числе и принципиально узки места по железу/софту, осознал... С компиляторами все еще проще - они достаточно все одинаково хороши и обычно кроссплатформенны, посему, как правило, компилятор уже достаточно знаком. Исключения встречаются, но они скорее всего уже именно исключения, если необходимо вдруг наконец-то заставить работать что-то старое неведомо кем сделанное. И тогда имеем какой-нибудь достаточно ущербный контроллер и такой-же замерший в прошлом компилятор. Я в прошлом году дважды с таким сталкивался - PIC16 + Hi-Tech C компилятор и M8C + ImageCraft. Это дополнительно создает некоторые хлопоты. Но это был такой прыжок в прошлое. Нехарактерный. QUOTE Потом, мне кажется, спор возник из-за наличия двух принципиально различных типов проектов. Категорически нет. Проблема просто у уровне знаний - ниже плинтуса, или выше.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 26 2011, 10:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 26 2011, 13:18)  Категорически нет. Проблема просто у уровне знаний - ниже плинтуса, или выше. Согласитесь,что проект <4Kb и проект >1Mb несколько отличаются. И технологии при их реализации тоже. А вообще, солнышко светит, лето, воскресенье. Надо пользоваться случаем и отдыхать, чего всем и желаю.
|
|
|
|
|
Jun 27 2011, 06:43
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(zltigo @ Jun 25 2011, 22:53)  Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода. Да, но не надо переживать о нескольких лишних байтах/циклах там, где это совершенно некритично. Некоторые в ужасе хватаются за голову, видя в контроллерном проекте float. Ну а что такого? Если скорость всех расчётов на порядки выше, чем скорость поступления сэмплов с АЦП. Вот это видимо и имелось в виду. Не надо пытаться заоптимизировать всё до смерти без насущной необходимости. Иметь представление об узких местах и проектировать с их учётом - надо. А про оптимизацию, по-моему, Макконнел рассуждал в "совершенном коде". У него было там что-то типа "мысли об оптимизации могут совершенно заблокировать разработку проекта. " Вот нашёл, цитата из книги: Цитата Как правило, не стоит тратить много усилий на оптимизацию отдельных мето- методов. Эффективность в основном определяется конструкцией высокого уровня. Обычно микрооптимизация выполняется, только когда закончена вся программа и выясняется, что высокоуровневая конструкция исчерпала свои возможности обеспечить нужную производительность. Не теряйте время на вылизывание от- отдельных методов, пока не выяснится, что это необходимо.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 27 2011, 06:57
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(inventor @ Jun 24 2011, 22:50)  Не было времени сегодня искать пример, щас попробую его описать. Процессор работает на чатоте 14 Мгц обменивается с другим процом на частоте 1Мгц. На асме около 70 строк кода обработчика прерывания. На С примерно в два раза больше. Программа на С работает на пределе. Но не сбоит. Даже не представляю как это будет работать на С++. Да...вся программа умещается во внутренней памяти DSP. И где тут пример? Привели какие-то общие фразы, дескать, тут быстрее, тут медленее, а С++ тут вообще в пролёте. Где аргументы? Где доказательства? Реальный пример давайте. Например, вот написали протокол обмена по UART на С++, оказалось в два раза медленнее, чем на С. Вот и давайте оба варианта (на С и на С++) в студию. Это будет пример, который можно обсуждать. Цитата(zltigo @ Jun 26 2011, 01:53)  Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием  . Нам такие товарищи эмбеддерам совсем НЕ товарищи. Цитата(zltigo @ Jun 26 2011, 15:26)  Подход а-ля Александреску характерен для научных работ - давайте на бумаге/модели получим, хоть какой-то результат и потом подумаем, что дальше делать. У инженеров в сложных случаях тоже есть понятие НИОКР, но это именно заранее запланированный этап. Насчёт Александреску вынужден не согласиться. У него показаны приёмы, как сделать написание кода более удобным и безопасным. Это, конечно, требует труда вникать (например, списки типов я так до конца и не вкурил - хоть и интересно, но актуальности пока нет и не предвидится, хотя имею в виду). Но у него помимо "тяжёлых" вещей вроде разработки на основе стратегий, немало просто полезных фишек вроде "распознавания конвертируемости и наследования на этапе компиляции". Конечно, подобные приёмы возникли от недостатка соответствующих средств в самом языке, но само решение очень красиво и, главное, в отличие от typeof(), выполняется на этапе компиляции. Или его менеджер памяти, который оптимизирован (скорость и компактность) для работы небольшими (десятки байт) объектами. Для AVR, конечно, не пойдёт, но на каком-нить АРМе уже вполне может оказаться кстати. Вообще, Александреску представляет очень интересный взгляд на хорошо известные штатные языковые средства, и взгляд этот у него очень нестандартен. Даже если не подсаживаться на эти приёмы, поизучать (даже просто прочитать на разок) оказывается очень нелишним. Достойное чтиво и неплохая разминка для мозгов.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jun 27 2011, 08:20
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (dxp @ Jun 27 2011, 08:57)  Насчёт Александреску вынужден не согласиться...... Я не об этом - он реально занимается решением ДРУГИХ задач и выхватывать из его книг какие-то слова, например, о вреде преждевременной оптимизации и поминать их всуе, как минимум, не корректно. QUOTE (MrYuran @ Jun 27 2011, 08:43)  Вот нашёл, цитата из книги: Золотые слова - подпишусь под каждым. Только вот К ЖУТЧАЙШЕМУ моему сожалению толпы эмбеддерщиков об оптимизации на верхних уровнях думают с трудом  . Зато по рассуждать о том что на десяти командах они на АSM обгонят компилятор это всегда готовы  . А услышав слова о вреде преждевременной оптимизации поснимают галочки где-нибудь в IDE и скажут, что Александреску с Макконнелом так велят  . Умение оптимизировать на верхних уровнях определяется в том числе и инструментальными средствами которые человек освоил. Одно дело, когда человек пошел от сохи железа и постиг программирование в кодах (на самом деле он считает, что пишет, на ASM, но реально это настолько минималистичное использование даже ASM, что это практически кодирование  ). Другое, когда уже понимает и имеет успешный опыт, например, в C++. Это другие горизонты, другое понимание и другие возможности.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 27 2011, 10:44
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(MrYuran @ Jun 27 2011, 14:02)  Согласен, хотя я пока ниасилил. Выглядит как книга магических заклинаний: завораживает, но ничего не понятно! Остаётся пользоваться готовыми рецептами, самому готовить ещё учиться и ещё два раза. Мне тоже не всё понятно было (пока её только на разок прошёл), но кое-что уже в кассу. Например, подсмотрел приём, который он там реализует для стратегий: Код template<typename T> class A : public T { ... }; Т.е. шаблон, позволяющий генерировать реализацию с выбором базы для неё. Простая, в общем-то, штука, но как-то само в голову не пришло. Эту вещь реально поюзал. Или реализация класса Conversion (п.2.7). Довольно простое и изящное решение на основе свойств оператора sizeof(). Пока применить не пришлось, но имею в виду. Очень нравится незамутнённый нестандартный взгляд на привычные, уже набившие оскомину вещи. Что ни говори, а Александреску молодец, и каждый при желании может там найти для себя что-то полезное и интересное.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|