Поиск ошибок и различных проблем. Поможем решить и исправить
Atmel avr tools ошибка при компиляции
Поделиться
Нашли опечатку?
Пожалуйста, сообщите об этом — просто выделите ошибочное слово или фразу и нажмите Shift Enter.
avr-gcc (WinAVR): поиск и устранение ошибок при компиляции и линковке
Добавил(а) microsin
Здесь приведены некоторые методы поиска и устранения ошибок компиляции и линковки в пакете avr-libc/avr-gcc (WinAVR, AVR Studio, Atmel Studio).
Справка по опциям командной строки высвечивается командой:
В зависимости от причин ошибки могут быть разные. Либо утилита make вообще не запускается, либо в процессе обработки makefile выдаются ошибки наподобие «Системе не удается найти указанный путь.». Первое, что нужно сделать в таких случаях — попытаться найти причину ошибки. Если причина известна, то будет понятен возможный способ её решения. Рассмотрим возможные варианты.
1. Самый простой случай, когда make вообще не запускается:
"make" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Это сообщение сигнализирует о том, что операционная система не может найти утилиту make. Либо вообще не установлен тулчейн, либо по какой-то причине в системной переменной %Path% не прописан путь до утилиты make. Решение простое — убедиться, что установлен нужный тулчейн, где утилита make присутствует, и проверить, что в переменной окружения %Path% правильно задан путь для запуска утилиты make.
Для компиляции makefile-проектов для AVR (например, из библиотеки LUFA) нужен либо тулчейн WinAVR, либо AVR Studio, либо Atmel Studio.
2. В процессе работы make возникают ошибки. Нужно внимательно изучить выводимые сообщения, и по ним разбираться в причинах проблем. Самый частый случай — в системе установлено несколько разных тулчейнов, где присутствует утилита make.exe, и когда Вы выполняете команду make, то запускается утилита из не того тулчейна, который нужен.
К сожалению, в этом случае сообщения об ошибке утилиты make может быть не информативным, например:
Системе не удается найти указанный путь.
Найдите на жестком диске все исполняемые файлы make.exe, и если их несколько, то отредактируйте записи в переменной Path таким образом, чтобы make.exe нужного тулчейна запускалась в приоритете, т. е. чтобы её запись пути поиска находилась первой в списке путей.
Если у Вас установлено несколько версий WinAVR, то нужно удалить старые пути запуска из переменной окружения Path, чтобы оставить только пути до той версии WinAVR, с которой Вы сейчас работаете. Такое может произойти, если на компьютере переустанавливался WinAVR (например, раньше был WinAVR-20080610, а теперь стал WinAVR-20100110). Необходимо ОБЯЗАТЕЛЬНО очистить переменную окружения %Path% от старых путей, иначе пути включаемых файлов include будут вычисляться компилятором gcc неправильно. Нельзя допускать, чтобы старые пути WinAVR соседствовали в %Path% с новыми, даже если новые пути идут первыми. Например, из-за этого глюка я долго не мог разобраться, почему компилятор и линковщик никак не могут найти функцию eeprom_update_byte. Для проверки, какие реально включаемые пути использует компилятор (где он ищет h-файлы), используйте опцию -print-search-dirs (см. пункт 4).
Для быстрого переключения путей Path на разные версии WinAVR удобно использовать командные файлы с настроенной командой set на разные значение переменной окружения Path. Также существует очень удобная утилита Rapid Environment Editor site:rapidee.com, которая позволяет легко просматривать, изменять записи переменной Path, добавлять новые записи, изменять их положение в списке. Имейте в виду, чтобы редактировать системные записи переменной Path, необходимо запустить эту утилиту с правами администратора.
3. Изучать сообщение об ошибке нужно очень внимательно, чтобы понять причину проблемы. Вот еще один пример, где совсем не очевидно, что проблема кроется в отсутствии папки obj в корневом каталоге проекта.
c:asmlufa-LUFA-170418DemosDeviceClassDriverGenericHID>make
' [INFO] :' Begin compilation of project "GenericHID"...
""
avr-gcc (AVR_8_bit_GNU_Toolchain_3.6.1_1750) 5.4.0
Copyright (C) 2015 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.
После добавления папки obj в корневой каталог проекта ошибка исчезает.
См. также Q006 и Q015.
Для разборок с запутанными операторами условной компиляции (#ifdef, #ifndef, #else и проч.) удобно использовать директивы #warning «сообщение» и #error «сообщение». Они позволяют точно определить, какую ветку в исходном тексте компилятор просмотрел, а какую отбросил.
Когда непонятно, почему не включается какой-нибудь заголовочный файл, удобно воспользоваться опцией -print-search-dirs, которая показывает пути поиска компилятором файлов. Эту опцию можно добавить в makefile к общим флагам компилятора, например так:
ALL_CFLAGS += -print-search-dirs
Причина — пропущена точка с запятой в начале строки комментария. Комментарий при этом скорее всего на русском языке.
Пример:
make: *** No rule to make target `opendous-jtag.elf', needed by `elf'. Stop.
make: *** Нет правила для сборки цели `opendous-jtag.elf', требуемой для `elf'. Останов.
Исправление ошибки:
1. Открыть makefile текстовым редактором, найти строку «elf:». В этой строке будет прописано имя цели, например:
2. make ругается на отсутствие этой цели $(TARGET).elf. Проверьте, правильно ли задана у Вас переменная TARGET, она должна быть задана строкой наподобие:
# Target file name (without extension).
TARGET= opendous-jtag
3. Если цель у Вас задана правильно, то возможно ошибка в описании действий по обработке цели. Найдите в makefile место, где обрабатывается цель elf. Это может быть блок текста наподобие следующего:
Здесь % означает «любой текст». Обычно такой знак используется для задания файлов определенного типа, например *.c, *.cpp, *.o и т. д. В некоторых случаях (например, в тулчейнах Atmel) такой паттерн обрабатывается неправильно, и не может быть автоматически сопоставлен с целью $(TARGET).elf. Поменяйте «%.elf:» на «$(TARGET).elf:», получится следующее:
------ Rebuild All started: Project: usbasploader, Configuration: default AVR ------
Build started.
Project "usbasploader.cproj" (ReBuild target(s)):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreRebuild" in file "C:Program FilesAtmelAtmel Studio 6.0VsCompiler.targets" from project
"C:asmUSBasp-bootloaderusbasploader.cproj" (target "ReBuild" depends on it):
Using "RunCompilerTask" task from assembly "C:Program FilesAtmelAtmel Studio 6.0VsCompiler.Task.dll".
Task "RunCompilerTask"
C:Program FilesAtmelAtmel Studio 6.0makemake.exe -C "C:asmUSBasp-bootloader" -f "Makefile" clean all
c:Program FilesAtmelAtmel Studio 6.0makerm.exe: cannot remove `*.o': Invalid argument
make: Entering directory `C:/asm/USBasp-bootloader'
rm -f usbasploader.hex main.bin *.o usbdrv/*.o main.s usbdrv/oddebug.s usbdrv/usbdrv.s
c:Program FilesAtmelAtmel Studio 6.0makerm.exe: cannot remove `usbdrv/*.o': Invalid argument
make: Leaving directory `C:/asm/USBasp-bootloader'
make: *** [clean] Error 1
Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreRebuild" in project "usbasploader.cproj" -- FAILED.
Done building project "usbasploader.cproj" -- FAILED.
Build FAILED.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Ошибку можно устранить, если в тулчейне Atmel Studio заменить утилиту rm.exe (обычно находится в папке c:Program FilesAtmelAtmel Studio 6.0make) на rm.exe другой версии, которую можно взять из пакета WinAVR (обычно находится в папке c:WinAVR-20100110utilsbin).
Пример:
USBtoSerial.c:1:0: error: unrecognized argument to -mmcu= option: 'ATmega32U4'
USBtoSerial.c:1:0: note: See --target-help for supported MCUs
Причина в регистре символов опции MCU, которая была указана через makefile (или через командную строку). В опции -mcmu тип микроконтроллера должен быть указан маленькими буквами, т. е. вместо ATmega32U4 нужно указать atmega32u4.
#это ошибочно указанный для avr-gcc тип микроконтроллера:
#MCU = ATmega32U4
#здесь тип микроконтроллера указан правильно:
MCU= atmega32u4
Часто задаваемый вопрос, который звучит примерно так: «Скажите пожалуйста, можно ли каким нибудь образом конвертировать проект, скомпилированный с помощью MinGW, в проект AVR Studio или в Atmel Studio?».
Здесь под «проектом MinGW» подразумевается обычный проект на основе makefile, который компилируется из командной строки командами make clean / make hex (и т. п.). Ответ на этот вопрос — можно, и довольно легко. Дело в том, и AVR Studio, и Atmel Studio ВСЕГДА использует для компиляции внешний компилятор gcc и среду компиляции на основе makefile (это называется тулчейн, он может быть установлен как отдельно в виде WinAVR, так и в составе Atmel Studio). Причем есть два способа такой компиляции — либо makefile генерируется для проекта на лету средой AVR Studio/Atmel Studio, либо подключается внешний makefile (это настраивается в свойствах проекта AVR Studio/Atmel Studio).
Таким образом, Вы можете, во-первых — подключить к проекту внешний makefile (возьмите его из «проекта, скомпилированного с помощью MinGW»). Однако такой makefile должен быть составлен по особым правилам (в частности, имя target должно совпадать с названием проекта), так что обратитесь к документации Atmel или сделайте makefile на основе готового примера. Это можно условно назвать «конвертировать проект MinGW в проект AVR Studio или Atmel Studio».
Во-вторых, если не подключать внешний makefile, то можно просто тупо посмотреть все опции, которые настроены в «проекте MinGW» (т. е. заданы в makefile), и создать аналогичные опции в среде настроек свойств обычного проекта AVR Studio (или Atmel Studio). Например, нужно задать такие же:
— тип процессора (обычно это опция DEVICE makefile). — тактовую частоту ядра (F_CPU). — библиотека для отладочного вывода printf (PRINTF_LIB и т. п.). — настройка опций генерации кода gcc — оптимизация и т. д. (CFLAGS).
Второй способ трудно назвать «конвертацией», потому что проект Вы будете настраивать вручную, подсматривая опции для настройки в готовом makefile «проекта MinGW». Однако и тут ничего сложного в принципе нет.
При перекомпиляции проекта Atmel Studio выдает ошибку наподобие «Целевой объект «PreBuildEvent» пропущен из-за невыполненного условия; выражение (‘$(PreBuildEvent)’!=») равно (»!=»)», и проект не компилируется.
Это просто глюк IDE Atmel Studio, связанный с ошибочной обработкой пустого списка событий до запуска сборки проекта (Pre-build event). Глюк можно обойти, если добавить ничего не значащее событие, которое есть, но ничего не делает. Для этого откройте свойства проекта, перейдите на закладку Build Events, нажмите кнопку Edit Pre-build и добавьте в список Pre-build event command line командную строку наподобие sleep 0, нажмите OK, сохраните проект.
После этого проект будет компилироваться нормально.
Примерно так выглядит сообщение компилятора:
Build started 8.5.2015 at 16:09:30
avr-gcc -mmcu=atmega168 -Wall -gdwarf-2 -DF_CPU=11059200UL -Os -fsigned-char -MD -MP -MT ms5535.o
-MF dep/ms5535.o.d -c ../ms5535.c
../ms5535.c: In function 'ConvertCtoW5535':
../ms5535.c:73:1: error: insn does not satisfy its constraints:
(insn 118 65 66 12 (set (reg/v:SI 20 r20 [orig:65 C6 ] [65])
(mem/c/i:SI (plus:HI (debug_expr:HI D#1)
(const_int 4 [0x4])) [3 C6+0 S4 A8])) ../ms5535.c:52 874 {*movsi}
(expr_list:REG_EQUIV (mem/c/i:SI (plus:HI (reg/f:HI 34 argL)
(const_int 4 [0x4])) [3 C6+0 S4 A8])
(nil)))
../ms5535.c:73:1: internal compiler error: in reload_cse_simplify_operands, at postreload.c:403
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://www.atmel.com> for instructions.
make: *** [ms5535.o] Ошибка 1
Build failed with 2 errors and 0 warnings...
Ошибка связана с версией компилятора avr-gcc, и устраняется обновлением, либо к откату до предыдущей версии.
Примерно так выглядит сообщение компилятора:
../usart.c:46:6: error: attempt to use poisoned "SIG_USART_RECV"
ISR (SIG_USART_RECV)
^
In file included from ../usart.c:1:0:
../usart.c: In function 'SIG_USART_RECV':
../usart.c:46:6: warning: 'SIG_USART_RECV' appears to be a misspelled signal handler [enabled by default]
ISR (SIG_USART_RECV)
^
make: *** [usart.o] Error 1
Build failed with 1 errors and 1 warnings...
Проект раньше нормально компилировался тулчейном WinAVR, и такая ошибка стала появляться при попытке компиляции тулчейном Atmel Studio. Проблема была решена возвратом к тулчейну WinAVR-20100110.
-MF dep/usart.o.d -c ../usart.c
../usart.c:47: warning: 'SIG_USART_RECV' appears to be a misspelled signal handler
Предупреждение стало появляться при переводе проекта с ATmega168 (настройка в makefile: MCU = atmega168) на ATmega328 (MCU = atmega328). Вот в этом месте кода возникало предупреждение (выделено жирным шрифтом):
Ошибка связана с тем, что в подключаемом файле, где определены векторы прерывания процессора, по-разному даны имена векторов прерываний для микроконтроллеров ATmega168 и ATmega328. Для того, чтобы узнать правильное имя вектора прерывания, откройте файл avrincludeavrio.h тулчейна, найдите там строку с условием препроцессора, где проверяется тип процессора (в нашем примере надо найти __AVR_ATmega328__):
...
#elif defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
# include < avr/iom328p.h >
...
Строка #include < avr/iom328p.h > укажет на заголовочный файл, где определены регистры и вектора прерывания для процессора ATmega328. Откройте файл iom328p.h, и в секции определения векторов прерываний найдите нужное имя вектора прерывания (в данном примере имя вектора приема USART будет USART_RX_vect):
Когда программа скомпилирована с оптимизацией, есть некоторые трудности в использовании отладчика при просмотре переменных. Причина в том, что компилятор для переменных часто использует временные регистры, которые иногда не сохраняют свое значение в том месте, где нужно просмотреть переменную.
Как решить проблему, не прибегая к выключению отладки (опции -O0 и т. п.)? Иногда выключить отладку не представляется возможным. ИМХО самый простой способ — присвоить переменной атрибут volatile, тогда компилятор не будет её оптимизировать, и выделит для этой переменной отдельную ячейку памяти.
voidplacetimesectors (void)
{
volatile u8 ss, mm, hh;
RGB_t color;
ss = BCDtoBIN(rtc.reg.ss);
mm = BCDtoBIN(rtc.reg.mm);
hh = BCDtoBIN(rtc.reg.hh &0x1F);
Теперь переменные ss, mm и hh будут легко доступны при пошаговой отладки. Этот совет хорошо подходит для большинства компиляторов, как IAR, так и GCC.
Также для AVR GCC (начиная с версии 4.4) можно отключить оптимизацию для блока кода с помощью директивы pragma:
#pragma GCC push_options
#pragma GCC optimize ("O0")
//Код, где будет отключена оптимизация
...
#pragma GCC pop_options
Для функции можно отключить оптимизацию добавлением атрибута __attribute__((optimize(«O0»))), например так:
void__attribute__((optimize("O0"))) foo(unsignedchar data) {
// не модифицируемый компилятором код
...
}
Среда AVR Studio при запуске компиляции проекта выдает ошибку: avr-gcc: CreateProcess: No such file or directory. Проблема здесь в том, что AVR Studio не может найти тулчейн (компилятор avr-gcc.exe и утилиту make.exe). Возможные причины:
1. Тулчейн не установлен. 2. В переменной окружения %Path% отсутствуют пути запуска для avr-gcc.exe и make.exe.
Как исправить: нужно установить тулчейн. Тулчейн это либо пакет WinAVR, либо тулчейн, который можно скачать и установить в составе Atmel Stidio или отдельно. Если у Вас есть уже установленная копия тулчейна, то достаточно добавить в переменную %Path%. полный путь до утилит avr-gcc.exe и make.exe.
Возможно, что для некоторых все вышесказанное кажется абракадаброй. Поэтому если Процесс по шагам (на примере AVR Studio 4.19, Windows 7 64-bit):
1. Скачайте архив [1].
2. Распакуйте из архива папку WinAVR-20100110 на диск C:
3. На этом шаге надо настроить (или проверить правильность) путей поиска в переменной %Path%. Кликните Пуск -> Панель управления -> Система -> Дополнительные параметры системы -> Переменные среды… -> нижний список Системные переменные -> Найдите в списке строку с переменной Path и выберите её -> нажмите на нижнюю кнопку Изменить… -> Проверьте, что в строке ввода пути есть пути C:WinAVR-20100110bin (в этой папке находится avr-gcc.exe) и C:WinAVR-20100110utilsbin (в этой папке находится make.exe). После того, как внесли изменения, кликните OK, OK и еще раз OK.
Примечание: помните, что отдельные записи в переменной Path отделяются друг от друга точкой с запятой. Если Вы затрудняетесь с редактированием переменных окружения, то прогуглите этот вопрос, в Интернете полно материала по теме.
Примерно так должна выглядеть переменная %Path% после редактирования (это результат выполнения команды echo %Path%, добавленные пути выделены жирным шрифтом):
4. Запустите AVR Studio, откройте проект, который у Вас компилировался с ошибкой. Откройте свойства проекта, перейдите в раздел Custom Options, снимите галочку Use AVR Toolchain, и с помощью кнопочек «…» добейтесь, чтобы для avr-gcc у Вас был путь:
C:WinAVR-20100110binavr-gcc.exe
и для make был путь:
C:WinAVR-20100110utilsbinmake.exe
Нажмите OK.
См. также Q002 и Q006.
Например, для ATmega16 следующий код скомпилируется нормально:
out_SFR_IO_ADDR(TIMSK), R24
Но для ATmega328 подобный код выдаст ошибку «Error: number must be positive and less than 64»:
out_SFR_IO_ADDR(TIMSK1), R24
Такая ошибка происходит из-за того, что сделана попытка обратиться к регистру SFR (регистр специального назначения, Special Function Register) командой in или out, при этом адрес SFR превысил значение 63. У регистра TIMSK1 адрес равен 0x6F (десятичное 111), что как раз адрес превышает 63.
Исправить ошибку можно, если вместо out применить команду sts (in заменяется на lds):
Всем добрый день и крепкого здоровья!
В программе-среде AVR_Studio_4 я нормально компилирую исходник для ATtiny2313.
Но для микроконтроллера ATmega8515 компиляция не идёт и появляется сообщение об ошибке:
C:Program FilesAtmelAVR ToolsAvrAssemblerAppnotesm8515de f.inc(370): error: Attempt to redefine keyword ‘or’
Строка подключения написана правильно:
.include «C:Program FilesAtmelAVR ToolsAvrAssemblerAppnotesm8515de f.inc»
Прошу оказать помощь и подсказать как добиться компиляции.
0
3030 / 2213 / 510
Регистрация: 11.09.2009
Сообщений: 8,193
01.03.2020, 16:49
2
Сообщение от VlTag
error: Attempt to redefine keyword ‘or’
Ошибка: Попытка переопределения оператора ‘or’.
Ищите, где у вас второе определение ‘or’.
1
2019 / 1123 / 475
Регистрация: 11.10.2018
Сообщений: 5,727
01.03.2020, 17:58
3
Сообщение от VlTag
m8515de f
— m8515def, пишите слитно, без ошибок.
Добавлено через 7 минут
Вообще не понимаю как можно переопределить этот оператор(«or») да еще и при помощи файла «C:Program FilesAtmelAVR ToolsAvrAssemblerAppnotesm8515def.inc» — Возможно какая-то другая ошибка.
1
VlTag
7 / 7 / 2
Регистрация: 30.04.2012
Сообщений: 180
01.03.2020, 20:21
[ТС]
4
Уважаемые ответившие, спасибо!
1.
У меня в коде исходника нет пробела в строке подключения в имени файла m8515def.inc (почему-то здесь оно отображается как-бы с пробелом). Аналогичная строка при работе с ATtiny2313 (с файлом tn2313def.inc) обеспечивает нормальную компиляцию.
2.
Привожу фрагмент из подключаемого файла m8515def.inc:
Assembler
1
2
3
4
5
6
7
8
9
10
11
;UCSRA.equ RXC =7.equ TXC =6.equ UDRE =5.equ FE =4.equOR =3; old name kept for compatibilty.equ DOR =3.equ PE =2.equ UPE =2.equ U2X =1.equ MPCM =0
Видим в этом фрагменте строку с комментарием. И этот момент как-то связан с ошибкой при компиляции. Но как надо правильно код писать в исходнике?
У меня в исходнике вот такой простой (простейший) код для проверки на факт компиляции без ошибок:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.include "C:Program FilesAtmelAVR ToolsAvrAssemblerAppnotesm8515def.inc".def tmp = r16
.cseg
.org 0jmp RESET
RESET: ldi tmp,low(RAMEND)outSPL,tmp
clr tmp
out DDRB,tmp
out PORTB,tmp
ser tmp
out PORTB,tmp
out DDRB,tmp
out PINB,tmp
Gcykle:jmp Gcykle
Что в этом коде приводит к ошибке?
0
3030 / 2213 / 510
Регистрация: 11.09.2009
Сообщений: 8,193
01.03.2020, 21:11
5
Сообщение от VlTag
Что в этом коде приводит к ошибке?
Вы же сами нашли и показали:
Сообщение от VlTag
из подключаемого файла m8515def.inc:
…
.equ OR =3 ; old name kept for compatibilty
Если так и не поняли, просто удалите эту строку из файла m8515def.inc. Потом когда-нибудь разберётесь, что такое определение (переменных и пр.) и почему компилятор не пропускает их повторное определение.
1
Модератор
8320 / 4219 / 1602
Регистрация: 01.02.2015
Сообщений: 13,141
Записей в блоге: 4
01.03.2020, 23:10
6
Порылся у себя в архивах программок — нашел, что именно с такими строками в «m8515def.inc» успешно компилировал компиляторами ассемблера avrasm for DOS и avrasm for Windows — я тогда «жил и работал» в DOS.
Помню, что позже в AVRStudio на смену пришёл компилятор ассемблера avrasm2.exe.
Вероятно, что ошибки компиляции связаны именно с переходом к более новому компилятору.
И ещё, кажется, что с AVRStudio шли и оба компилятора и два набора включаемых файлов для разных компиляторов — посмотрите в папках и выбирайте другой «m8515def.inc».
Добавлено через 11 минут
Да, так и есть — нашёл у себя запись
— используется более новый файл описаний регистров
контроллера, а также более свежий компилятор из состава
AVR Studio, который «знает» о существовании MCU ATmega8515.
Для проверки более свежего компилятора из состава AVR Studio 4.16
(avrasm2 и avrasm32), исходные тексты были откомпилированы и hex
файлы сравнивались со старым hex’ом. Все hex’ы были одинаковы.
Тот inc, что вы используете выпуска 2002 года (это в «шапке» файла), а AVRStudio 4.16 вместе с новыми компиляторами и inc-файлами выпущена в 2007 или 2008 году.
Ищите в папке со студией другой комплект inc — более свежий.
1
7 / 7 / 2
Регистрация: 30.04.2012
Сообщений: 180
02.03.2020, 00:36
[ТС]
7
Уважаемые и дорогие друзья!
Большое СПАСИБО!
Ваши рекомендации мне помогли решить проблему.
Отмечу, что попытку закомментировать в подключаемом файле строку
.equ OR =3 ; old name kept for compatibilty
я предпринимал, но НЕ РЕДАКТИРОВАЛСЯ этот файл.
)
Короче, что я сделал после всех ваших рекомендаций.
Я решил, что ПО у меня не очень нормальное (AVR Studio) и нашёл надёжную фирменную и более позднюю версию. Установил на ПК. Заново создал проект с тем же исходным кодом. Начал компилировать. Увы, та же ошибка выскочила, НО! в этом ПО в подключаемом файле мешающая строка прекрасно закомментировалась! Компиляция пошла без ошибок.
В итоге, нет более у меня проблем.
Благодарю всех за дружескую помощь!
Вопрос закрыт.
0
Модератор
8320 / 4219 / 1602
Регистрация: 01.02.2015
Сообщений: 13,141
Записей в блоге: 4
02.03.2020, 00:46
8
Сообщение было отмечено VlTag как решение
Решение
Сообщение от VlTag
предпринимал, но НЕ РЕДАКТИРОВАЛСЯ этот файл.
Похоже, что он с атрибутами «только чтение». Исправляется в свойствах файла. Это на будущее.
А сейчас — в установленной AVRStudio осмотрите папки — там есть другой, более свежий комплект inc.
А также, там есть несколько версий и компилятора ассемблера — avrasm, avrasm2, avrasm32.
1
7 / 7 / 2
Регистрация: 30.04.2012
Сообщений: 180
02.03.2020, 03:41
[ТС]
9
Для ФедосеевПавел
Большое спасибо!
ПЕРВОЕ.
В той версии ПО (фирменное ПО) файл-инклудник — редактируется. Далее, я подумал и снял комментарий, а вместо обозначения OR (это — явная ошибка разработчика ПО) я написал обозначение DORR. Компиляция пошла отлично!
ВТОРОЕ.
Все Ваши рекомендации я учту.
ТРЕТЬЕ.
Я ранее неплохо работал в этой программе-среде на языке Assembler и на языке C. Но прошло несколько лет и я почти всё забыл, а надо срочно сделать один макет нового прибора и мне захотелось использовать микроконтроллер ATmega8515. Я всё сам вспомню.
ЧЕТВЁРТОЕ.
От Вашего форума — большая польза!
0
Модератор
8811 / 6593 / 896
Регистрация: 14.02.2011
Сообщений: 23,185
02.03.2020, 05:56
10
VlTag, и пятое
незачем так кричать
правила п 3.4
Избегайте использования слишком большого количества смайлов в сообщениях в тематических разделах форума, а также «кричащего» выделения текста, в том числе CAPS LOCK.
Сообщение от VlTag
Большое спасибо!
правила п 3.6 Если какой-либо пост на форуме показался вам полезным, то вы можете выразить свою благодарность, нажав кнопку «Спасибо» внизу самого поста.
Привет всем хвостатым!!)) Читаю я тут книжку и переписал из нее программу. Программа обычный счетчик нажатий кнопки. Переписал ее для изучения внутренних процессов мк. Так вот при компиляции вываливается ошибка, с которой я ранее не сталкивался, есть идеи?
Вот сам собственно код:
а вот вывод avr studio 4
asm v1 error : Duplicate label error : Internal — label changed between passes — conditoonal on forward reference?
asm v2 error: Illegal attempt to re-use ‘INT0’ as label C:Program Files (x86)AtmelAVR ToolsAvrAssembler2Appnotes2313def.inc(197): info: previous definition of ‘INT0’
забегу вперед, данная прога работает на atmega16 как то через жопу некорректно: счет идет после второго нажатия, а иногда бывает и одно нажатие считает, в чем траблы??
Сб авг 30, 2014 03:52:32
Здравствуйте. Ругается вот на это:
Код:
... INT0: clr temp out GIMSK, temp ....
INT0 не может быть меткой Вообщем надо как то так(пример из сети):
любопытно!!!! Прерывания взяты из datasheeta, и если данную метку переименовать то внешнее прерывание перестает работать (((
Как это вяжется с Attiny2313?
программу тестирую на железе, просто под рукой была именно 16 мега, переделал код под нее, результат не айс, ковырялся не получилось, перенес обратно на тиньку и вот результат…
Сб авг 30, 2014 19:05:06
slyberkut, таблица прерываний у вас оформлена … не очень. Ознакомьтесь с вот этой темой viewtopic.php?f=57&t=72364
Вс авг 31, 2014 00:58:56
slyberkut писал(а):любопытно!!!! Прерывания взяты из datasheeta…
.device Attiny2313 .include «2313def.inc»
Вы там видели? Нет там такого. Кстати, откройте «2313def.inc» и поймете почему:
INT0 не может быть меткой
Вы сначала запустите свою программу на Attiny2313, а потом уже мегу, не все сразу Программа, то рабочая, по нажатию на кнопку — прерывание и индикация на светодиодах чего там насчитали, только исправьте пару ошибок. Совершенно верно и хорошо Вам посоветовали:
Kavka писал(а):Ознакомьтесь с вот этой темой viewtopic.php?f=57&t=72364
Вт сен 09, 2014 17:19:23
А хотел бы поинтересоваться: .cseg и .org 0x0000 крайне желательно указывать? не смотря на то что программка такая простая.
Вт сен 09, 2014 17:27:29
Полезно сразу привыкать к правильнописанию программ, даже простых
Вт сен 09, 2014 23:04:35
Хм странно почему в книге об этом не пишут
Чт мар 24, 2016 00:01:04
_INT0 заменяем в листинге, и все работает. Листинг из книжки Ревича, сам только начал осваивать МК, и тоже с таким глюком столкнулся. Без прерываний все работает, как нужно. С прерываниями — полный глюк, то один клик, то два вместо одного. С задержками и генератором пробовал разные варианты, мало помогло. Интересно, глюки — это так задумано?) Или просто недоработки?
Сб мар 26, 2016 11:09:32
Пусть целевай МК, ищем файл m8535def.inc в папке установки компилятора. В конце этого файла будет таблица векторов. Переделываем ее по примеру.
Оформление таблицы векторов:
talich писал(а):_INT0 заменяем в листинге, и все работает. Листинг из книжки Ревича, сам только начал осваивать МК, и тоже с таким глюком столкнулся. Без прерываний все работает, как нужно. С прерываниями — полный глюк, то один клик, то два вместо одного. С задержками и генератором пробовал разные варианты, мало помогло. Интересно, глюки — это так задумано?) Или просто недоработки?
В обработчике прерывания нужно сохранять регистр SREG и используемые в прерывании регистры. Пример обработчика прерывания.
In AVRStudio 4.19, Atmel made some serious changes from previous versions. Specially while using the toolchains. After you install WinAVR (the latest version, 2010…), open a new project in Avrstudio and from now on, everytime you make a new project you have to do this steps:
Go to «Project» tab
Go to «Configurations Options»
Then all the way down to «Custom Options».
Once you there, you’ll see a checkbox called «Use AVR ToolChain», UNCHECK that option.(For some reason AVRStudio 4.19 does not link automatically the toolchain from WINAVR, so you have to do it manually).
After this, it enables the two options below.
For avr-gcc, you browse to the next direction: C:ProgramFilesWINAVR20100110binavr-gcc.exe
For make, you browse to the next direction: C:ProgramFilesWINAVR20100110utilsbinmake.exe
This directions depends on where did you installed WINAVR. I remember that the default location is «C:» but when I installed WINAVR, I changed it to «ProgramFiles»
Click «OK».
After doing this steps, you should be able to compile and run your code.
Cheers, and hope it helped!
PD: I had that same problem, months ago. Check out, www.avrfreaks.net, very good webpage for newbies and pros at programming AVRs.
Я попытался установить AVR Toolchain в другое место, что бы небыло пробелов в названии (по умолчанию он ставится в C:Program Files (x86)AtmelAVR ToolsAVR Toolchain). Но в настройках AVR Studio почему-то не редактируются пути к компилятору и мейкеру.