Ну, если бы у бабушки был...Аlex писал(а):Ну если макросы sbi и cbi определены, то почему бы этому не работать ?
С другой стороны согласен, а с третьей: если CHECKBIT(x,y) определили, то и пару строчек о sbi() и cbi() можно было черкнуть.
Ну, если бы у бабушки был...Аlex писал(а):Ну если макросы sbi и cbi определены, то почему бы этому не работать ?
Ну, если бабушке всё рассказать и всему научить, то ей и дедушка не понадобитьсяIM1 писал(а):пару строчек о sbi() и cbi() можно было черкнуть.
Код: Выделить всё
/**
\ingroup deprecated_items
\def sbi(port, bit)
\deprecated
Set \c bit in IO port \c port.
*/
#define sbi(port, bit) (port) |= (1 << (bit))
/**
\ingroup deprecated_items
\def cbi(port, bit)
\deprecated
Clear \c bit in IO port \c port.
*/
#define cbi(port, bit) (port) &= ~(1 << (bit))А Atmel Studio посылает очень далеко с такими конструкциями.uni писал(а):Т.е. пользоваться ими не рекомендуется, но они стандартные, т.к. определены в библиотеке. Вообще, следует просматривать иногда эти заголовочники, чтобы не изобретать велосипедов.
Код: Выделить всё
#include <compat/deprecated.h>Готовить умею, просто не люблю. Посмотрел папку, да уж, круто, аж 2005г. макросы! Ради несчастных sbi - cbi...uni писал(а):Может вы просто не умеете её готовить?
А что за стандарт такой? PROGMEM и работа с флеш там тоже есть, а с EEPROM? Если есть, то и sbi() и cbi() точно совершенно также. Тут вам не ПК. Если когда-нить решитесь озаботиться изучением ассемблера AVR, то обратите внимание на инструкции SBI и CBI и подумайте почему макросы так названы. Люди, которые изучали AVR с низу, не будут иметь проблем с пониманием этих команд и макросов.IM1 писал(а):Готовить умею, просто не люблю. Посмотрел папку, да уж, круто, аж 2005г. макросы! Ради несчастных sbi - cbi...uni писал(а):Может вы просто не умеете её готовить?
Уже писал, что дело вкуса и привычки. В стандарте нет, значит нет, а макрос можно любой склепать.
Вот вот. где то вдалеке я это понимаю, вот как бы это по граммотному сделать.a_skr писал(а):Наверное, нужна длина строки (см. strlen), а не размер указателя.
Вот Вы неугомонный, я же сказал: дело вкуса и делайте, что хотите. Почитайте классику что ли, например K&R.uni писал(а):А что за стандарт такой?
Здорово Вы меня приложили. У меня тоже была мысль, что в Вас бродит ностальгия по ассемблеру, раз так рьяно используете названия его команд. Но постеснялся написать, чтобы не обидеть.uni писал(а):Если когда-нить решитесь озаботиться изучением ассемблера AVR, то обратите внимание на инструкции SBI и CBI и подумайте почему макросы так названы.
Я дал на него исчерпывающий ответ, а вы ДВА раза не смогли понять как заставить его работать!kapitaneo писал(а):Помогите разобраться
Как присвоить значение с ноги одного порта на ногу другого?
В Codevisione все просто PORTC.1=PINB.2;
А как в WINAVre
Я уже голову сломал, гуглин нифига.
Спасибо, заранее.
IM1 писал(а):И, что, прям ЭТО работает в GCC?uni писал(а):Код: Выделить всё
#define CHECKBIT(x,y) ((x) & (1<<(y))) CHECKBIT( PINB, 2 ) ? sbi( PORTC, 1 ) : cbi( PORTC, 1 );
Так что кого вы тут учите? Садитесь за букварь и изучайте инструментальные средства, которыми пользуетесь, угомонитель вы наш.IM1 писал(а):А Atmel Studio посылает очень далеко с такими конструкциями.uni писал(а):Т.е. пользоваться ими не рекомендуется, но они стандартные, т.к. определены в библиотеке. Вообще, следует просматривать иногда эти заголовочники, чтобы не изобретать велосипедов.
sizeof() - это не совсем функция, скорее это оператор типа +, -, * и т.д. только унарный, т.е. с одним операндом. Так вот, этот оператор возвращает размер типа в байтах. Если тип - указатель, то выражение sizeof(указатель) можно считать константой, т.к. компилятору это известно на момент компиляции. Если операнд - массив, то выражение sizeof(массив) - вернёт размер массива в байтах, короче говоря, sizeof() используется, когда нужно указать размер объекта в байтах, и, если это известно на момент компиляции программы.TICLIR писал(а):Вот вот. где то вдалеке я это понимаю, вот как бы это по граммотному сделать.a_skr писал(а):Наверное, нужна длина строки (см. strlen), а не размер указателя.
А где смотреть?
Все обидеть норовите?uni писал(а):Так что кого вы тут учите? Садитесь за букварь и изучайте инструментальные средства, которыми пользуетесь, угомонитель вы наш.
Не надо нести чушь на пустом месте, - есть правила, есть стандарты. Например, Вы же не ездите по левой стороне и не ходите голым по улице?Аlex писал(а):А так, согласен, новичка эти слова могут ввести в ступор. Можно было и описать их в примере.
Код: Выделить всё
00000034 <main>:
#include <avr/io.h>
int main(void)
{
while(!(PINA&0x10));
34: cc 9b sbis 0x19, 4 ; 25
36: fe cf rjmp .-4 ; 0x34 <main>
}
38: 80 e0 ldi r24, 0x00 ; 0
3a: 90 e0 ldi r25, 0x00 ; 0
3c: 08 95 ret
Спасибо, а если вот такa_skr писал(а):Не игнорирует: