WinAVR не видит дефайнов

Hi, All!

Взялся я тут немного поупражнятсься с АВР - поставил ВинАВР, поставил ВМЛАБ, написал пару программок из букваря - всё работает, вроде ничего не забыл... Принялся реализовывать некий алгоритм, который требует двух таймерв - нулевого и первого. И хлоп - при компиляции ошибки полезли - говорит, у тебя OCR0 не определен. Я - смотреть инклюд. В инклюде всё определено. И, судя по даташиту, всё определено правильно. Остальные регистры нареканий не вызывают - лопает их злобный ВинАВР, а вот именно OCR0 - не хочет. Таргет - AT90S8515. Что делать и кто виноват?

Да, и еще вопрос - как в этой (WinAVR+VMLAB) связке посмотреть время выполняемого кода? При ассемблере я это вручную считал, а при Сях как?

bye, Eugen!

... Если ничего не помогает - прочти инструкцию.

Reply to
Eugen Sergeev
Loading thread data ...

Привет, Eugen Sergeev!

27.04.2009 22:50 Вы писали:

Покажи дефайн, которого не видит gcc. И скажи версию gcc. Hа простейшем тесте описанная проблема, естественно, не воспроизводится:

alx2% cat test.c #define OCR0 blablabla

OCR0 alx2% avr-gcc -E test.c # 1 "test.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "test.c"

blablabla alx2% avr-gcc --version avr-gcc (GCC) 4.3.1

После компиляции Си превращаются в ассемблер. Еще можно воспользоваться симулятором например...

Reply to
Alex Mogilnikov

ES> Да, и еще вопрос - как в этой (WinAVR+VMLAB) связке посмотреть время ES> выполняемого кода? При ассемблере я это вручную считал, а при Сях как?

На сколько я помню, VMLAB отображает количество времени прошедшее с момента запуска программы, так что между двумя брыкпоинтами разницу вполне можно уловить :)

Reply to
Vladimir Zaitsev

Hi, Alex!

28 Apr 09 12:02, Alex Mogilnikov >>> Eugen Sergeev: >> Остальные регистры нареканий не вызывают - лопает их >> злобный ВинАВР, а вот именно OCR0 - не хочет. >> Таргет - AT90S8515. >> Что делать и кто виноват?

AM> Покажи дефайн, которого не видит gcc. И скажи версию gcc. Hа AM> простейшем тесте описанная проблема, естественно, не воспроизводится: Я, похоже, несколько коряво выразился. Если воткнуть строку с дефайном в тело программы ( test.c ), то всё нормально, оно видится и компилиться правильно. т.е.

#include <avr/io.h>

#include <avr/interrupt.h>

#define OCR0 _SFR_IO8(0x3C)

компилится и работает правильно. но определение этого самого OCR0 уже сделано в файле io8515.h ( откуда, собственно, строка дефайна и заимствована ), подключенного директивой #include <avr/io.h>. другие определения из этого файла видятся, компилятся этцетера - все, кроме OCR0. Хочется определить, почему.

Версия AVR от 13.03.2009, gcc 4.3.2 ( вроде так )

bye, Eugen!

... ■■■·Чем дальше в лес - тем толще партизаны·■■■

Reply to
Eugen Sergeev

Приведи команду, которой вызывается avr-gcc.

Reply to
Andrew O. Shadoura

Привет, Eugen Sergeev!

10.05.2009 11:13 Вы писали:

??? Вообще-то директива #include <avr/io.h> подключает файл avr/io.h. Ты уверен, что внутри этого avr/io.h есть #include <io8515.h>? Это во-первых. Во-вторых, если такая директива там есть, стоит убедиться, именно ли тот io8515.h подключается, который должен (судя по угловым скобкам, этот файл не является частью конкретного проекта). Это легко проверить по выводу препроцессора - он там указывает полные пути подключаемых файлов. В-третьих, если все это действительно так, то проблема в самом файле io8515.h, и надо изучать его текст. Там либо ошибка в самом дефайне (например опечатка в имени макроса), либо где-то рядом - возможно, это определение помещено под какие-нибудь #if-ы, условие которых не выполняется. А может просто в конце предыдущей строчки стоит '', из-за чего #define OCR0 превращается в продолжение предыдущего дефайна...

Hе имея исходного текста, мы можем об этом только гадать...

Reply to
Alex Mogilnikov

Hi, Andrew!

10 May 09 18:45, Andrew O Shadoura >>> All: >> кроме OCR0. >> Хочется определить, почему. AS> Приведи команду, которой вызывается avr-gcc.

avr-gcc -c -mmcu=at90s8515 -I. -O0 -gstabs -std=gnu99 -funsigned-char

-funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes

-Wa,-adhlns=timer.lst timer.c -o timer.o

Вот это имеется в виду?

bye, Eugen!

... hAS ANYONE SEEN MY cAPSLOCK KEY?

Reply to
Eugen Sergeev

Так надо. Он подключает io8515.h, если используемая архитектура --- at90s8515. Это --- системные инклуды.

Reply to
Andrew O. Shadoura

Внимательно прочитай список регистров AT90S8515.

Reply to
Andrew O. Shadoura

А особенно прошу обратить внимание на наличие у таймера 0 схемы output compare.

Reply to
Andrew O. Shadoura

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.