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

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

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

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

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

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

Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР.

 
Опции темы
Непрочитано 13.08.2006, 12:26  
koko202
Частый гость
 
Регистрация: 24.03.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
koko202 на пути к лучшему
По умолчанию WinAVR if=sbic

Здравствуйте!
Скачал WinAVR-20060421, сейчас разбираюсь.
Возник вопрос.
Пишу код:
if( !(PINE & _BV(4)) ){...}
или
if( bit_is_clear(PINE,4) ){...}

компилирую и получаю:
7b0: 0c 99 sbic 0x01, 4 ;
7b2: 0b c0 rjmp .+22 ;
- все нормально.

А когда пишу код:
if( PINE & _BV(4) ){...}
или
if( bit_is_set(PINE,4) ){...}

то получаю (оптимизация =0,1,2,3):
7b4: 81 b1 in r24, 0x01
7b6: 99 27 eor r25, r25
7b8: 92 95 swap r25
7ba: 82 95 swap r24
7bc: 8f 70 andi r24, 0x0F
7be: 89 27 eor r24, r25
7c0: 9f 70 andi r25, 0x0F
7c2: 89 27 eor r24, r25
7c4: 81 70 andi r24, 0x01
7c6: 90 70 andi r25, 0x00
7c8: 88 23 and r24, r24
7ca: 69 f0 breq .+26

или даже (оптимизация =s):
7ac: 81 b1 in r24, 0x01
7ae: 99 27 eor r25, r25
7b0: 24 e0 ldi r18, 0x04
7b2: 96 95 lsr r25
7b4: 87 95 ror r24
7b6: 2a 95 dec r18
7b8: e1 f7 brne .-8 ; 0x7b2
7ba: 81 70 andi r24, 0x01
7bc: 90 70 andi r25, 0x00
7be: 20 91 40 01 lds r18, 0x0140
7c2: 88 23 and r24, r24
7c4: 59 f0 breq .+22

Что-то мне такой код не нравится.

Пока спасаюсь макросом:
#define jmp_if_bit_clear(port,bit,label)
__asm__ __volatile__(
"sbis %0,%1
" "rjmp " #label
::"I"(_SFR_IO_ADDR(port)),"I"(bit))
...
jmp_if_bit_set(PINE,4,L_120);
...
asm("L_120:":;
...
Но может кто-нибудь посоветует что-нибудь попроще?
koko202 вне форума  
Непрочитано 17.08.2006, 16:17  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

Попробовал на своём WinAVR - проблема не повторяется. Версия моего компилятора (вывод команды avr-gcc --version): avr-gcc (GCC) 4.1.1 20060517 (prerelease).
Судя по всему у меня более новый компилятор.
Кстати, писать if (PINE & _BV(4)) не совсем корректно - правильней if (PINE & _BV(PINE4)). Хотя результат компиляции один и тот же.
Думаю, после обновления компилятора проблемы уйдут. В интернете есть страницы, со собранными неофициальными версиями WinAVR + GCC4.1.
alexgap вне форума  
Непрочитано 19.08.2006, 06:23  
koko202
Частый гость
 
Регистрация: 24.03.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
koko202 на пути к лучшему
По умолчанию WinAVR if=sbic

Версия моего компилятора 3.4.6.
Попробую поискать новую версию компилятора.
Пока переопределяю встроенный макрос:

#undef bit_is_set
#define bit_is_set(sfr, bit) (!!(_SFR_BYTE(sfr) & (1 ‹‹ (bit))))

Новый макрос генерит правильный код.

Кроме того, заметил еще одну вещь,
при попытке выровнять адрес переменной:
byte x __attribute__ ((aligned ());

компилятор выдает предупреждение:
warning: alignment of 'x' is greater
than maximum object file alignment. Using 1

Это тоже глюк компилятора или ему надо в makefile
указать что-то?
В описании ключей компилятора вроде бы ничего
такого не упоминается.

Насчет PINE4 – осознал, так и буду делать
koko202 вне форума  
Непрочитано 23.08.2006, 02:16  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

WinAVR 20060421
AVR-GCC.EXE (GCC) 3.4.6
При оптимизации 1,2,3,s:
Код:
-----------------------------------------------
		if( !(PINE & _BV(4)) ){
  d4:	0c 99       	sbic	0x01, 4	; 1
  d6:	fe cf       	rjmp	.-4      	; 0xd4
-----------------------------------------------
		if( (PINE & _BV(4)) ){
  d4:	0c 9b       	sbis	0x01, 4	; 1
  d6:	fe cf       	rjmp	.-4      	; 0xd4
-----------------------------------------------
Сдается мне что те странности не от кода в круглых
скобках (PINE & ...), а от кода в фигурных
скобках{...}.
Попробуйте, что нибудь попроще, например:
Код:
#include ‹avr/io.h›
int main (void){
	while(1){
		if( (PINE & _BV(4)) ){
			PORTE = 0xFF;
		}}}
Laksus вне форума  
Непрочитано 18.09.2006, 06:28  
koko202
Частый гость
 
Регистрация: 24.03.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
koko202 на пути к лучшему
По умолчанию

да нет, от того что в фигурных скобках ничего не зависит, достаточно просто "nop".
Тут у меня другой вопрос, может кто подскажет, где скачать версию компиллятора поновее,
а то что-то в интернете не могу найти, все что нашел еще старее моего.
koko202 вне форума  
Непрочитано 18.09.2006, 06:33  
koko202
Частый гость
 
Регистрация: 24.03.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
koko202 на пути к лучшему
По умолчанию

А может мои проблемы от какого-нибудь ключа в makefile?
koko202 вне форума  
Непрочитано 18.09.2006, 12:24  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от koko202
где скачать версию компиллятора поновее
на официальном сайте КОНЕЧНО !!!

http://sourceforge.net/project/showf...group_id=68108

и советую использовать его по примеру из VMLAB
как написано на avr123.nm.ru/04.htm

это удобно.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 18.09.2006, 18:36  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

Cм. также здесь - самое свежее:
http://www.atmanecl.com/EnglishSite/SoftwareEnglish.htm
alexgap вне форума  
Непрочитано 18.09.2006, 18:57  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

ГЛАВНОЕ ! есть мастер начального кода ! в "атмане"
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 26.09.2006, 06:00  
koko202
Частый гость
 
Регистрация: 24.03.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
koko202 на пути к лучшему
По умолчанию

Спасибо, сейчас скачаю - попробую
koko202 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование на Си в WinAVR zelen536 Микроконтроллеры, АЦП, память и т.д 36 28.02.2011 19:46
прерывания в WinAVR jsv001 Микроконтроллеры, АЦП, память и т.д 7 26.09.2007 05:16
uart WINAVR chipic128 Микроконтроллеры, АЦП, память и т.д 2 13.04.2007 15:10
uart WINAVR chipic128 Микроконтроллеры, АЦП, память и т.д 0 07.03.2007 16:37
UART и WinAVR SpiderHall Микроконтроллеры, АЦП, память и т.д 1 30.10.2006 20:53


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


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