AVR Studio 4, WinAVR, GCC, Си + ASM +

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение jordan »

Раньше писал на ASM, сейчас пишу на СИ, и пользуюсь вставками ассемблера в Си код, типа

Код: Выделить всё

asm("sei");
asm("cli");
asm("nop");
Все отлично работает, хотелось бы еще пользоваться sbi и cbi так на asm это занимает два машинных такта, а все конструкции на СИ для изменения состояния одной ножки порта не сбивая остальные состояния ножек порта, занимаю в разы а то и в десятки машинных тактов больше, для тех случаев когда нужна скорость это важно.
Но кода пытаюсь написать типа

Код: Выделить всё

asm(" sbi PORTB, 5")
Компилятор ругается - " Assembler messages: constant value required " (требуется постоянное значение)

Помогите пожалуйста договориться с компилятором :shock:
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение pyzhman »

jordan писал(а):все конструкции на СИ для изменения состояния одной ножки порта не сбивая остальные состояния ножек порта, занимаю в разы а то и в десятки машинных тактов больше
Ну вы загнули! Посмотрите, что делает компилятор и ахнете. Я сам порой сдираю компиляторовские решения.
По вопросу - пишите непосредственную адресацию, если уж приспичило. Типа

Код: Выделить всё

SBI 0x18, 5
Docendo discimus
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение Engineer_Keen »

видимо глупый компилятор не понимает что PORTB - это константа, придется залезть в даташит (или окно I|O View студии) и скатать оттуда HEX-адрес регистра.
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение jordan »

pyzhman и Engineer_Keen Спасибо!
Engineer_Keen писал(а):(или окно I|O View студии) и скатать оттуда HEX-адрес регистра.
- спасибо!
pyzhman писал(а):Ну вы загнули!


не согласен,

Код: Выделить всё

#define cbi(reg, bit) (reg&=~(1<<bit))			
#define sbi(reg, bit) (reg|= (1<<bit))	


Вот распространенный способ изменения состояния ножки среди радиолюбителей-программистов, и если я не ошибаюсь этот способ приведен в документации WinAvr, но он использует НАМНОГО больше машинных тактов чем тот что я предложил!
Таких способов можно придумать кучу, но быстрее 2 машинных тактов не придумать!

а в общем за ответ спасибо!

PS: что то я не нашёл адреса портов в даташите на atmega32 :cry: зато в i/o view есть адреса :))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение Rimsky »

jordan писал(а):pyzhman и Engineer_Keen Спасибо!
Engineer_Keen писал(а):(или окно I|O View студии) и скатать оттуда HEX-адрес регистра.
- спасибо!
pyzhman писал(а):Ну вы загнули!


не согласен,

Код: Выделить всё

#define cbi(reg, bit) (reg&=~(1<<bit))			
#define sbi(reg, bit) (reg|= (1<<bit))	


Вот распространенный способ изменения состояния ножки среди радиолюбителей-программистов, и если я не ошибаюсь этот способ приведен в документации WinAvr, но он использует НАМНОГО больше машинных тактов чем тот что я предложил!
Таких способов можно придумать кучу, но быстрее 2 машинных тактов не придумать!

а в общем за ответ спасибо!

PS: что то я не нашёл адреса портов в даташите на atmega32 :cry: зато в i/o view есть адреса :))
Не знаю, что у Вас с WinAVR и какой ключик оптимизации в makefile. Вот что компилятор сгенерил мне:

Код: Выделить всё

	PORTD &= ~(1<<PD7);
     12a:	5f 98       	cbi	0x0b, 7	; 11
	DDRD |= (1<<PD7);
     12c:	57 9a       	sbi	0x0a, 7	; 10
Реклама
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение jordan »

jordan писал(а): PORTD &= ~(1<<PD7);
12a: 5f 98 cbi 0x0b, 7 ; 11
DDRD |= (1<<PD7);
12c: 57 9a sbi 0x0a, 7 ; 10
Если так то тогда конечно это одно и тоже, просто меня сбило с толку куча логических операций в этом выражении :kill:
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение pyzhman »

Зри в корень. Всегда.
Docendo discimus
Аватара пользователя
jordan
Грызет канифоль
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Re: AVR Studio 4, WinAVR, GCC, Си + ASM +

Сообщение jordan »

Спасибо за помощь :kiss:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»