реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Вопрос по WINAVR
BorisRozentsvaig
сообщение May 19 2005, 15:14
Сообщение #16


Участник
*

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



Цитата(Karl @ May 19 2005, 14:04)
Попробовал elf - файл. В дизасемблере AVRStudio увидел следующее smile.gif :

@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.
Go to the top of the page
 
+Quote Post
BorisRozentsvaig
сообщение May 19 2005, 15:16
Сообщение #17


Участник
*

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



Цитата(Karl @ May 19 2005, 14:04)
Попробовал elf - файл. В дизасемблере AVRStudio увидел следующее smile.gif :
.....


Кстати, а какую версии WinAVR и AVR Studio ты используешь?
Go to the top of the page
 
+Quote Post
Karl
сообщение May 20 2005, 03:44
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Я использую WinAVR-20050214, AVRStudio4.11 b406SP2. make файл генерил программой MFile. DEBUG = dwarf-2. Так и есть.
Прикрепленные файлы
Прикрепленный файл  test.rar ( 14.43 килобайт ) Кол-во скачиваний: 58
 
Go to the top of the page
 
+Quote Post
BorisRozentsvaig
сообщение May 20 2005, 15:57
Сообщение #19


Участник
*

Группа: Свой
Сообщений: 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 начинаются...... ?????
Go to the top of the page
 
+Quote Post
BorisRozentsvaig
сообщение May 20 2005, 16:15
Сообщение #20


Участник
*

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



Так и есть. Проверил на своем проекте.
Если генерить elf и открывать в AVR-студио, то адрес процедуры бутлоадера определяется некорректно. С coff файлом все нормально.
Go to the top of the page
 
+Quote Post
Karl
сообщение May 23 2005, 03:40
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(BorisRozentsvaig @ May 20 2005, 21:15)
Так и есть. Проверил на своем проекте.
Если генерить elf и открывать в AVR-студио, то адрес процедуры бутлоадера определяется некорректно. С coff файлом все нормально.
*


AVR- студио показывает адреса в словах, а в make - файле адрес указывается в байтах. Я так понял. 0x1f00/2=0хf80. А мой проектик запускал? Так же вместо кода одни 0xFF?
Go to the top of the page
 
+Quote Post
BorisRozentsvaig
сообщение May 23 2005, 06:54
Сообщение #22


Участник
*

Группа: Свой
Сообщений: 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 - может там нормально будет бутлоадер отлаживаться?
Прикрепленные файлы
Прикрепленный файл  STK500_Protocol_v2_Bootloader.zip ( 28.64 килобайт ) Кол-во скачиваний: 74
 
Go to the top of the page
 
+Quote Post
LViktor
сообщение Aug 11 2005, 16:23
Сообщение #23





Группа: Новичок
Сообщений: 4
Регистрация: 17-07-05
Пользователь №: 6 854



Подскажите где можно найти компилятор avr-gcc 4.х для windows. И как можно прикрутить новую библиотеку avr-libc-1.2.5 к WinAVR-20050214. Только посылать на http://winavr.sourceforge.net/ нет необходимости.
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jun 21 2007, 14:08
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 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" - вырастает немного ... но задежки нет в любом варианте sad.gif Видать оптимизатор отработал на славу.
Как задержки организовывать? (не говрите про таймеры и загрузку проца ... я в курсе - я с компилятором разобраться хочу)

2. Сборка проекта
В makefile ("cтандартный") с дистрибутива добавляю еще один файлик
Код
# List C source files here. (C dependencies are automatically generated.)
SRC = rzlds.c crc8.c

В основной программе его функции нигде не использую ... а в hex код добавляется sad.gif Оптимизация "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() нашел упоминание, но без ответа sad.gif ... да и вообще ... хоть сколько-нить работающий кусок кода -- эт из форумских бесед :-)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 21 2007, 15:43
Сообщение #25


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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() нашел упоминание"

Документацию надо читать. Документацию.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
aesok
сообщение Jun 21 2007, 19:12
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(ReAl @ Jun 21 2007, 19:43) *
2. Сборка проекта
Пока могу только порекомендовать не включать в проект то, что не нужно. Кажется, --relax ещё окончательно не отлажен.


--relax - не отвечает за удаление неиспользуемых функций, он отвечает за замену CALL/JMP на RCALL/RJMP.

Анатолий.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 22 2007, 06:08
Сообщение #27


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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 в линкере - нет.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jun 22 2007, 08:35
Сообщение #28


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Подведем промежуточные итоги:
1. известные на этапе компиляции задержки делаем через _delay_loop[_2]() функции (можно удобный define сделать, дабы с тактовой сразу высчитывать)
Если задержки нужно вычислять в программе - таймер Вам в рки :-)
2. Нефиг, пока, лишние функции в свои файлы совать. Отсюда вопрос ... а как тогда используются "прилагаемые" хидеры ... там ведь куча функций описана, а линкуются только нужные? (тупой вопрос - надо идти читать документы ... видать с библиотек линкер нормально тянет только нужное)
3. ELF понимает и Студия и Протеус ... вот только в Протеусе (Студию не пробовал) половина строк кода стоит "не выполняемая" ... и на нулевой оптимизации тоже ... получается один шаг и половина программы выполнена sad.gif Вопрос открытый остается.

Еще вопросик. "Переменная" F_CPU определяется в makefile ... и она же нужна мне в моем исходнике. Если я определяю ее сам, то ругается, что идет переопределение, если вообще не определять, то кричит, что не знаю такого слова ? Как быть?

____
P.S.
Пользуясь случаем передаю свое огромное "спасибо, Real" за Ваш программатор. (надеюсь автором не ошибся :-) ) После того как я сжег c STK200/300 половину линий LPT-порта ... с Вашим программатором я неразлучен smile.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 22 2007, 14:37
Сообщение #29


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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. автором не ошибся.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 5 2007, 18:04
Сообщение #30


Нечётный пользователь.
******

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



Цитата(ReAl @ Jun 22 2007, 09:08) *
Всё равно оно ещё, кажется, недоделано. -ffunction-sections в компиляторе работает, а --gc-sections в линкере - нет.

Давно не проверял работу этих ключиков, оказывается (вот так оно мне нужно, значит smile.gif ).
По кр. мере в двух самых свежих сборках WinAVR --gc-sections работает, незадействованные функции успешно выбрасывает (соответственно при -fdata-sections будет должно вышвыривать глоблаьные и static-переменные, на которые нет ссылок).
Вероятно, заработало это где-то тогда, когда к обработчикам прерываний стали __attribute__((used)) цеплять.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016