Цитата(_Bill @ Jan 2 2007, 22:41)

Цитата(Samodelkin @ Jan 2 2007, 13:37)

Начинаю писать на Си для АВР. Посоветуйте компилятор Си для написания и отладки проектов. Попробовал WinAVR. Вроде удобная штука. Интегрируется в AVR Studio, там очень удобно отлаживать. В одной проге и пишишь, и отлаживаешь. Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI. В результате ничего не работает, после выхода из прерывания программа начинает работу с 0-го адреса!!!???
Может быть есть что-то более удобное, бесплатное или взломанное???!!!!
Заранее благодарен!
А как Вы процедуру прерывания описываете?
Вот код:
если что-то наплужил, сильно не ругайте, я еще только учусь.
Компилятор WinAVR-20060421-install.
По идее после переполнения ТС1 должно отработать прерывание, но вместо этого прога начинает работу с самого начала!!!??? В коде при выходе их прерывания вместо RETI стоит RET!!!???
Что делать?
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#define Freq 11059200
INTERRUPT(SIG_OVERFLOW1)
{
TCNT1 = 0x22;
PORTB ^= 0x01;
}
int main (void)
{
DDRB = 0x01;
TCCR1A = 0;
TCCR1B = 1;//5;
TCNT1 = 0xFFF0;//10000 - (Freq / 1024);
TIFR = 0;
TIMSK = 0x80;
GIMSK = 0;
sei();
while(1) ;
}
Цитата(defunct @ Jan 3 2007, 01:16)

Цитата(Samodelkin @ Jan 2 2007, 13:37)

Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI. В результате ничего не работает, после выхода из прерывания программа начинает работу с 0-го адреса!!!???
#include <avr/interrupt.h>
..
функцию обработчик прерывания описать как:
SIGNAL (Вектор_прерывания)
Если будет продолжать сбоить - код в студию.
Цитата
Может быть есть что-то более удобное, бесплатное или взломанное???!!!!
Более бесплатного точно нет.
Более удобное (в плане работы с flash/eeprom) - IAR.
Вот код:
если что-то наплужил, сильно не ругайте, я еще только учусь.
Компилятор WinAVR-20060421-install.
По идее после переполнения ТС1 должно отработать прерывание, но вместо этого прога начинает работу с самого начала!!!??? В коде при выходе их прерывания вместо RETI стоит RET!!!???
Что делать?
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#define Freq 11059200
INTERRUPT(SIG_OVERFLOW1)
{
TCNT1 = 0x22;
PORTB ^= 0x01;
}
int main (void)
{
DDRB = 0x01;
TCCR1A = 0;
TCCR1B = 1;//5;
TCNT1 = 0xFFF0;//10000 - (Freq / 1024);
TIFR = 0;
TIMSK = 0x80;
GIMSK = 0;
sei();
while(1) ;
}