Hi Anatoly !
Совсем недавно 17 May 04 20:15, Anatoly Mashanov писал к Ruslan Mohniuc:
RM>> Вот столкнулся с неудобством: при компиляции программы, RM>> содержащей данные для области EEPROM DATA (процессоры типа PIC18, RM>> компилятор picc18), из файла некорректно загружается в RM>> программатор содержимое этой области: грузится каждый второй RM>> байт, то есть по адресам 0,1,2,3 получаем то, что в файле было по RM>> адресам 0,2,4,6. Приходится загружать
AM> DB 1 AM> DB 2 AM> DB 3 AM> DB 4 AM> заменить на DB 1,2,3,4
AM> Ассемблер дополняет память нулем до четного адреса по окончании AM> каждого DB. Отсюда и проблемы.
Я пользуюсь компилятором picc18 от hi-tech. Он сам делает именно так, как ты сказал:
=== Cut === 5007 psect eeprom_data 5008 0000 00 00 00 00 01 00 db 0,0,0,0,1,0,0,0 ;# + 00 00 5009 0008 60 00 00 00 02 01 db 96,0,0,0,2,1,0,0 ;# + 00 00 5010 0010 40 08 45 20 20 20 db 64,8,69,32,32,32,32,32 ;# + 20 20 === Cut ===
Вроде бы никакого выравнивания кода не происходит. У меня нет претензий к компилятору. Hасколько я понял, это касается загрузки сегментов в программатор IC-PROG, причем при использовании процессоров семейства PIC16 такой проблемы не наблюдалось.
Hу и MPLAB нормально показывает область EEPROM этого же скомпилированного файла, так что не думаю, что в исходнике/компиляторе дело.
PS. А вот не далее, как вчера впервые нарвался на то, что Ц++Билдер по умолчанию производит выравнивание не только в коде, но и в данных, в результате по полям структур, вложенных в объединение, получается разброд и шатание. Маньяки оптимизации, блин. Спасибо, что фича выключаемая.
WBRgrds Ruslan