Vlad писал(а):
При том, что все известные мне компиляторы для обоих случаев сгенерят абсолютно идентичный код.
А сколько вам известно компиляторов?... Применительно к миру встроенных систем и систем РВ...
Вот, например некоторые "нюансы" работы с памятью программ в Мегах
http://www.nongnu.org/avr-libc/user-man ... space.htmlХотел ещё описание подобных же "трюкачеств" и для Analog Device-ов найти - запропостились куда-то доки и ссылки, но искать - в лом - но, поверьте, там "плясок с бубнами" не меньше и они не менее забористы...
И, заметьте, ни о каком "общем стандарте" от производителей даже по "самому распространённому" языку речи нет! Каждый произодитель - в свою дуду дудит...
Конечно, при достаточной усидчивости можно всё вычитать. Со временем... Для
всего набора процов, используемых в проектах... Хорошая перспектива? Тока не надо говорить о том, что профессионал постоянно должен учиться! Это я и без советчиков знаю. Потому и полез сразу, по приходу в контору и переходе на Меги в разделы док, посвящённые поддержке вариантом языка "неординарностей" архитектуры. Оказалось - не зря! Люди, по нескольку лет уже программировавшие этот кристалл, просто не добрались (по причине цейтнота или незнания английского) до нужных разделов и в их программах был расход памяти.
С другой стороны, применяй я обероны - отпала бы проблема "учёта нюансов" - компилятор и так бы строки-константы помещал в сегмент кода, идущего при "прожиге" в паямть программ... А код инициализации так-и-так приходится ручками писать для гарварда - что на оберонах, что на аде, что на си...
ЗЫ ещё, например, учтите, что, как правило, ячейки памяти данных и памяти программ имеют разную разрядность... И не всегда размер одних является делителем резмера других. Например в AD218x & AD219x разрядность данных 16 бит, а кода - 24 бита. И там - свои "особенности" свистоплясок с учётом и вовлечением "лишних" старших 8 бит при хранении данных в памяти программ... И, - соответственно - "расширение" си конструкциями и макросами для поддержки всего этого хозяйства... Что бы было понятно, с чем приходится сталкиваться - представьте себе все варианты хранения указателей на данные и код в памяти программ и памяти данных... Или вот ещё. в gcc есть средство запоминания адреса метки через специальный вариант получения адреса: && . Мне например, моя логика ничего не подсказала, как проинициализировать на меге массив адресами меток (ну нужно было! :о) ). Заработавшую кострукцию (со всеми макросами и волшебными словами), я нашел тупым перебором возможных сочетаний макросов и введённых служебных слов для объявлений, пока у меня светодиоды на "дебаггерном" порту не зажглись в нужной, ожидаемой последовательности... :о) И получившийся набор тарабарщины был ой как далёк от того, что предлагали все коллеги-сишники на форумах и в конторе для разрешения проблемы...