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

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

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

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

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

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


Закрытая тема
Опции темы
Непрочитано 18.03.2010, 17:11   #21
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

Я смотрю тема с установкой/сбросом продолжает жить своей жизнью
Вот кстати - в предыдущем посте отцитирована конструкция:
Код:
in temp,PORTA
andi temp 0b00010000
out PORTA ,temp
Порождает ее что то типа:
Код:
PORTA &= (1‹‹PA5);
Это по сути - групповой сброс разрядов в регистре и такая конструкция никак не сможет быть преобразована в команды сброса/установки бита. Ну и макроса выше для именно этого случая и нет Ну и вообще такие макросы слишком заточены именно под один разряд, а в жизни часто приходится оперировать группами разрядов. В результате будут по тексту перемешаны и макросы и (1‹‹bit0)|(1‹‹bit1) - ИМХО некрасиво.
Реклама:
kison вне форума  
Непрочитано 19.03.2010, 00:44   #22
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: на WinAVR + AVR Studio c CVAVR

Сообщение от ut1wpr Посмотреть сообщение
Я пишу в ИАРе. И пользуюсь такими макросами:
Код:
#define SETBIT(x,y) 	(x|=(1‹‹y))
#define CLRBIT(x,y) 	(x&=~(1‹‹y))
#define INVBIT(x,y) 	(x^=(1‹‹y))
#define CHKBIT(x,y) 	(x&(1‹‹y))	
#define BITON(x,y)  	(x&(1‹‹y))
#define BITOFF(x,y) 	(!(x&(1‹‹y)))
Мне кажется с макросами ОЧЕНЬ НЕУДОБНО. Гораздо удобнее писать с ИМЕНАМИ ножек... Привык на ассемблере писать с именами...
Я пишу для HITECH PICC16 и IAR AVR, одну программу под оба компилятора. Примерно под одинаковые кристаллы. Например под PIC12F675 и ATtiny13.
Пишу так:
Файл хидера: пишется под оба компилятора под разные МК.
Код:
//определим ножки для AVR
#ifdef  __IAR_SYSTEMS_ICC_ //IAR AVR-------------------
#define pin_out 1			//направление ножки для вывода
#define pin_inp 0			//направление ножки для ввода

//сегменты АЛС
#define segmenta_dir DDRB_Bit0		//для направленния
#define segmenta_out PORTB_Bit0	//для вывода

//разряды АЛС
#define razrad0_dir DDRB_Bit0		//для направленния
#define razrad0_out PORTB_Bit0		//для вывода

//клавиши
#define key0_dir DDRB_Bit0		//для направленния
#define key0_inp PINB_Bit0		//для ввода
#endif

//определим ножки для PIC
#ifdef _HTC_H_	//HiTech PIC16--------------------
#define pin_out 0			//направление ножки для вывода
#define pin_inp 1			//направление ножки для ввода
//сегменты АЛС

#define segmenta_dir TRISB0		//для направленния
#define segmenta_out RB0		//для вывода

//разряды АЛС
#define razrad0_dir TRISB0		//для направленния
#define razrad0_out RB0			//для вывода

//клавиши
#define key0_dir TRISB0			//для направленния
#define key0_inp RB0			//для ввода
#endif
Файл кода, уже не зависит каой компилятор и МК:
Код:
temp=0;
key0_dir=pin_inp;			//конфигурируем ножку на ввод
if(key0_inp==0){temp= temp | 1;}	//считываем состояние ножки в переменную темп
segmenta_dir =pin_out;			//конфигурируем ножку на вывод
if(temp & 0x01==0){segmenta_out=0;}//выводим состояние на ножке =0
else{segmenta_out=1;}		//выводим состояние на ножке =1
Думаю, что таким образом можно будет писать и для других МК, ARM итд... Дописывая хидеры.
Может быть покажется что компилируемый код слишком велик? Поверьте, десяток команд погоды не сделают. Зато гибкость переопределения ножек когда переносим какой либо модуль в новый проект. Если же нужно укоротить код и работать с целым портом а не с отдльными ножками, то пишем так:
хидер:
Код:
//определим ножки для PIC
#ifdef _HTC_H_	//HiTech PIC16--------------------
#define port_out 0x00			//направление ножки для вывода
#define port_inp 0xFF			//направление ножки для ввода
#define SEGMENT_DIR TRISB		//для направленния
#define SEGMENT_PORT RB		//для вывода
#define KEYS_DIR TRISB			//для направленния
#define KEYS_INP RB			//для ввода
#endif

//определим ножки для AVR
#ifdef  __IAR_SYSTEMS_ICC_ //IAR AVR-------------------
#define port_out 0xFF			//направление ножки для вывода
#define port_inp 0x00			//направление ножки для ввода
#define SEGMENT_PORT PORTB		//для вывода
#define SEGMENT_DIR TRISB		//для направленния
#define KEYS_DIR TRISB		//для направленния
#define KEYS_INP PINB			//для ввода
#endif
Теперь код СИ компилится короче, но мы всё равно работаем с именами.
Код:
KEYS_DIR=port_inp;	//конфигурируем на ввод
TEMP_KEYS=KEYS_INP;	//считываем состояние порта в переменную
SEGMENT_DIR=port_out;	//конфигурируем на вывод
SEGMENT_PORT=stat_segments;//выводим состояние в порт из переменой

Последний раз редактировалось picavr; 19.03.2010 в 00:52.
picavr вне форума  
Сказали "Спасибо" picavr
EagleB3 (19.03.2010)
Непрочитано 19.03.2010, 01:49   #23
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

