| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Inline функции в CodeVision AVR
22.08.2011, 20:58
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Генератор квадратурных сигналов. У него 2 выхода. Фаза A и B.
С клавиатуры задаётся количество импульсов, выдаваемое генератором. Например, 30000. Частота следования и направление счёта.
Основной участок кода:
|
PHP код:
|
unsigned char value[4] = {0b00000111,0b00010111,0b00011111,0b00001111};
unsigned char w;
unsigned char position;
unsigned int count;
interrupt [TIM1_COMP] void timer1_comp_isr(void)
{
w = 0;
}
...
unsigned int i;
unsigned char j = 1;
unsigned char inc = 1;
...
for(i = 0; i ‹ count; i+=inc) {
position += step;
position &= 3;
w = j;
while(w);
PORTB = value[position];
if((PINB & 0b00000110) == 0) {
PORTD = 0b01111111;
delay_ms(500);
PORTD = 0b01000000;
break;
}
}
|
Последний раз редактировалось Godzilla82; 22.08.2011 в 21:02.
|
|
|
|
22.08.2011, 22:05
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Вот вы неугомонный... аж интересно стало... 
В WinAVR
ISR (XXXXXX_vect, ISR_NAKED)
Но тогда всё нужное сохранять и возвращать самому ручками придётся...
|
|
|
|
22.08.2011, 22:08
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
|
|
|
|
22.08.2011, 22:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Сообщение от st_1
|
|
ISR_NAKED
|
хм... он даже RETI не ставит...
CV:
|
PHP код:
|
_timer1_comp_isr:
ST -Y,R30
IN R30,SREG
; w = 0;
CLR R5
OUT SREG,R30
LD R30,Y+
RETI
|
WinAVR с NAKED:
WinAVR без NAKED:
|
PHP код:
|
push r1
push r0
in r0, 0x3f ; 63
push r0
eor r1, r1
;w = 0;
sts 0x0065, r1
pop r0
out 0x3f, r0 ; 63
pop r0
pop r1
reti
|
Последний раз редактировалось Godzilla82; 22.08.2011 в 22:20.
|
|
|
|
22.08.2011, 22:18
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Не ставит... самому надобно...
А в CV... INLINE - это, по сути, тот же #define {............................}...
|
|
|
|
22.08.2011, 22:22
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Сообщение от omercury
|
|
А там из нужного один SREG и остался....
|
А я даже и не смотрел, что там к чему... 
Инкремент двухбайтовой, джиттер при прерывании... ну так PIC24 напрашивается...
|
|
|
|
22.08.2011, 23:10
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Сообщение от st_1
|
Инкремент двухбайтовой, джиттер при прерывании... ну так PIC24 напрашивается...
|
Вариант 2:
Аппаратный выход таймера, внешний аппаратный же квадратурный преобразователь (если по нашему, то ТМ2 и пол-ЛА3)...
И самое кучерявое - внешний таймер...
|
|
|
|
22.08.2011, 23:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Сообщение от omercury
|
Вариант 2:
Аппаратный выход таймера, внешний аппаратный же квадратурный преобразователь (если по нашему, то ТМ2 и пол-ЛА3)...
И самое кучерявое - внешний таймер...
|
Зачем? Мне и 200 кГц хватало. Это просто к вопросу о быстродействии.
Все хвалят WinAVR, а получается, что он бяку делает в прерываниях.
Ну и вот ещё вопрос: есть глобальная переменная. Она должна быть доступна и из прерываний и из всех функций.
При volatile WinAVR хранит её в памяти. Как его заставить хранить её в регистре?
|
|
|
|
22.08.2011, 23:56
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Сообщение от Godzilla82
|
Зачем? Мне и 200 кГц хватало. Это просто к вопросу о быстродействии.
Все хвалят WinAVR, а получается, что он бяку делает в прерываниях.
|
Это не вопрос быстродействия, это понимание философии ЯВУ... в частности СИ...
В том то и прелесть СИ, что по задаче выбирается камень, неважно какого производителя и пишется прога... а не мучаются над каждым байтом и каждой микросекундой...
WinAVR - это GCC...
GCC также... под PIC24, PIC32, KEIL со всеми АРМами, и т.д. ...
А под что ещё есть CodeVision???
|
Цитата:
|
Ну и вот ещё вопрос: есть глобальная переменная. Она должна быть доступна и из прерываний и из всех функций.
При volatile WinAVR хранит её в памяти. Как его заставить хранить её в регистре?
|
Лучше этого не делать... В компиляторе, так или иначе, задействованы все регистры... Если сразу и заработает, то потом, при малейших изменениях, получите геморрой...
Но если вам интересно...
register unsigned char temp asm("R24");
Последний раз редактировалось st_1; 22.08.2011 в 23:58.
|
|
|
|
23.08.2011, 00:03
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Inline функции в CodeVision AVR
Сообщение от st_1
|
|
register unsigned char temp asm("R24");
|
А он её при "оптимизации" не выкинет как ненужную?
P.S. Выкидывать - не выкидывает. Но и работать - не работает...
Последний раз редактировалось Godzilla82; 23.08.2011 в 00:15.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Литература по микроконтроллерам (AVR, PIC, ПЛИС и т.д.). Сборка книг - (256 книг+ 27 CD c примерами из книг) [обновление 2011, PDF, DJVU]
|
yurinform |
Микроконтроллеры, АЦП, память и т.д |
5 |
05.07.2011 19:00 |
|
Codevision AVR + AVR Studio помогите разобраться с отладкой
|
Daget |
Микроконтроллеры, АЦП, память и т.д |
24 |
07.03.2011 14:41 |
|
CodeVision AVR 2.05.0 работа с битами портов
|
ajsn |
Микроконтроллеры, АЦП, память и т.д |
4 |
06.03.2011 23:15 |
|
mRTOS - кооперативная ОС для AVR. Порт CodeVision.
|
LVII |
Микроконтроллеры, АЦП, память и т.д |
5 |
29.11.2008 14:44 |
|
Как работать с AT89C5131 в CodeVision AVR?
|
lom771 |
Микроконтроллеры, АЦП, память и т.д |
2 |
29.08.2006 16:51 |
Часовой пояс GMT +4, время: 02:00.
|
|