Страница 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. в скобках надо указать константу-ыектор (см. хидер к примененному микроконтроллеру).
должно быть типа так:
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