picavr, Да все верно , и биты обозвать проще именами и работать с ними типа :
Код:
PIN_A,0 = 1;
И в ассемблере обоих микро есть бит ориентированные команды.
Но в С для стандарта /совместимости ( в старых компах , да и в новых нет таковых команд) приходится извращатся с логическими выражениями.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 19.03.2010, 05:03   #24
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

Сообщение от dosikus Посмотреть сообщение
проще именами и работать с ними типа :
Код:
PIN_A,0 = 1;
Да неудобно, в голове держать за что отвечает PIN_A,0. Удобно так:
Код:
LED_GREEN_INDICATOR_POWER=1;
Сообщение от dosikus Посмотреть сообщение
Но в С для стандарта /совместимости ( в старых компах , да и в новых нет таковых команд) приходится извращатся с логическими выражениями.
Пишем для МК, а не компа. А какой компилятор для МК не понимает операции с портами?
Вот переменую BIN (понимает HITECH, не понимает IAR) лучше пользовать флаги в структурах.
picavr вне форума  
Непрочитано 19.03.2010, 10:22   #25
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

1) ИМХО еще удобней

Код:
LED_GREEN=1;
2) переменные типа BIT есть в CVAVR
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 19.03.2010, 10:46   #26
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

В соседней ветке есть вопрос по функции delay.
При больших задержках корректнее будет, наверное, выдерживать время с помощью таймера. Я обьявлял переменную, и при прерывании таймера увеличивал ее значение на единицу. В функции задержки подсчитывал нужное количество прерываний. А как это лучше сделать?
Компилятор WinAVR.
andries5 вне форума  
Непрочитано 19.03.2010, 11:55   #27
EagleB3
Вид на жительство
 
Регистрация: 03.05.2006
Сообщений: 312
Сказал спасибо: 30
Сказали Спасибо 144 раз(а) в 52 сообщении(ях)
EagleB3 на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

Я, признаться, прочитав название ветки, ожидал здесь увидеть что-то вроде "Как перенести программу из CVAVR в WinAVR" и необходимые для этого макросы или примеры преобразований.

Вместо этого нашел здесь филиал "ххх - это очень просто".

Жаль...
EagleB3 вне форума  
Сказали "Спасибо" EagleB3
mux (04.02.2011)
Непрочитано 19.03.2010, 13:21   #28
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

Насколько смог определить, одно из отличий CVAVR и WinAVR, это обращение к портам. В CVAVR например
PORTB.4=1;
а в WinAVR
PORTB |= (1‹‹4);
Если использовать макрос типа
#define sbi(reg, bit) (reg|= (1‹‹bit))
то в WinAVR будет
sbi(PORTB,4);
Это одно из отличий. Была бы небходимость, тогда можно и портировать.
Давайте проект попробуем совместно.

Последний раз редактировалось andries5; 19.03.2010 в 13:43.
andries5 вне форума  
Непрочитано 19.03.2010, 17:07   #29
Yegorvin
Прописка
 
Аватар для Yegorvin
 
Регистрация: 05.02.2008
Сообщений: 251
Сказал спасибо: 34
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
Yegorvin на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

Разобрался немного с AVR studio. Восторгу нет предела. Все очень удобно. Особенно понравилась работа с програмамтором и удобство работы с фьюзами. Все расписано нормальным языком, ошибиться очень тяжело.

Сообщение от andries5 Посмотреть сообщение
В CVAVR например
PORTB.4=1;
Это конечно все очень удобно, но это отклонение от стандарта ANSI С и такие конструкции не способствуют переносимости программ.


Сообщение от andries5 Посмотреть сообщение
а в WinAVR
PORTB |= (1‹‹4);
Тоже вроде удобно но зачем зря нагружать контроллер лишним сдвигом если можно сразу вписать нужное число прямым текстом
PORTB |= 16;
да нужно его рассчитать но с опытом прийдт и в программе будет меньше мусора.

Кстати нигде не нашел чтобы автор написал что в настройках AVR Studio нужно было прописать "include directory", по умолчанию то заголовочных файлов нет и студия должна их брать из библиотеки WINAVR.
Yegorvin вне форума  
Непрочитано 19.03.2010, 17:20   #30
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: На WinAVR + AVR Studio c CVAVR

Сообщение от Yegorvin Посмотреть сообщение
если можно сразу вписать нужное число прямым текстом
PORTB |= 16;
Никто не пишет (1‹‹4), а пишут например (1‹‹PB4). Сразу понятно что это такое. Или (1‹‹CS10) ну и т.п.

Сообщение от Yegorvin Посмотреть сообщение
Кстати нигде не нашел чтобы автор написал что в настройках AVR Studio нужно было прописать "include directory", по умолчанию то заголовочных файлов нет и студия должна их брать из библиотеки WINAVR.
А зачем студии заголовочные файлы? Она не является компилятором. Компилирует именно WinAvr, а ему прекрасно известно где находятся стандартные заголовки.
kison вне форума  
Закрытая тема

Закладки


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06
Си-шный компилятор в AVR Studio меняет последовательность команд svv11 Микроконтроллеры, АЦП, память и т.д 29 21.03.2010 05:47
прерывания usart в avr studio 4.13 zubr_ Микроконтроллеры, АЦП, память и т.д 6 14.10.2009 18:33
AVR studio и GCC Nifelheim Микроконтроллеры, АЦП, память и т.д 12 26.09.2009 23:33


Часовой пояс GMT +4, время: 13:23.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot