AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Re: AVR studio в вопросах и ответах

Сообщение ozonn »

pyzhman писал(а):Такая конструкция не допустима и в CV. Допустима

А для AVRS катит

PORTB1 тоже "катит". Это константа и она = 1. Нах ему ему менять с 1 на 1 понятно. Он хочет записать в 1-й разряд порта В единицу, тогда:

PORTB = 2;

или

PORTB |= (1 << PORTB1);
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

ozonn писал(а):записать в 1-й разряд порта В единицу, тогда:

PORTB = 2;

А как компилятор поймет, что в данный момент идет речь о первом бите порта?? Что-то я не понимаю :shock:
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Re: AVR studio в вопросах и ответах

Сообщение ozonn »

Алексей bird писал(а):
ozonn писал(а):записать в 1-й разряд порта В единицу, тогда:

PORTB = 2;

А как компилятор поймет, что в данный момент идет речь о первом бите порта?? Что-то я не понимаю :shock:

0b00000010 = 2
так понятно?
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

ozonn писал(а):так понятно?

Хорошо, с PORTB мы разобрались, а что тогда за константа PORTB1? Где и как она используется?
Блин, Баском попроще управляет ногами, написал PORTB.1 = 1, включил пин 1 на порту B. А у Си какие сложности(возможно у меня, но с Баскомом я быстрее разобрался).
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Re: AVR studio в вопросах и ответах

Сообщение ozonn »

Алексей bird писал(а):
ozonn писал(а):так понятно?

Хорошо, с PORTB мы разобрались, а что тогда за константа PORTB1? Где и как она используется?
Блин, Баском попроще управляет ногами, написал PORTB.1 = 1, включил пин 1 на порту B. А у Си какие сложности(возможно у меня, но с Баскомом я быстрее разобрался).


#define PORTB1 1

применяется для удобства чтения написанных программ

PORTB |= (1 << PORTB1);

идентично

PORTB |= (1 << 1);

но, по неизвестным мне причинам, первое считается более удобным :)

лично я не вижу никакой простоты в PORTB.1. Поскольку для этого надо объявит структуру PORTB с восемью полями. И где же тут простота? :shock:
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

ozonn писал(а):лично я не вижу никакой простоты в PORTB.1. Поскольку для этого надо объявит структуру PORTB с восемью полями. И где же тут простота? :shock:


В Баскоме уже всё объявлено, даже не объявлено, а это является частью синтакса местного бейсика. А ещё в Баскоме есть такая удобная штука как алиасы, т.е. можно в начале программы объявить какие псевдонимы к каким пинам привязаны и управлять пинами через псевдонимы, т.е. в случае изменения назначений ног, меняем псевдонимы в начале программы, а не перелопачиваем весь текст программы. В Си я что-то не нашел похожей штуки, есть такое? Алиасы это конечно не только про пины в Баскоме, но сейчас я про них.
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Re: AVR studio в вопросах и ответах

Сообщение ozonn »

Алексей bird писал(а):
ozonn писал(а):лично я не вижу никакой простоты в PORTB.1. Поскольку для этого надо объявит структуру PORTB с восемью полями. И где же тут простота? :shock:


В Баскоме уже всё объявлено, даже не объявлено, а это является частью синтакса местного бейсика. А ещё в Баскоме есть такая удобная штука как алиасы, т.е. можно в начале программы объявить какие псевдонимы к каким пинам привязаны и управлять пинами через псевдонимы, т.е. в случае изменения назначений ног, меняем псевдонимы в начале программы, а не перелопачиваем весь текст программы. В Си я что-то не нашел похожей штуки, есть такое? Алиасы это конечно не только про пины в Баскоме, но сейчас я про них.

есть. Например:

#define AAAA 12

объявив один раз константу с определенным значением и, впоследствии, изменив ее значение, препроцессор сам заменит значение константы во всех местах программы, где она встречается
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: AVR studio в вопросах и ответах

Сообщение COKPOWEHEU »

Обе конструкции - и проверка пина, и изменение порта - сделаны некрасиво. Для проверки и изменения отдельного бита используются следующие конструкции

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

if( PINx & (1<<y) ){...}
if(! (PINx & (1<<y)) ){...}
PORTx |= (1<<y);
PORTx &=~(1<<y);
Рекомендую помедитировать над этими конструкциями, составить таблицы истинности до полного понимания как они работают.
Еще один момент: использовать конструкции вроде if( (PINA & (1<<0)) == 1 ) не стоит, это потенциальная ошибка. Если разберетесь с таблицами истинности поймете почему.
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

COKPOWEHEU писал(а):Обе конструкции - и проверка пина, и изменение порта - сделаны некрасиво. Для проверки и изменения отдельного бита используются следующие конструкции

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

if( PINx & (1<<y) ){...}
if(! (PINx & (1<<y)) ){...}
PORTx |= (1<<y);
PORTx &=~(1<<y);
Рекомендую помедитировать над этими конструкциями, составить таблицы истинности до полного понимания как они работают.
Еще один момент: использовать конструкции вроде if( (PINA & (1<<0)) == 1 ) не стоит, это потенциальная ошибка. Если разберетесь с таблицами истинности поймете почему.

