управление несколькими светодиодами

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: управление несколькими светодиодами

Сообщение WiseLord »

У меня в linux avr-gcc (с оптимизацией -Os) мой вариант получается на 2 байта короче (bin-файл прошивки). 76 байт против 78.
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: управление несколькими светодиодами

Сообщение ibiza11 »

интересно посмотреть, выкладывайте.
Ставим плюсы: )
Реклама
Braimik
Родился
Сообщения: 6
Зарегистрирован: Ср июл 02, 2014 05:01:16

Re: управление несколькими светодиодами

Сообщение Braimik »

Kavka писал(а):
Braimik писал(а):Kavka, мне нужно чтобы при нажатии на pd0 загорелся и горел светодиод на pb0 и т.д. до pd7 и pb7. Признаюсь в неопытности печатанья кода.
чтобы понять степень вашей "новичковости".

Уточню. Т.е. надо, чтобы светодиод горел пока удерживается соответствующая кнопка (при отпускании гаснет)?
В школе когда то Pascal был потом в универе C# ну и все самоучка будем так говорить по тихоньку с места сдвигаюсь.
нет нужно чтобы нажал на кнопку он загорелся а когда отпустил тоже горел пока еще раз не ножму на кнопку.
Braimik
Родился
Сообщения: 6
Зарегистрирован: Ср июл 02, 2014 05:01:16

Re: управление несколькими светодиодами

Сообщение Braimik »

ibiza11 писал(а):а лучше написать так:

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

void main(void){
   DDRD = 0;
   PORTD = 0xFF;
   DDRB = 0xFF;
   PORTB = 0;
   for(;;){
      PORTB = ~PIND;
   }
}
У меня все!


а чтобы светодиод потом горел. то есть нажал он горит и отпустил тоже горит. еще раз нажал он погас=) Всем Спасибо буду пробовать
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: управление несколькими светодиодами

Сообщение dr.doc »

В ассемблере:
in r16,PIN(светодиоды)
in r17,0b0000001 (1-инвертор, 0-повторитель)
eor r16,r17
out Port(светодиоды),r16
Данный алгоритм будет инвертировать состояние выхода по каждому выполнению. Остается написать действие для кнопки.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: управление несколькими светодиодами

Сообщение Kavka »

Хмм... оптимизаторы...
Why is assigning ports in a "chain" a bad idea?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: управление несколькими светодиодами

Сообщение WiseLord »

Kavka, спасибо, что ссылку подкинули.
А то точно помню, что читал про это где-то, а где - забыл. А это, действительно, в мануале на avr-libc.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: управление несколькими светодиодами

Сообщение ibiza11 »

Kavka, посмотрите пожалуйста на ассемблерный листинг, который генерирует IAR (приведен в моем посте). Нет там никакого ридбэка из предыдущего в выражении volatile регистра.
Ставим плюсы: )
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: управление несколькими светодиодами

Сообщение Kavka »

Это я видел. Срабатывает какая-то оптимизация.
Вот только если по стандарту допускается read-back, то код получается потенциально не портируемым, так как зависит от поведения конкретного компилятора. Что, отнюдь, не хорошо.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: управление несколькими светодиодами

Сообщение ibiza11 »

Интересно было бы посмотреть на листинг, генерируемый avr-gcc. я пользуюсь IAR, а gcc даже не установлен. У кого есть, прошу выложить сюда.
Ставим плюсы: )
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: управление несколькими светодиодами

Сообщение WiseLord »

Если интересно на сам asm-листинг глянуть, смотрите.

Правда, размер в обоих случаях получился одинаковый (78 байт), на данном уровне оптимизации (-Os, -mcall-prologies). Но точно помню, где-то он отличался.

Может быть, я где-то и ошибся, и разница (точно) есть в чём-то подобном:

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

PORTD |= (1<<PD1);
PORTD |= (1<<PD2);
против
PORTD |= ((1<<PD1) | (1<<PD2));
, а в случае последовательного присвоения разницы особой и не будет. Но всё равно, лучше не рисковать, и по отдельности присваивать.

Так-то код получается такой же, как и у Вас, разве что другие регистры используются.

P.S. Забавно раздутый код при отключенной оптимизации (-O0)
Ответить

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