Цитата(WHALE @ Sep 2 2011, 21:40)

Приведите, пожалуйста, цифры по расходу флэш и ОЗУ для обоих компиляторов.
Привожу:
1. Проект на CodeVisionAVR 2.03.9:
Memory model: Small
Optimize for: Size
Optimization Level: Maximal
(s)printf features: long, width, precision (без поддержки float)
Bit Variables Size: 64
вроде больше ничего не влияет.
Результат компиляции:
Program size:
56052 bytes
2. Проект на IAR 5.30:
Memory model: Small
Library: Normal DLIB
Printf formatter: Small (без поддержки float)
Language: Embedded C++
Optimizations: Size, Medium (Common subexpression elimination, Code motion, Clustering of variables), без Cross-call'ов.
Command line options: --string_literals_in_flash
остальное вроде тоже не влияет.
В файле frmwri_p.c сделал другой дефайн, чтобы уравнять условия сравнения: #define NO_FLOATS.
Результат компиляции:
56271 bytes of CODE memory (+8 range fill)
Далее меняю настройку оптимизации:
Optimizations: Size, High (Maximum optimization) (Common subexpression elimination, Function inlining, Code motion, Clustering of variables, Type-based alias analysis), без Cross-call'ов.
Результат компиляции:
53645 bytes of CODE memory (+8 range fill)
Еще раз меняю настройку оптимизации:
Optimizations: Size, High (Maximum optimization) (Common subexpression elimination, Function inlining, Code motion, Cross call, Clustering of variables, Type-based alias analysis), Number of cross-call passes: 2.
Результат компиляции:
43119 bytes of CODE memory (+8 range fill)
Теперь попробуем оптимизацию по скорости:
Optimizations: Speed, Medium (Common subexpression elimination, Code motion, Clustering of variables), без Cross-call'ов.
Результат компиляции:
56271 bytes of CODE memory (+8 range fill)
Теперь такая конфигурация:
Optimizations: Speed, High (Maximum optimization) (Common subexpression elimination, Function inlining, Code motion, Cross call, Clustering of variables, Type-based alias analysis), Number of cross-call passes: 2.
Результат компиляции:
55309 bytes of CODE memory (+8 range fill)
Вывод очевиден: результат IAR компактнее.
Расход ОЗУ сравнить невозможно, так как в CodeVision задается только DSTACK, а под CSTACK отдается весь остаток памяти. В IAR же DSTACK и CSTACK задаются явно. Куча не используется, поэтому можно считать, что расход ОЗУ одинаковый или примерно одинаковый.
Upd: Вообще, я же заменил переменные bit на bool, поэтому минимум на 64 байта ОЗУ расходуется больше в IAR (если я правильно полагаю, что на один bool расходуется один байт ОЗУ).
Быстродействие в этом проекте трудно оценить, поскольку параллельно выполняются несколько алгоритмических механизмов, нет задач, которые можно "измерить". Могу сказать только субъективно и визуально: для всех шести компиляций разницы не заметил. Данные принимаются, обрабатываются, сохраняются, передаются, часы идут, частоты измеряются. Всё как обычно.
Цитата(WHALE @ Sep 2 2011, 21:40)

Если есть критические места по скорости так-же было-бы интересно сравнение в тактах/микросекундах.
Обработка в прерываниях судя по ассемблерному листингу достаточно эффективна, есть некоторые лишние команды, но не более, чем в CodeVision. Измерять в тактах не хочется. Самые важные места у меня сделаны на ассемблере, там без замечаний.
Цитата(WHALE @ Sep 2 2011, 21:40)

Плюсами, как я понял в проекте на яре не пахнет и нехватка флэш - главная причина?
Главный плюс - возможность писать на С++, использовать классы и другие удобства языка. Второй плюс - код компактнее. Третий плюс - IDE поудобнее будет (только цвет фона пользовательский нельзя установить), чем в CV, хотя в CV есть свои полезные штучки.
Цитата(WHALE @ Sep 2 2011, 21:40)

ИМХО, в таком случае овчинка не стоит выделки и переход на 128 кристалл представляется более быстрым и дешевым вариантом.
Если учесть, что уже продано значительное количество устройств, то этот вариант отпадает: мы можем только обновить прошивку, никаких аппаратных изменений.
Да и надо развиваться, в конце концов, осваивать легендарный IAR.
Сообщение отредактировал Konstantin Ilichev - Sep 3 2011, 07:33