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

Компилятор не хочет компилироать код

Добавлено: Сб фев 16, 2008 20:48:20
knyaz*
Пытаюсь скомпилировать вот этот код:

Код: Выделить всё

#include"avr/io.h"
#include"avr/signal.h"
#include"avr/interrupt.h"
int temp;

INTERRUPT(SIG_INTERRUPT0)
{
temp++;
}
INTERRUPT(SIG_OVERFLOW0)
{
temp=0;
}

int main(void)
{
while(1){};
}
Компилирую в KontrollersLab или avr-gcc в Linux FedoreCore 8

Вот такую ошибку выдает KontrollersLab

Код: Выделить всё

avr-gcc -mmcu=attiny2313 -O0 -c tax.c -o tax.o
In file included from tax.cc:2:
/user/lib/gcc/avr/4.1.2/../../../../avr/include/avr/signal.h:36:2: warning:#warning "This header file is obsolete. Use <avr>."
tax.c:11:error:redefinition of "INTERRUPT" was here
tax.c:7:error:previous definition of "INTERRUPT" was here
tax.c:18:2:warning: no newline at end of file
Error(s) occurred: The exit status was1.
незнаю что делать подскажите пожалуста///

Добавлено: Сб фев 16, 2008 21:41:58
ARV
для описания обработчика прерывания используй макрос ISR(...) а не INTERRUPT. в скобках надо указать константу-ыектор (см. хидер к примененному микроконтроллеру).

должно быть типа так:

Код: Выделить всё

ISR(TIMER0_OVF_Vect){
}
signal.h не надо подключать.

Добавлено: Сб фев 16, 2008 22:17:09
knyaz*
Привожу фрагмент хидера

Код: Выделить всё

/* Interrupt vectors */

/* External Interrupt Request 0 */
#define INT0_vect			_VECTOR(1)
#define SIG_INTERRUPT0			_VECTOR(1)

/* External Interrupt Request 1 */
#define INT1_vect			_VECTOR(2)
#define SIG_INTERRUPT1			_VECTOR(2)

/* Timer/Counter1 Capture Event */
#define TIMER1_CAPT1_vect		_VECTOR(3)
#define SIG_INPUT_CAPTURE1		_VECTOR(3)

/* Timer/Counter1 Compare Match */
#define TIMER1_COMP1_vect		_VECTOR(4)
#define SIG_OUTPUT_COMPARE1A		_VECTOR(4)

/* Timer/Counter1 Overflow */
#define TIMER1_OVF1_vect		_VECTOR(5)
#define SIG_OVERFLOW1			_VECTOR(5)

/* Timer/Counter0 Overflow */
#define TIMER0_OVF0_vect		_VECTOR(6)
#define SIG_OVERFLOW0			_VECTOR(6)

/* UART, Rx Complete */
#define UART_RX_vect			_VECTOR(7)
#define SIG_UART_RECV			_VECTOR(7)

/* UART Data Register Empty */
#define UART_UDRE_vect			_VECTOR(8)
#define SIG_UART_DATA			_VECTOR(8)

/* UART, Tx Complete */
#define UART_TX_vect			_VECTOR(9)
#define SIG_UART_TRANS			_VECTOR(9)

/* Analog Comparator */
#define ANA_COMP_vect			_VECTOR(10)
#define SIG_COMPARATOR			_VECTOR(10)

#define _VECTORS_SIZE 22

т/е мне нужно писать вместо INTERRUPT(SIG_OVERFLOW0)
ISR(SIG_OVERFLOW0)

Добавлено: Сб фев 16, 2008 22:30:40
ARV
нет, надо писать без сигналов:

ISR(TIMER0_OVF0_vect){
}

по сути, это одно и то же, но везде рекомендован именно этот вариант...

Добавлено: Сб фев 16, 2008 23:02:14
knyaz*

Код: Выделить всё

ISR(SIG_INTERRUPT0)
{
	temp++;
}

ISR(SIG_OVERFLOW0)
{
	temp=temp*6;
	cat[0]=temp%10;
	temp=temp/10;
	cat[1]=temp%10;
	cat[2]=temp/10;
	temp=0;	
}
вот так написал теперь компилируется =)
спс![/b]

Добавлено: Сб фев 16, 2008 23:08:39
knyaz*
появилась новая ошибка в коде

Код: Выделить всё

tax.c: In function 'main':
tax.c:27:error: 'TCCR0' undeclared (first use in this function)
tax.c:27:error: (Each undeclared indenifier is reported only once
tax.c:27:error: for each function it appeaers in.)
Почему то компилятору не понравилось что я ввел регистр TCCR0;
Вроде в хидере он описан...
Пишу правильно...

Добавлено: Сб фев 16, 2008 23:58:59
knyaz*

Код: Выделить всё

/* Timer/Counter 0 Control Register */
#define TCCR0	_SFR_IO8(0x33)

Код: Выделить всё

/* Timer/Counter 0 Control Register */
#define    CS02    2
#define    CS01    1
#define    CS00    0