Подключение файлов Atmel Studio(undefined reference to)
Подключение файлов Atmel Studio(undefined reference to)
Использую 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){}
}
Код (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){}
}
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подключение файлов Atmel Studio(undefined reference to)
avr-gcc различает заглавные и прописные буквы в расширении файлов, причем для ассемблера .s и .S компилируются по-разному. к сожалению, сейчас не могу вспомнить, но какой-то вариант компилируется без поддержки макросов в стиле Си. рекомендую попробовать переименовать исходник - поменять регистр расширения ассемблерного файла.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Подключение файлов Atmel Studio(undefined reference to)
Попробовал, не помогает.рекомендую попробовать переименовать исходник - поменять регистр расширения ассемблерного файла.
Re: Подключение файлов Atmel Studio(undefined reference to)
Добавил
extern "C"
{
char afun(char);
}
Проект собрался без ошибок, только пока не проверил. Не уверен пока, что все норм, т. к. понятия не имею зачем нужен extern "C".
extern "C"
{
char afun(char);
}
Проект собрался без ошибок, только пока не проверил. Не уверен пока, что все норм, т. к. понятия не имею зачем нужен extern "C".
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подключение файлов Atmel Studio(undefined reference to)
блин, вы бы сразу написали точное описание ошибки...
здесь ошибка! R24 должна быть ранее определенной константой, а не регистром! т.е. вот так было бы правильно:KaiTheKat писал(а):ldi R30,R24
и ошибка у вас именно на эту строку и эту "неопределенную ссылку" R24ldi R30, 24
undefined reference to `r24'
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Re: Подключение файлов Atmel Studio(undefined reference to)
Да там тоже была ошибка, но компилятор на него указал только что, когда проект уже собрался. До этого он указывал на функцию afun. Я пробовал и пустую функцию использовать, таже ошибка была
afun:
ret
А вот после добавления extern "C" исчезла именно ошибка undefined reference to afun
afun:
ret
А вот после добавления extern "C" исчезла именно ошибка undefined reference to afun
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подключение файлов Atmel Studio(undefined reference to)
не верю!
я собрал ваш проект в первоначальном виде после замены R24 на 24, прочее - 1 в 1 так, как вы его разместили в первом посте. т.е. в первоначальном виде других ошибок не было.
я собрал ваш проект в первоначальном виде после замены R24 на 24, прочее - 1 в 1 так, как вы его разместили в первом посте. т.е. в первоначальном виде других ошибок не было.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подключение файлов Atmel Studio(undefined reference to)
ошибки разные, но где вариант для вашего первоначального кода?
KaiTheKat писал(а):Код (asmroutine.h):
#ifndef ASMROUTINE_H_
#define ASMROUTINE_H_
//Общие определения
#ifdef __ASSEMBLER__
//Определения только для ассемблера
#endif
#ifndef __ASSEMBLER__
//Определения только для С
extern char afun(char); //добавление, удаление extern, inline не помогает
#endif
#endif /* ASMROUTINE_H_ */
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подключение файлов Atmel Studio(undefined reference to)
а почему у вас main.cpp ? если вы собрались на С++ писать - это правильно, и тогда ваша "добавка" необходима, ибо С++ не понимает ссылки в стиле простого Си по умолчанию.
если пишите на Си, то и расширение файлам давайте правильное
если пишите на Си, то и расширение файлам давайте правильное
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Подключение файлов Atmel Studio(undefined reference to)
Понятно, спасибо. Пишу на C++
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подключение файлов Atmel Studio(undefined reference to)
в вышеприведенном коде нет ни какого намёка на С++.
но вам виднее
но вам виднее
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


