|
|
  |
avr-gcc и IAR, сравнение, но не холивар |
|
|
|
Mar 1 2011, 08:32
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(MrYuran @ Mar 1 2011, 12:27)  Зато, по соотношению цена/качество GCC на недосягаемой высоте  Ну, а если надо в считанные килобайты упихивать, то может, лучше вообще от си отказаться. Есть, например, очень компактные форт-машины. Ну, это уже холивар, от которого я бы хотел отойти. Мне важно не поспорить, а важно найти истину -- важно знать, что и сколько я (лично я) теряю при использовании gcc. А то, что gcc распространяется бесплатно, так это итак все знают. Но сколько при этом теряется "компактности" -- одни слухи и какие-то бездоказательные утверждения. Я, так сказать, пожертвовал своим временем и своей репутацией (вывесил сушиться свои трусы на площади). Я думаю, что народ понял мой поступок, поэтому давайте по существу. Иначе мы так и будем продолжать жить эмоциями, а не фактами. Уйти разработчику на ассемблер или на форт -- да, наверно это можно. Но хотелось бы не менять условий, хотелось сравнить два компилятора в примерно одинаковых условиях. Если Вас, MrYuran, это хоть как-то успокоит, то знайте, что я сожалею о "проигрыше" gcc, но тем не менее, остаюсь с ним. Как я уже где-то выше говорил, я не использую Венду вообще. Поэтому у меня нет выбора. И даже если бы сидал под Вендой, то использовать пиратский IAR мне претит мое воспитание. И тут дело даже не в неотвратимости наказания за пиратство. Тут более высокие понятия. Дети будут ржать, но все же скажу -- дело в морали. Дело в ответе на тот самый главный вопрос -- а для чего мы вообще живем. Каждым человеком движет получение удовольствия. Мы все получаем удовольствие. Только один получает удовольствие от того, что имеет много денег, а другой -- от того, что много знает и много чего умеет делать. Мне нравиться второе. Плюс, я еще это положение "дожимаю" понятиям типа "жить, оставаясь в рамках морали". (Не в рамках закона, а по совести -- почувствуйте разницу!) Мне это интересно, и я от этого получаю удовольствие. А деньги -- что! Деньги -- фигня! Сколько бы их ни было, их всегда не хватает. Определитесь со своим главным вопросом, и все придет в норму. Я никого не осуждаю. Просто каждый сам отвечает на это вопрос по-своему, а как правильно -- никто не знает. Блин. На хрена я это все написал? Ладно. Пусть будет. Может сгодится кому еще.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Mar 1 2011, 09:53
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Если я правильно помню принцип работы strcpy_P, то надо делать проще: strcpy_P(buf0, str0); Не нужно читать первые два байта строки и пытаться трактовать их как адрес. Можно более красиво (если строки уникальные и не С++): strcpy_P(buf0, PSTR(" Spectron"));
А если речь уже зашла об "оптимизируем исходник, оставляя неизменной функциональность", то как минимум в дисплее можно наэкономить отказавшись от чтения готовности, от операции %20, объединив -wrc и LCD_char(). В общем "из любой программы можно выжать еще хотя бы один байтик".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 1 2011, 13:02
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(_Pasha @ Mar 1 2011, 09:54)  Это да, убийственные ключики  Только напрягает, что надо все за один пасс делать... Меня не напрягает вовсе. У меня вообще все проекты для младших AVR (до Mega162 включительно) только благодаря этому и влезают в кристалл. Да ещё и бутлоадер.... 2ТС:Давайте потестируем на каком-нибудь опенсорсном проекте для AVR размером от 40КБ...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 1 2011, 14:39
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(Nixon @ Mar 1 2011, 13:58)  Возможно вы просто взяли не совсем удачный проект для сравнения, слишком маленький, на котором оверхед GCC выражается в разы. Вот и получилось как в рекламных пресс-релизах. Возьмите проект посерьезнее или даже несколько, разных размеров. Это будет и позновательнее и объективнее. Да. Спасибо. Я взял то, что смог окучить. Точнее -- почти окучил (т.е. имеются траблы, читайте ниже ответ Сергею). Ведь помимо этой работы -- переноса проекта в другую среду, сравнения и разборки чего-там можно отпилить еще, есть и основная работа. У Вас есть время? Вот и у меня так же. А на счет объективности... ну-у, небольшие проекты тоже имеют право на жизнь. А будет большой проект, и будет достаточно времени, обязательно попробую. Только ведь это...  наши желания редко согласуются с программой Всевышнего. Цитата(Сергей Борщ @ Mar 1 2011, 14:53)  Если я правильно помню принцип работы strcpy_P, то надо делать проще: strcpy_P(buf0, str0); Не нужно читать первые два байта строки и пытаться трактовать их как адрес. Можно более красиво (если строки уникальные и не С++): strcpy_P(buf0, PSTR(" Spectron"));
А если речь уже зашла об "оптимизируем исходник, оставляя неизменной функциональность", то как минимум в дисплее можно наэкономить отказавшись от чтения готовности, от операции %20, объединив -wrc и LCD_char(). В общем "из любой программы можно выжать еще хотя бы один байтик". А-а, блин!!! Спасибо, Сергей! Конечно же нужно так: Код strcpy_P(buf, str4); Все спешим, спешим...Это ж ведь уже готовые строки. Вот так и живем, не приходя в сознание! На удивление, размер кода еще ужался, значит компилятор что-то там преобразовывал. Кому интересно, сейчас text = 3408 байт. (Результаты последних компиляций я не проверял. Железка на полигоне. Мониторит процессы. Отключать, снимать не желательно. Второго экземпляра нет.)
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Mar 1 2011, 14:47
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Взял проект из первого сообщения. Скомпилил со своим makefile, WinAVR 20100110, 3910 байт program, 157 data. Переработал lcd.c (убрал чтение готовности, объединил вывод команд и символов, переписал SetXY, 4 строки): 3750 байт hal.c: Добавил inline - 3738 app.c: Объявил uvchannel массивом, свернул в цикл обработку в procpack: - 3620 app.c: сделал обнуление uvchannel через memset : 3566 app.c: static inline procpack: 3554 app.c: static inline update_lcd: 3544 makefile: -lprintf_min: 3172 lcd.c: сделал 2 строки в SetXY: 3156 app.c: заменил sprintf на strcpy_P, sprintf_P - 3134 / 47 data app.c: вынес из switch buf1[0] = '\0' - 3124 увеличил --param inline-call-cost до 2 - 3120. Результат в приложении. ой, ошибочку внес. После переделки на sprintf_P уже нельзя делать buf1[0] = '\0'; сейчас исправлю. Нет, можно. Все нормально.
zhevak_test_gcc.zip ( 10.25 килобайт )
Кол-во скачиваний: 88Если однократно вызываемые функции повыностить из .c в .h и сделать их static inline - можно выиграть еще.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 1 2011, 17:38
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Я не понял. Что, пьянка -- продолжается что ли? (Эт-зря я уснул в слате. Рановато получилось.) Цитата(Сергей Борщ @ Mar 1 2011, 19:47)  Взял проект из первого сообщения... Сергей, отличная работа! А Вы можете теперь проделать примерно тоже самое в IAR-e? ... и за одно учесть мнение MrYuran на счет inline.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Mar 1 2011, 22:46
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(zltigo @ Mar 2 2011, 01:38)  Вы, наверное, не поверите, но IAR можно купить. Не всегда стоит экономить на инструментах. Заодно не придется юродски коверкать названия продуктов. Вы, наверное, не поверите, но gcc распространяется бесплатно. Не всегда стоит покупать то, чему есть достойные альтернативы, удовлетворяющие вашим потребностям. Все это вопросы философии. Не имеет смысла спорить. Цитата Заодно не придется юродски коверкать названия продуктов. Э-э... извините, вот тут я вообще ничего не понял. Это Вы про что?
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|