Помедитировал))) Пришел вот к такому коду:

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

if (~PIND & (1<<PIND5)) PORTB ^= (1<<PORTB5);

это единственная работа которую делает МК. Т.е. при лог.0 на ноге 5 порта D, переключать ногу 5 порта B. Вроде код простой, в симуляторе ведет себя как надо, но в реальном МК, реагирует не сразу. Ведь если исходить из кода, при лог.0 на ноге B5, МК должен постоянно дёргать ногой, а он не дергает не постоянно, а только в момент когда на ноге появляется лог.1, да и с задержкой какой-то, т.е. приходится кнопкой ловить момент что ли, когда исполнение программы находится в нужном месте. Я понимаю, что этот опрос кнопки бестолковый(в плане нет компенсации дребезга), я только пытаюсь понять как всё правильно управлять ногами, чтобы программа делала то, что я запланировал.
Или все же ошибся я, плохо медитировал :(
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: AVR studio в вопросах и ответах

Сообщение COKPOWEHEU »

Я бы все-таки инвертировал результат логической операции, а не входное значение:

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

if( !(PIND & (1<<5)) ){...}
а не
if( (~PIND) & (1<<5) ){...}
хотя, компилятор, скорее всего, поймет обе конструкции правильно - sbis PIND,5
Я понимаю, что этот опрос кнопки бестолковый
Не видя кода, могу предположить только что слишком редко вызываете опрос кнопки. На практике удобно делать это раз в 50-500 мс.
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

COKPOWEHEU писал(а):
Я понимаю, что этот опрос кнопки бестолковый
Не видя кода, могу предположить только что слишком редко вызываете опрос кнопки. На практике удобно делать это раз в 50-500 мс.

в начале дефайны, потом вот эта строка и всё, т.е. в функции main только вот эта строка и настройка портов
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: AVR studio в вопросах и ответах

Сообщение COKPOWEHEU »

Даже бесконечного цикла нет? Что же программа должна делать после выполнения этой строчки, по-вашему.
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

COKPOWEHEU писал(а):Даже бесконечного цикла нет? Что же программа должна делать после выполнения этой строчки, по-вашему.

а разве бывают программы без бесконечного цикла??? поэтому и считаю, что это есть в каждой программе по умолчанию, без дополнительного уведомления :facepalm:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

Алексей bird писал(а):а разве бывают программы без бесконечного цикла???
разумеется, бывают!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: AVR studio в вопросах и ответах

Сообщение COKPOWEHEU »

Все что угодно бывает, в том числе функции, не возвращающие ничего (даже void).
Поэтому покажите лучше свой код целиком. Разумеется, нормально оформленный, с отступами, комментариями, форматированием и под спойлером.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

COKPOWEHEU писал(а):Все что угодно бывает
даже полное отсутствие здравого смысла, в т.ч. и в стандартах :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Алексей bird
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Re: AVR studio в вопросах и ответах

Сообщение Алексей bird »

COKPOWEHEU писал(а):Все что угодно бывает, в том числе функции, не возвращающие ничего (даже void).
Поэтому покажите лучше свой код целиком. Разумеется, нормально оформленный, с отступами, комментариями, форматированием и под спойлером.

дефайны и прочее вне функции main данном случае имеют значение, т.к. там кода нет, ну не считать же за код #include <avr/io.h> или return 0;. Не, я хоть в Си и слаб пока, но опыт то программирования есть, я же говорю, другого значимого кода там нет. Ну да ладно, с тем вопросом разобрался я :)

Теперь вопрос такой: как в С, а конкретно в АВРСтудии7 сделать конструкции типа:
Если (условие1) или (условие2) или (условие3) или (...) то (сделать тото)
Если (условие1) и (условие2) и (условие3) и (...) то (сделать тото)
такое возможно?? В книге, которую я читаю, если обычное ветвление if-else, а вот если несколько условий я не понял как это можно оформить. Спасибо!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение Аlex »

Оператор "||", т.е. логическое ИЛИ.
Не забывайте каждое условие обрамлять в скобки, во избежании нарваться на непонятки с приоритетами. Да и читабельность кода при этом улучшается.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: AVR studio в вопросах и ответах

Сообщение Jack_A »

COKPOWEHEU писал(а): в том числе функции, не возвращающие ничего (даже void).

Интересно, что же она возвращает в случае void ? Я всегда считал, что ничего.
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

Jack_A писал(а):что же она возвращает в случае void ? Я всегда считал, что ничего
ой, вот только не надо снова... если функция возвращает еще больше "ничего", чем просто void, это так и есть - лучше согласитесь, что бывают такие вот суперничегоневозвращающие функции, и все - иначе COKPOWEHEU выкушает все мозги у вас и у меня (я и так еще от прошлого раза не восстановился полностью).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»