Страница 1 из 1

Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 01:02:06
KaiTheKat
Использую atmel studio 6.2, нужно подключить файлы (asmroutine.h, asmroutine.s). Файлы добавил через (add->existing item). При сборки f7, выдает ошибку (undefined reference to). При этом, вместо asmroutine.s поставить asmroutine.cpp, ошибки нет. В чем дело?

Код (asmroutine.h):
#ifndef ASMROUTINE_H_
#define ASMROUTINE_H_
//Общие определения
#ifdef __ASSEMBLER__
//Определения только для ассемблера
#endif
#ifndef __ASSEMBLER__
//Определения только для С
extern char afun(char); //добавление, удаление extern, inline не помогает
#endif
#endif /* ASMROUTINE_H_ */

Код (asmroutine.s):
#include "asmroutine.h"
.global afun
afun:
ldi R30,R24
add R24,R30
ret

Основной код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "asmroutine.h"

volatile char m=5,d;

ISR(TIMER0_OVF_vect) {d=afun(m);}

int main(void)
{
TCCR0=(1<<CS00);TIMSK=(1<<TOIE0);sei();
while(1){}
}

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 07:26:05
ARV
avr-gcc различает заглавные и прописные буквы в расширении файлов, причем для ассемблера .s и .S компилируются по-разному. к сожалению, сейчас не могу вспомнить, но какой-то вариант компилируется без поддержки макросов в стиле Си. рекомендую попробовать переименовать исходник - поменять регистр расширения ассемблерного файла.

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 08:03:09
KaiTheKat
рекомендую попробовать переименовать исходник - поменять регистр расширения ассемблерного файла.
Попробовал, не помогает.

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 10:30:25
KaiTheKat
Добавил
extern "C"
{
char afun(char);
}
Проект собрался без ошибок, только пока не проверил. Не уверен пока, что все норм, т. к. понятия не имею зачем нужен extern "C".

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 10:43:00
ARV
блин, вы бы сразу написали точное описание ошибки...
KaiTheKat писал(а):ldi R30,R24
здесь ошибка! R24 должна быть ранее определенной константой, а не регистром! т.е. вот так было бы правильно:
ldi R30, 24
и ошибка у вас именно на эту строку и эту "неопределенную ссылку" R24
undefined reference to `r24'

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 10:49:18
KaiTheKat
Да там тоже была ошибка, но компилятор на него указал только что, когда проект уже собрался. До этого он указывал на функцию afun. Я пробовал и пустую функцию использовать, таже ошибка была

afun:

ret

А вот после добавления extern "C" исчезла именно ошибка undefined reference to afun

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 10:54:16
ARV
не верю!

я собрал ваш проект в первоначальном виде после замены R24 на 24, прочее - 1 в 1 так, как вы его разместили в первом посте. т.е. в первоначальном виде других ошибок не было.

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 11:13:00
KaiTheKat
Я тоже в это не мог поверить. Походу проблема редкая. Может у меня что-то в atmel studio или visual studio что-то не так настроено. Вот скрины, в одном функция внутри exturn "C", в другом отдельно. Ошибки разные.
Изображение
Изображение

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 11:36:05
ARV
ошибки разные, но где вариант для вашего первоначального кода?
KaiTheKat писал(а):Код (asmroutine.h):
#ifndef ASMROUTINE_H_
#define ASMROUTINE_H_
//Общие определения
#ifdef __ASSEMBLER__
//Определения только для ассемблера
#endif
#ifndef __ASSEMBLER__
//Определения только для С
extern char afun(char); //добавление, удаление extern, inline не помогает
#endif
#endif /* ASMROUTINE_H_ */

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 11:59:29
KaiTheKat
Изображение

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 12:03:49
ARV
а почему у вас main.cpp ? если вы собрались на С++ писать - это правильно, и тогда ваша "добавка" необходима, ибо С++ не понимает ссылки в стиле простого Си по умолчанию.

если пишите на Си, то и расширение файлам давайте правильное

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 12:32:33
KaiTheKat
Понятно, спасибо. Пишу на C++

Re: Подключение файлов Atmel Studio(undefined reference to)

Добавлено: Ср окт 14, 2015 12:40:17
ARV
в вышеприведенном коде нет ни какого намёка на С++.

но вам виднее