реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Какой бесплатный компилятор Си для AVR лучше? Поделитесь!, Поделитесь опытом с новичком.
Samodelkin
сообщение Jan 2 2007, 13:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Начинаю писать на Си для АВР. Посоветуйте компилятор Си для написания и отладки проектов. Попробовал WinAVR. Вроде удобная штука. Интегрируется в AVR Studio, там очень удобно отлаживать. В одной проге и пишишь, и отлаживаешь. Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI. В результате ничего не работает, после выхода из прерывания программа начинает работу с 0-го адреса!!!???
Может быть есть что-то более удобное, бесплатное или взломанное???!!!!
Заранее благодарен!
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 2 2007, 14:18
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



В AVR-GCC нет проблемы про которую вы пишите. Если Вы хотите понять в где ошибка, высылайте Ваш код. Только давайте не в этом форуме, а в 'AVR'.

Анатолий.

Сообщение отредактировал aesok - Jan 2 2007, 14:19
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 2 2007, 17:32
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Samodelkin @ Jan 2 2007, 17:37) *
Начинаю писать на Си для АВР. Посоветуйте компилятор Си для написания и отладки проектов.
ИМХО ИАР рулит!!! Масса настроек, еслиф нада... Еслиф не нада, можно о них и не думать на первые разы. С АВРСтудио тоже дружит, ИАРовский Сишный код она видит. Ну и в плане проблем с эээ...разрешением проблем... тоже все нормально, специальные успокоители есть


--------------------
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 2 2007, 22:41
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Samodelkin @ Jan 2 2007, 13:37) *
Начинаю писать на Си для АВР. Посоветуйте компилятор Си для написания и отладки проектов. Попробовал WinAVR. Вроде удобная штука. Интегрируется в AVR Studio, там очень удобно отлаживать. В одной проге и пишишь, и отлаживаешь. Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI. В результате ничего не работает, после выхода из прерывания программа начинает работу с 0-го адреса!!!???
Может быть есть что-то более удобное, бесплатное или взломанное???!!!!
Заранее благодарен!

А как Вы процедуру прерывания описываете?

Сообщение отредактировал _Bill - Jan 2 2007, 22:41
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 3 2007, 01:16
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Samodelkin @ Jan 2 2007, 13:37) *
Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI. В результате ничего не работает, после выхода из прерывания программа начинает работу с 0-го адреса!!!???

#include <avr/interrupt.h>
..
функцию обработчик прерывания описать как:
SIGNAL (Вектор_прерывания)

Если будет продолжать сбоить - код в студию.

Цитата
Может быть есть что-то более удобное, бесплатное или взломанное???!!!!

Более бесплатного точно нет.
Более удобное (в плане работы с flash/eeprom) - IAR.
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jan 4 2007, 00:18
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Всем, кто откликнулся, большое спасибо!
Вы меня немного успокоили. Щас еще поколдую над прогой, если не получится, то вернусь сюда, будем разбираться дальше!!!
Go to the top of the page
 
+Quote Post
kamedi_clab
сообщение Jan 4 2007, 00:21
Сообщение #7


Местный
***

Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004



советую http://www.codevision.be/ (он бесплатный как IAR)

Цитата(defunct @ Jan 3 2007, 01:16) *
Цитата(Samodelkin @ Jan 2 2007, 13:37) *

Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI. В результате ничего не работает, после выхода из прерывания программа начинает работу с 0-го адреса!!!???

#include <avr/interrupt.h>
..
функцию обработчик прерывания описать как:
SIGNAL (Вектор_прерывания)



а в новом WinAVR разве не иначе объявление ?
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jan 4 2007, 01:02
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(_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) ;
}

Сообщение отредактировал Samodelkin - Jan 4 2007, 00:59
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jan 4 2007, 01:02
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



!!!!SIGNAL(SIG_OVERFLOW1)!!!!
Найдите в доке разницу между SIGNAL и INTERRUPT и почитайте.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jan 4 2007, 01:06
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(beer_warrior @ Jan 4 2007, 01:02) *
!!!!SIGNAL(SIG_OVERFLOW1)!!!!
Найдите в доке разницу между SIGNAL и INTERRUPT и почитайте.


