управление несколькими светодиодами
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: управление несколькими светодиодами
У меня в linux avr-gcc (с оптимизацией -Os) мой вариант получается на 2 байта короче (bin-файл прошивки). 76 байт против 78.
- Реклама
Re: управление несколькими светодиодами
В школе когда то Pascal был потом в универе C# ну и все самоучка будем так говорить по тихоньку с места сдвигаюсь.Kavka писал(а):чтобы понять степень вашей "новичковости".Braimik писал(а):Kavka, мне нужно чтобы при нажатии на pd0 загорелся и горел светодиод на pb0 и т.д. до pd7 и pb7. Признаюсь в неопытности печатанья кода.
Уточню. Т.е. надо, чтобы светодиод горел пока удерживается соответствующая кнопка (при отпускании гаснет)?
нет нужно чтобы нажал на кнопку он загорелся а когда отпустил тоже горел пока еще раз не ножму на кнопку.
Re: управление несколькими светодиодами
ibiza11 писал(а):а лучше написать так:У меня все!Код: Выделить всё
void main(void){ DDRD = 0; PORTD = 0xFF; DDRB = 0xFF; PORTB = 0; for(;;){ PORTB = ~PIND; } }
а чтобы светодиод потом горел. то есть нажал он горит и отпустил тоже горит. еще раз нажал он погас=) Всем Спасибо буду пробовать
- dr.doc
- Это не хвост, это антенна
- Сообщения: 1368
- Зарегистрирован: Вс мар 28, 2010 12:52:22
- Откуда: Беларусь
Re: управление несколькими светодиодами
В ассемблере:
in r16,PIN(светодиоды)
in r17,0b0000001 (1-инвертор, 0-повторитель)
eor r16,r17
out Port(светодиоды),r16
Данный алгоритм будет инвертировать состояние выхода по каждому выполнению. Остается написать действие для кнопки.
in r16,PIN(светодиоды)
in r17,0b0000001 (1-инвертор, 0-повторитель)
eor r16,r17
out Port(светодиоды),r16
Данный алгоритм будет инвертировать состояние выхода по каждому выполнению. Остается написать действие для кнопки.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
- Реклама
Re: управление несколькими светодиодами
Хмм... оптимизаторы...
Why is assigning ports in a "chain" a bad idea?
Why is assigning ports in a "chain" a bad idea?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: управление несколькими светодиодами
Kavka, спасибо, что ссылку подкинули.
А то точно помню, что читал про это где-то, а где - забыл. А это, действительно, в мануале на avr-libc.
А то точно помню, что читал про это где-то, а где - забыл. А это, действительно, в мануале на avr-libc.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: управление несколькими светодиодами
Kavka, посмотрите пожалуйста на ассемблерный листинг, который генерирует IAR (приведен в моем посте). Нет там никакого ридбэка из предыдущего в выражении volatile регистра.
Ставим плюсы: )
Re: управление несколькими светодиодами
Это я видел. Срабатывает какая-то оптимизация.
Вот только если по стандарту допускается read-back, то код получается потенциально не портируемым, так как зависит от поведения конкретного компилятора. Что, отнюдь, не хорошо.
Вот только если по стандарту допускается read-back, то код получается потенциально не портируемым, так как зависит от поведения конкретного компилятора. Что, отнюдь, не хорошо.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: управление несколькими светодиодами
Интересно было бы посмотреть на листинг, генерируемый avr-gcc. я пользуюсь IAR, а gcc даже не установлен. У кого есть, прошу выложить сюда.
Ставим плюсы: )
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: управление несколькими светодиодами
Если интересно на сам asm-листинг глянуть, смотрите.
Правда, размер в обоих случаях получился одинаковый (78 байт), на данном уровне оптимизации (-Os, -mcall-prologies). Но точно помню, где-то он отличался.
Может быть, я где-то и ошибся, и разница (точно) есть в чём-то подобном:, а в случае последовательного присвоения разницы особой и не будет. Но всё равно, лучше не рисковать, и по отдельности присваивать.
Так-то код получается такой же, как и у Вас, разве что другие регистры используются.
P.S. Забавно раздутый код при отключенной оптимизации (-O0)
Правда, размер в обоих случаях получился одинаковый (78 байт), на данном уровне оптимизации (-Os, -mcall-prologies). Но точно помню, где-то он отличался.
Может быть, я где-то и ошибся, и разница (точно) есть в чём-то подобном:
Код: Выделить всё
PORTD |= (1<<PD1);
PORTD |= (1<<PD2);
против
PORTD |= ((1<<PD1) | (1<<PD2));Так-то код получается такой же, как и у Вас, разве что другие регистры используются.
P.S. Забавно раздутый код при отключенной оптимизации (-O0)


