singlskv 0 15 марта, 2008 Опубликовано 15 марта, 2008 · Жалоба А вот это не то что Вам надо?Да, так у меня тоже все получилось, спасибо, теперь ясно как делать кошерно... только ИМХО нужно чуть поменять в MEMORY: MEMORY { text (rx) : ORIGIN = 0, LENGTH = 0x17F4 data (rw!x) : ORIGIN = 0x800071, LENGTH = 1024-17 eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 512 } для того чтобы при перерасходе секции data линкер нам об этом сообщал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба А вот родилась мысль - может они хотели сделать быстрое копирование, копируя по два байта за каждый проход цикла? Или может так оно и было когда-то, но потом отказались, а это выравнивание - рудимент?Хм... Как раз на днях макет один начал делать, для серии - зашивает тестовую програму в изделие, дёргает за разные ноги, то-сё, потом зашивает рабочую программу. Это всё без компа работать будет (точнее, прошивки от него получать, на тему серийных номеров общаться оно будет, но там свой контроллер в стенде и он будет шить). Ну так вот забыл уже, что avreal-то давно уже при неполном слове в .hex для флеша от себя добавляет недостающий байт 0xFF. А для стенда писал из головы, там не надо сильно много всего, проще было заново. Нарвался на то, что в доп. секции во флеше с серийным номером и калибровочными константами, имеющей нечётное число байт - последний байт не записывается во флеш. Тут-то и вспомнил, что в avreal-е сделано дописывание от себя до полного слова. Ну, для данной задачи было проще в линкерном скрипте для секции .cfg добавить .=ALIGN(2); чем усложнять программу макета ;) А секция .data летит в .hex и при её нечётной длине в хексе какой-то программатор может и обломиться (у AVR по программирования флеша сделано с временным байтовым регистром и если не записать старший байт, то всё слово в буфер страницы не пойдёт, если не писать младший, только старший - то в данном слове продублируется младший из предыдущего слова). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба Массив определяю в программе в отдельную секцию: uint8_t Buffer[5] __attribute__((section("buffer"),used)); Хоть проблема уже вроде бы решена :) Читал мануал, наткнулся на такое: Use the section attribute with an initialized definition of a global variable, as shown in the example. GCC issues a warning and otherwise ignores the section attribute in uninitialized variable declarations. Это интересно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 132 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба Это интересно?Да, это действительно интересно. Только не стыкуется пока с наблюдаемым поведением avr-gcc. билет на трамвае к А стоит дешевле чем на автобусе к В.... обдумать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться