PDA

Просмотр полной версии : Ошибки компиляции WinAVR



rz3gu
11.04.2008, 08:53
Компилятор выдаёт вот такие предупреждения. Интуитивно предпологаю, что не хватает каких-то библиотек или всё дело в насттройках компилятора. Програмка простейшая.
Из http://forum.radiospec.ru/index.php?showtopic= 5612
Листинг 2.

-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Size before:
AVR Memory Usage
----------------
Device: atmega8

Program: 152 bytes (1.9% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)




Converting to AVR Extended COFF: avr41.cof
avr-objcopy --debugging --change-section-address .data-0x800000 --change-section-address .bss-0x800000 --change-section-address .noinit-0x800000 --change-section-address .eeprom-0x810000 -O coff-ext-avr avr41.elf avr41.cof
Discarding local symbol outside any compilation unit: .do_copy_data_start
Discarding local symbol outside any compilation unit: .do_copy_data_loop
Discarding local symbol outside any compilation unit: .do_clear_bss_start
Discarding local symbol outside any compilation unit: .do_clear_bss_loop
Warning: no "data" section found in output file
Warning: file C:/WINDOWS/TEMP/ccC6Gftb.s not found in symbol table, ignoring
Warning: ignoring function __vectors() outside any compilation unit
Warning: ignoring function __bad_interrupt() outside any compilation unit
avr-objcopy: --change-section-vma .eeprom+0xff7f0000 never used
avr-objcopy: --change-section-lma .eeprom+0xff7f0000 never used
avr-objcopy: --change-section-vma .noinit+0xff800000 never used
avr-objcopy: --change-section-lma .noinit+0xff800000 never used
avr-objcopy: --change-section-vma .bss+0xff800000 never used
avr-objcopy: --change-section-lma .bss+0xff800000 never used
avr-objcopy: --change-section-vma .data+0xff800000 never used
avr-objcopy: --change-section-lma .data+0xff800000 never used

Size after:
AVR Memory Usage
----------------
Device: atmega8

Program: 152 bytes (1.9% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)

Explorer
11.04.2008, 10:07
А что пишет в конце, Process Exit Code: ?

rz3gu
11.04.2008, 10:14
Process Exit Code:0
Но вот VMLAB Стопрится и выдаёт:

[PC = $0037, Time = 2.08 ms, {PER}]: USART: MPCM mode not yet supported

Затем:
[PC = $003B, Time = 2.08 ms, {ADC}]: ADC: ADCH register is read-only
[PC = $003C, Time = 2.08 ms, {ADC}]: ADC: selected MUX channel wich does not exist

Может не в компиляции дело?

Кукин Николай Николаевич
14.04.2008, 17:45
GD everybody!
Специально решил проверить все это.
Установил с пластинки WinAVR, списал эту програмульку и протрахался все воскресенье , пытаясь протолкнуть компилятор дальше сообщения о том, что он не видит файла исходника. Видимо на пластинке авторы книги чего-то не дописали.
Седня скачал с сайта последнюю версию WinAVR и проверил ее на заранее известном файле CW ключа, которую решил переделать а-ля RU3GA вместо кнопок переменный резюк и еще соединить с компом, чтоб записывать в память файлы, а не с рычага коробки передач заводить. Он сругался на то, что ф. main и предварительно объявленные функции не являются прототипами. Ну это по старой по старой памяти успокоил компилятор, дав им всем аргумент void.
После этого приступил к пытке avr41.
Первый же запуск дал тот же результат, что и у автора ветки RZ3GU, но только размер 140 байт.
Решил поиграть с параметрами компиляции в файле Make. Установил в дебаг-инфе просто ELF, оптимизацию поставил 2.
Все как рукой сняло, но размер остался прежним. Попробуйте поиграть этими параметрами в маке файле. Именно он конфигурирует все поведение этой громадной системы получения хекс файла.
Дело в том, что для прогона из-под отладчика в OBJ-файл компилятором прописывается таблица символических имен функций и переменных, объявленных в исходниках программистом-автором программы. Тогда отладчик может на экране показать вместо ассемблерного текста исходный текст программы, как его видно из текстового редактора, ассемблерная текстовка будет скрыта, если не указать отладчику-жучководу «хочу видеть ассемблерный код».
Так вот, видимо в этой куче компилятор-линкер-дебаггер разработчики решили удалять за ненадобностью НЕИСПОЛЬЗУЕМЫЕ стандартные функции и имена, которые предусмотрены их соглашениями в компиляторе.
Именно эти сообщения Вы и видите на экране – удалено , потому, что не используется, или расположено за пределами памяти.
Поэтому ничего страшного в этом скорей всего нет, просто объем файла для подсовывания отладчику-эмулятору или симулятору будет меньше, и меньше сожрет памяти контроллера. Для писиибм программ все символические имена компиляторами С/С++ записывались в файлы, что позволяло довольно просто дизассемблировать кривые проги (если автор не удалил или не знал, что можно удалить таблицу) и вносить в них поправки. А вот обработанные такие файлы с удаленной таблицей уже тяжело разбирать.
ПыСЫ. Дома лежит ссылка, как поженить WinAVR и AVRStudio и получить видал-засунь 2in1.
Завтра напишу.
Николай.
Попробую послать текст ключа, надо только его переименовать.

UR4QBP
14.04.2008, 19:27
Очень подробно описано как скрестить VMLAB и Code Vision AVR описано в http://avr123.nm.ru/ А также уроки по программированию AVR в СodeVisionAVR. Благодаря этой ссылочке я научился работать с VMLAB. Скачайте весь курс одним архивом http://avr123.nm.ru/avr123.nm.ru.rar там все есть.

Кукин Николай Николаевич
14.04.2008, 20:09
Александр, добрый вечер.
Я имел ввиду работу с С/С++ компилятором WinAVR (avr-gcc) из-под оболочки AVRStudio, что немножко не то, т.к. WinAVR изначально способно работать с VMLAB, а оболочка WinAVR текстовой редактор PN.
Николай.

UR4QBP
14.04.2008, 23:21
Александр, добрый вечер.
Я имел ввиду работу с С/С++ компилятором WinAVR (avr-gcc) из-под оболочки AVRStudio, что немножко не то, т.к. WinAVR изначально способно работать с VMLAB, а оболочка WinAVR текстовой редактор PN.
Николай.
Вы меня извените, я не внимательно топик прочитал, но тем не менее VMLAB тоже не хуже работает чем WINAVR, даже попроще...

Explorer
15.04.2008, 08:34
но тем не менее VMLAB тоже не хуже работает чем WINAVR, даже попроще...

Наверное вы имели ввиду Code Vision AVR

Explorer
15.04.2008, 08:45
to Кукин Николай Николаевич

А в Makefiele какой вы процессор указали?

Кукин Николай Николаевич
15.04.2008, 10:03
Совместная работа старых версий AVRstudio версий менее 4 описана в AVRbegin.front.ru/for_read/AVRGCCandAVRstudio.h tm «Использование AVRGCC совместно с AVRstudio»
Еще было обсуждение на roboclub.ru , где сказано, что версия 4.12 studio дружит автоматически с gcc.
У меня 4.09 студио не получилось с наскока поженить на версии WinAVR 2004 года. Там откровенно не предусмотрено подключение С текстов. В WinAVR 2008 года, которую скачал вчера предусмотрено подключение отладочной информации для студио 4.12, т.е. действительно должно работать совместно, но пока нет студии 4.12, проверить не могу.

Пока писАл, Explorer успел задать вопрос.
Конфигурационный файл make можно редактировать любым текстовым редактором, но для этого необходимо очень хорошо знать все параметры, с которым работает вся бригада компилятора. Я пока за 2 дня не успел еще с этим разобраться, так как только приступил к теме С для микроконтроллеров. Для таких как я разработчики предусмотрели спецпрограмму (отдельное спасибо), которая сидит disk_name:\WinAVR\bi n\wish84.exe, использует в качестве шаблона mfile.tcl,сидящий в папке mfile. Запускать с этим параметром для создания make. Можно проще, програмуля имеет ярлык в виде чайника (видимо с подтекстом) в основном меню пуск/программы/WinAVR/чайникMFile(WinAVR). Там выбираете нужный параметр и корректите. Если просто зажмурить глаза, то нужно выбрать тип процика и имя файла проги-С. Больше ничего не надо трогать для первого раза. Сохраняете в одном месте с исходником сишной программы и все должно начать работать. В общем надо чаще тыкать клавиатуру и подольше анализировать результат.
Пока вроде все.
Николай.

Кукин Николай Николаевич
15.04.2008, 10:13
Для Explorer.
Прошу прощения, неправильно понял Ваш вопрос, поэтому не про то написал. Процик указал тот же, что у автора темы - mega8.
Николай.

Кукин Николай Николаевич
20.04.2009, 08:47
Предыстория обычная.

В процессе адаптации программы,написанной для Tiny2313 под AT90S2313 на пакете WinAvr20080407 в результате собственной невнимательности при чтении и ликвидации разного рода сообщений компилятора (обычно возникающих в процессе борьбы при переносе на другой диалект языка), потратил битый час на
преодоление предупреждения компилятора
: undefined reference to `__BV'
в стандартном макросе
set_sleep_mode(SLEEP _MODE_IDLE);

При анализе фрагмента макроса set_sleep_mode(<mode>)
...
#elif defined(__AVR_AT90S2 313__) \
|| defined(__AVR_AT90S2 323__) \
|| defined(__AVR_AT90S2 333__) \
|| defined(__AVR_AT90S2 343__) \
|| defined(__AVR_AT43US B320__) \
|| defined(__AVR_AT43US B355__) \
|| defined(__AVR_AT90S4 414__) \
|| defined(__AVR_AT90S4 433__) \
|| defined(__AVR_AT90S8 515__) \
|| defined(__AVR_ATtiny 22__)

#define SLEEP_MODE_IDLE 0
#define SLEEP_MODE_PWR_DOWN _BV(SM)

#define set_sleep_mode(mode) \
do { \
_SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~__BV(SM)) | (mode)); \
} while(0)
... ,
описанного в библиотеке <avr/sleep.h>, после продолжительного тупого глядения в экран с одновременным прочтением описаний обоих проциков
(ведь вроде все так и должно быть!), вдруг задумался, -
"А почему нижняя черточка у __BV такая широкая?"
Тем более, что этот макрос применяется практически в любой проге, в том числе и в этой проге тоже, и никаких эксцессов с ним не было.
При просмотре поисковиком библиотеки header файлов в этой версии пакета установил, что комбинация `__BV` встречается только один раз в
вышеуказанном месте и является обычной очепяткой.
После раздумий в спокойной обстановке решил изменений в библиотеку не вносить, а в расчете на возможное повторение косяка в следующих
версиях WinAvr в препроцессоре программы до объявления библиотек ввел новый макрос с комментом:
"
/* ******************** ******************** ******************** ******************** ******
введено мною для исправления косяка в библиотеке WinAvr20080407 <avr/sleep.h> для проциков AT90S... , чтобы не править этот файл библиотеки */
...
#define __BV(bit) (1<<(bit))
...
/* ******************** ******************** ******************** ******************** ******
"
Как всегда, "дело было не в бобине..."