Давайте всётаки не будем мешать всё в одну кучу. Компиляторы, отладчики, визарды и т.п. Визарды существуют и отдельные. Именно начинающим, я не советую их использовать. Так как визард позволяет настраивать переферию. Настройка её по фирменному даташиту позволяет более глубоко понять работу того или иного узла. Порой даже переинициализировать по другому. Это также позволит легче перейти на другой проц, так как у вас будет написано осмысленная прога, а не сгенерированые пустые константы. Кроме того визард не имеет никакого отношения к компилятору. Соответственно никак не может являться его преимуществом.
Надеюсь вы не будете удивлены, что IAR тоже позволяет генерировать cof файл и ещё огромное количество других, что позволяет отлаживать прогу в AVR Studio, а также другими отладочными программами. Преимущество компилятора в общем-то не в этом.
Никто не собирается обхаивать CV. Просто надо спокойно оценивать его возможности и недостатки. Без истерики. Объективно. Главное - что это компилятор Си, а это, само по себе предоставляет значительные возможности. 90% программы на Си переносимо без изменений. Ещё 9% переносится легко, при правильном написании программы. Оставшийся 1% это особенности компилятора. Как правило это объявление прерываний и использование библиотек. Причём, то что вы считаете преимуществом, как правило таковым не является.
Например: Обратимся к биту порта.
PORTB.7 = 0; // Погасить светодиод CV
Удобно! Теперь напишем приличную программу таким способом. А после этого попытаемся её перенести на IAR или GCC. И... облом. Хотя существует масса способов написать это же также лаконично и красиво, но в рамках стандарта языка Си.
Например:
#define LEDPWR 7 ; объявляем назначение используемого бита
#define LEDPWR_ON PORTB |= (1‹‹LEDPWR)
#define LEDPWR_OFF PORTB &= ~(1‹‹LEDPWR)
...
LEDPWR_OFF; // Погасить светодиод
Можно и аналогично варианту CV сделать. Например
struct
{
uint8_t
b0:1,
b1:1,
...
b7:1; // Здесь можно любое имя, в том числе и LEDPWR:1
} PORTB;
...
PORTB.b7 = 1;
Зато стандартная конструкция пройдёт во всех компиляторах, а уникальная CV - только в нём. Это значительно осложнит впоследствии перенос программ.
Сравним сгенерированный визардом текст типа:
TCCR2 = 0x43;
И написанный вручную
TCCR2 = (1‹‹WGM20)|(3‹‹CS20);
Вродебы - дело вкуса. Но переносимость с кристалла на кристалл - значительно повышается. Я, к примеру, достаточно широко использую МК ATMEGA8/88. Причём, как правило отлаживаю на м88 (так как есть DBW), а в серийное изделие отправляется м8 (дешевле). Так вот - проект у меня - один. И объявления все общие. Причём практически никакого оверхеда. Также например при выходе новой версии платы. Взяли поменяли пины при разводке. Я проект не меняю. Ввожу новую версию HARDWARE и меняю файл local.h. Или в файле main.h веточку соответствующую.
Таким образом меняя имя платы у меня компилируется новый проект.
Подытоживая - надо писать максимально в рамках стандарта языка Си. И нарекания на CV в отступлениях от этих стандартов. А также в "подсаживании" начинающих, на эти "особенности". Что при незнании возможностей языка даёт ощущение простоты. А её на самом деле нет и в помине. Это же относится и к применению закрытых непереносимых библиотек. Я вот недавно проект переносил с
ATMega640 на
LPC2106. Так большинство моих библиотек практически не требовалось менять. Например работа с памятью 24cXXX,
DS1307, LCD. Другие переписывались так, что остальная прога не менялась. То есть сохранялись заголовки. А любителей "халявы" от CV ждёт разочарование.
Ещё раз повторяю, я не против применения CV. Просто применяйте его осознавая преимущества и недостатки. Старайтесь минимизировать ущерб.