|
|
  |
Вопрос по WINAVR |
|
|
|
May 19 2005, 15:14
|
Участник

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617

|
Цитата(Karl @ May 19 2005, 14:04) Попробовал elf - файл. В дизасемблере AVRStudio увидел следующее  : @00000F80: boot_write_page ---- F:\Work\Tegran\V1\boot.c ----------------------------------------------------------- 9: { +00000F80: FFFF ??? Data or unknown opcode No Source ----------------------------------------------------------------------------------- +00000F81: FFFF ??? Data or unknown opcode +00000F82: FFFF ??? Data or unknown opcode +00000F83: FFFF ??? Data or unknown opcode +00000F84: FFFF ??? Data or unknown opcode +00000F85: FFFF ??? Data or unknown opcode А ты генеришь файл в ELF/DRAFT-2 формате? AVR-studio поддерживает только его. Проверь makefile: DEBUG = dwarf-2 CPFLAGS = ..... -g$(DEBUG) ... Если ты брал Makefile из примеров, то этого достаточно. Если писал сам, то замени CPFLAGS на значение, которое ты используешь для передачи параметров при вызове avr-gcc.
|
|
|
|
|
May 19 2005, 15:16
|
Участник

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617

|
Цитата(Karl @ May 19 2005, 14:04) Попробовал elf - файл. В дизасемблере AVRStudio увидел следующее  : ..... Кстати, а какую версии WinAVR и AVR Studio ты используешь?
|
|
|
|
|
May 20 2005, 03:44
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Я использую WinAVR-20050214, AVRStudio4.11 b406SP2. make файл генерил программой MFile. DEBUG = dwarf-2. Так и есть.
Прикрепленные файлы
test.rar ( 14.43 килобайт )
Кол-во скачиваний: 58
|
|
|
|
|
May 20 2005, 15:57
|
Участник

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617

|
Цитата(Karl @ May 20 2005, 07:44) Я использую WinAVR-20050214, AVRStudio4.11 b406SP2. make файл генерил программой MFile. DEBUG = dwarf-2. Так и есть. Погоди. Ты в майкфайле пишешь: LDFLAGS += --section-start=.bootloader=0x1f00 А функция boot_write_page у тебя как раз в бутлоадере: ... BOOTLOADER_SECTION void boot_write_page(unsigned long fptr, unsigned short *sptr) ... Значит, ее начальный адрес должен быть старше 0x1F00, а в твоем дампе адреса с 0x0F80 начинаются...... ?????
|
|
|
|
|
May 20 2005, 16:15
|
Участник

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617

|
Так и есть. Проверил на своем проекте. Если генерить elf и открывать в AVR-студио, то адрес процедуры бутлоадера определяется некорректно. С coff файлом все нормально.
|
|
|
|
|
May 23 2005, 03:40
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(BorisRozentsvaig @ May 20 2005, 21:15) Так и есть. Проверил на своем проекте. Если генерить elf и открывать в AVR-студио, то адрес процедуры бутлоадера определяется некорректно. С coff файлом все нормально. AVR- студио показывает адреса в словах, а в make - файле адрес указывается в байтах. Я так понял. 0x1f00/2=0хf80. А мой проектик запускал? Так же вместо кода одни 0xFF?
|
|
|
|
|
May 23 2005, 06:54
|
Участник

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617

|
Цитата(Karl @ May 23 2005, 07:40) AVR- студио показывает адреса в словах, а в make - файле адрес указывается в байтах. Я так понял. 0x1f00/2=0хf80. А мой проектик запускал? Так же вместо кода одни 0xFF? С твоим проектом тоже самое. Действительно, AVR-студио в окне dubug показывает адреса в словах, а в зависимости от типа файла (elf или coff), создаваемых WinAvr, адреса в окне watch показываются в словах или в байтах. Если не лениво, попробуй откомпилировать приложенный демо-проект с avrfreaks.net - может там нормально будет бутлоадер отлаживаться?
|
|
|
|
|
Aug 11 2005, 16:23
|
Группа: Новичок
Сообщений: 4
Регистрация: 17-07-05
Пользователь №: 6 854

|
Подскажите где можно найти компилятор avr-gcc 4.х для windows. И как можно прикрутить новую библиотеку avr-libc-1.2.5 к WinAVR-20050214. Только посылать на http://winavr.sourceforge.net/ нет необходимости.
|
|
|
|
|
Jun 21 2007, 14:08
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Вот решил переползти с CVAVR на WINAVR (проект текущий глючит ужасно в CVAVR - чем не повод :-) ) Поднял эту тему, дабы не плодить новую. WinAVR 20060421 И поток вопросов :-) Для пробы набросал кучку всякой фигни в функцию ... Код #include <avr/io.h> #include <avr/interrupt.h> #include <avr/eeprom.h> #include <inttypes.h> #include <util/delay.h>
#include "rzlds.h"
static Tpoint EEMEM points[MAX_POINT+1];
ISR (INT0_vect) { eeprom_write_byte(&points[0].h,01); }
int main(void) { unsigned char buf;
DDRD = 0x02; while(1){ buf++; _delay_ms(1000); PORTD ^= 0x02; }; //while } [/code] 1. Задержки. ставлю _delay_ms() при оптимизации "0" - код вырастает почти на 500 байт - многовато ... при опт. "s" - вырастает немного ... но задежки нет в любом варианте  Видать оптимизатор отработал на славу. Как задержки организовывать? (не говрите про таймеры и загрузку проца ... я в курсе - я с компилятором разобраться хочу) 2. Сборка проекта В makefile ("cтандартный") с дистрибутива добавляю еще один файлик Код # List C source files here. (C dependencies are automatically generated.) SRC = rzlds.c crc8.c В основной программе его функции нигде не использую ... а в hex код добавляется  Оптимизация "s" 3. ELF -> СOFF Просто лог ... Код Converting to AVR Extended COFF: rzlds.cof avr-objcopy --debugging --change-section-address .data-0x800000 --change-section -address .bss-0x800000 --change-section-address .noinit-0x800000 --change-sectio n-address .eeprom-0x810000 -O coff-ext-avr rzlds.elf rzlds.cof Warning: file C:/DOCUME~1/EWEDDI~1/LOCALS~1/Temp/ccsreaaa.s not found in symbol table, ignoring Warning: ignoring function __vectors() outside any compilation unit Warning: ignoring function __bad_interrupt() outside any compilation unit Не могу избавится от трех варнингов ... от первого я вообще в шоке - что он хочет (%TEMP% в пер. среды прописан короткий d:\temp) А второй итретий - о чем это? И как это убрать? Просьба :-) не гоните меня форум читать ... два дня все темы с упоминанием WinAVR читаю ... о _delay_ms() нашел упоминание, но без ответа  ... да и вообще ... хоть сколько-нить работающий кусок кода -- эт из форумских бесед :-)
|
|
|
|
|
Jun 21 2007, 15:43
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
1. Задержки. В более свежих версиях, кажется, уже добавили ругню через #warning про то, что при выключенной оптимизации будет совсем не то. Перед включением delay.h должна быть определена константа F_CPU (тактовая в герцах), иначе - опять предупреждение и определение её на 1000000. В документации на libc (какая там стандартная FIDO-шная такса на чтение доеументации вслух?) и в самом delay.h (поскольку дока doxygen-ом собирается) написано, что максимально допустимая задержка для _delay_ms равна приблизительно 262мс/тактовая_в_мегагерцах, все более длинные задержки будут отрабатываться как эта максимальная.
2. Сборка проекта Пока могу только порекомендовать не включать в проект то, что не нужно. Кажется, --relax ещё окончательно не отлажен.
3. ELF -> СOFF Не пользуюсь симуляцией. Кажется, новые авр-студии уже берут elf от новых avr-gcc
p.s. "Просьба :-) не гоните меня форум читать ... два дня все темы с упоминанием WinAVR читаю ... о _delay_ms() нашел упоминание"
Документацию надо читать. Документацию.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 21 2007, 19:12
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(ReAl @ Jun 21 2007, 19:43)  2. Сборка проекта Пока могу только порекомендовать не включать в проект то, что не нужно. Кажется, --relax ещё окончательно не отлажен. --relax - не отвечает за удаление неиспользуемых функций, он отвечает за замену CALL/JMP на RCALL/RJMP. Анатолий.
|
|
|
|
|
Jun 22 2007, 06:08
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(aesok @ Jun 21 2007, 22:12)  --relax - не отвечает за удаление неиспользуемых функций, он отвечает за замену CALL/JMP на RCALL/RJMP. Точно, это я как всегда спутал с прямым углом. За удаление функций отвечает --gc-sections при условии, что функции распиханы по отдельным секциям при помощи -ffunction-sections Всё равно оно ещё, кажется, недоделано. -ffunction-sections в компиляторе работает, а --gc-sections в линкере - нет.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 22 2007, 08:35
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Подведем промежуточные итоги: 1. известные на этапе компиляции задержки делаем через _delay_loop[_2]() функции (можно удобный define сделать, дабы с тактовой сразу высчитывать) Если задержки нужно вычислять в программе - таймер Вам в рки :-) 2. Нефиг, пока, лишние функции в свои файлы совать. Отсюда вопрос ... а как тогда используются "прилагаемые" хидеры ... там ведь куча функций описана, а линкуются только нужные? (тупой вопрос - надо идти читать документы ... видать с библиотек линкер нормально тянет только нужное) 3. ELF понимает и Студия и Протеус ... вот только в Протеусе (Студию не пробовал) половина строк кода стоит "не выполняемая" ... и на нулевой оптимизации тоже ... получается один шаг и половина программы выполнена  Вопрос открытый остается. Еще вопросик. "Переменная" F_CPU определяется в makefile ... и она же нужна мне в моем исходнике. Если я определяю ее сам, то ругается, что идет переопределение, если вообще не определять, то кричит, что не знаю такого слова ? Как быть? ____ P.S. Пользуясь случаем передаю свое огромное "спасибо, Real" за Ваш программатор. (надеюсь автором не ошибся :-) ) После того как я сжег c STK200/300 половину линий LPT-порта ... с Вашим программатором я неразлучен
|
|
|
|
|
Jun 22 2007, 14:37
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(AndryG @ Jun 22 2007, 11:35)  1. известные на этапе компиляции задержки делаем через _delay_loop[_2]() функции (можно удобный define сделать, дабы с тактовой сразу высчитывать) Зачем самому делать? _delay_us() и _delay_ms() из delay.h как раз представляют из себя комбинацию из "сразу высчитывать" и вызова _delay_loop1() и _delay_loop2() соответственно. Тактовую они берут по F_CPU. А при выключенной оптимизации проблемы именно потому, что "сразу высчитывание" без оптимизации не всё делается на этапе компиляции. Цитата(AndryG @ Jun 22 2007, 11:35)  2. ... видать с библиотек линкер нормально тянет только нужное Именно так. Цитата(AndryG @ Jun 22 2007, 11:35)  Еще вопросик. "Переменная" F_CPU определяется в makefile ... и она же нужна мне в моем исходнике. Если я определяю ее сам, то ругается, что идет переопределение, если вообще не определять, то кричит, что не знаю такого слова Не понял. У меня в makefile определяется, через -DF_CPU=$(F_CPU)UL передаётся gcc и через -o$(F_CPU)hz передаётся в avreal. При компиляции delay всё нормально. Если F_CPU определять в исходниках, то это нужно делать не перед вызовом _delay_*, а перед включением delay.h. Если сделать наоборот, то будет ругаться на переопределение, так как при отсутствии F_CPU во время разбора delay.h устанавливается F_CPU по умолчанию (я бы предпочёл вывал по #error "delay.h: F_CPU not defined"). p.s. автором не ошибся.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jul 5 2007, 18:04
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(ReAl @ Jun 22 2007, 09:08)  Всё равно оно ещё, кажется, недоделано. -ffunction-sections в компиляторе работает, а --gc-sections в линкере - нет. Давно не проверял работу этих ключиков, оказывается (вот так оно мне нужно, значит  ). По кр. мере в двух самых свежих сборках WinAVR --gc-sections работает, незадействованные функции успешно выбрасывает (соответственно при -fdata-sections будет должно вышвыривать глоблаьные и static-переменные, на которые нет ссылок). Вероятно, заработало это где-то тогда, когда к обработчикам прерываний стали __attribute__((used)) цеплять.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|