Я Вас понял, но дело в том что INTERRUPT ведет себя точно так-же!!!!!!!
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 4 2007, 01:37
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Для какого контроллера компилируете? Для некоторых новых контролеров не определены имена прерываний начинающейся с 'SIG_*'. В новых проектах не используйте SIGNAL(), INTERRUPT() и SIG_*, этот интерфейс устарел.

Используйте новые макросы ISR() и имена прерываний заканчивающийся на _vect,
ISR(*_vect)
{
}

INTERRUPT() решили удалить как раз из-за того что некоторые не читают документацию.....

И еще, вместо:
#define Freq 11059200
напишите:
#define Freq 11059200UL
и тогда формула в:
TCNT1 = 0xFFF0;//10000 - (Freq / 1024);
заработает.


Анатолий.



А какя в WinAVR-20060421 версия avr-libc? Написана в avr-libc-user_manual.

Анатолий.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 4 2007, 05:24
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Samodelkin @ Jan 4 2007, 01:06) *
Я Вас понял, но дело в том что INTERRUPT ведет себя точно так-же!!!!!!!

Значит проблема может быть и не в прерываниях.
Возможны три причины по которым МК у Вас сбрасывается:
1. запрограммирован сооветствующим Fuse-битом WDT, решение проблемы - оключить WDT или добавить в основной цикл программы asm("WDR").
2. глючит BOD, решение проблемы - отключить BOD при знакомстве с МК.
3. помеха на Reset'е, решение - добавить конденсатор между землей и Reset'ом 0.1..1uF.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 4 2007, 05:50
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Jan 4 2007, 09:24) *
Цитата(Samodelkin @ Jan 4 2007, 01:06) *

Я Вас понял, но дело в том что INTERRUPT ведет себя точно так-же!!!!!!!

Значит проблема не в прерываниях.
Возможны три причины по которым МК у Вас сбрасывается:
1. запрограммирован сооветствующим Fuse-битом WDT, решение проблемы - оключить WDT или добавить в основной цикл программы asm("WDR").
2. глючит BOD, решение проблемы - отключить BOD при знакомстве с МК.
3. помеха на Reset'е, решение - добавить конденсатор между землей и Reset'ом 0.1..1uF.


Хм...Вроде бы автор топика глаголил, что "...Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI..." ???

2 Samodelkin - это на самом деле имеет место быть? Вы смотрели ассемблерный листинг Вашего творения?


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 4 2007, 06:10
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(prottoss @ Jan 4 2007, 05:50) *
Хм...Вроде бы автор топика глаголил, что "...Только вот столкнулся с проблемой, при отработке прерывания компилятор при выходе из него ставит RET вместо RETI..." ???

Но мы же с Вами знаем, что по поведению RET и RETI отличаются только влиянием на флаг I. Это отличие никак не могло привести к перезапуску девайса.

Тут либо вектором ошиблись, либо непредсказуемый сброс МК (по причинам, описанным в предыдущем моем посте).

Сомневаюсь я, что тут что-то не так генерится.


Цитата(Samodelkin @ Jan 4 2007, 01:02) *
...
TIMSK = 0x80; <--- вот здесь что разрешается-то? соответвует ли это SIG_OVERFLOW1?
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 4 2007, 15:36
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



В avr-libc 1.4.4, эта версия включена в WinAVR-20060421, маккос INTERRUPT удален из файла <avr/interrupt.h> и перемещен в <compat/deprecated.h>. Поэтому в коде:

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>

....

INTERRUPT(SIG_OVERFLOW1)
{
TCNT1 = 0x22;
PORTB ^= 0x01;
}

INTERRUPT(SIG_OVERFLOW1) Интерпретируеться компилятором ни как описание функции обработчика прерывания, а как описание обычной функции с именем INTERRUPT.

Анатолий.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.02019 секунд с 7
ELECTRONIX ©2004-2016