Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Inline функции в CodeVision AVR

Непрочитано 22.08.2011, 20:58  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение 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.
Godzilla82 вне форума  
Непрочитано 22.08.2011, 22:05  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Inline функции в CodeVision AVR

Вот вы неугомонный... аж интересно стало...
В WinAVR
ISR (XXXXXX_vect, ISR_NAKED)
Но тогда всё нужное сохранять и возвращать самому ручками придётся...
st_1 вне форума  
Непрочитано 22.08.2011, 22:08  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Inline функции в CodeVision AVR

Сообщение от st_1 Посмотреть сообщение
Вот вы неугомонный... аж интересно стало...
В WinAVR
ISR (XXXXXX_vect, ISR_NAKED)
Но тогда всё нужное сохранять и возвращать самому ручками придётся...
А там из нужного один SREG и остался....
omercury вне форума  
Непрочитано 22.08.2011, 22:15  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение 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:

PHP код:
 
sts    0x0065, r1 
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.
Godzilla82 вне форума  
Непрочитано 22.08.2011, 22:18  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Inline функции в CodeVision AVR

Не ставит... самому надобно...
А в CV... INLINE - это, по сути, тот же #define {............................}...
st_1 вне форума  
Непрочитано 22.08.2011, 22:22  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Inline функции в CodeVision AVR

Сообщение от omercury Посмотреть сообщение
А там из нужного один SREG и остался....
А я даже и не смотрел, что там к чему...
Инкремент двухбайтовой, джиттер при прерывании... ну так PIC24 напрашивается...
st_1 вне форума  
Непрочитано 22.08.2011, 23:10  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Inline функции в CodeVision AVR

Сообщение от st_1 Посмотреть сообщение
Инкремент двухбайтовой, джиттер при прерывании... ну так PIC24 напрашивается...
Вариант 2:
Аппаратный выход таймера, внешний аппаратный же квадратурный преобразователь (если по нашему, то ТМ2 и пол-ЛА3)...

И самое кучерявое - внешний таймер...
omercury вне форума  
Непрочитано 22.08.2011, 23:27  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Inline функции в CodeVision AVR

Сообщение от omercury Посмотреть сообщение
Вариант 2:
Аппаратный выход таймера, внешний аппаратный же квадратурный преобразователь (если по нашему, то ТМ2 и пол-ЛА3)...

И самое кучерявое - внешний таймер...
Зачем? Мне и 200 кГц хватало. Это просто к вопросу о быстродействии.

Все хвалят WinAVR, а получается, что он бяку делает в прерываниях.

Ну и вот ещё вопрос: есть глобальная переменная. Она должна быть доступна и из прерываний и из всех функций.

При volatile WinAVR хранит её в памяти. Как его заставить хранить её в регистре?
Godzilla82 вне форума  
Непрочитано 22.08.2011, 23:56  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию 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.
st_1 вне форума  
Сказали "Спасибо" st_1
Godzilla82 (23.08.2011)
Непрочитано 23.08.2011, 00:03  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Inline функции в CodeVision AVR

Сообщение от st_1 Посмотреть сообщение
register unsigned char temp asm("R24");
А он её при "оптимизации" не выкинет как ненужную?

P.S. Выкидывать - не выкидывает. Но и работать - не работает...

Последний раз редактировалось Godzilla82; 23.08.2011 в 00:15.
Godzilla82 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.