Нескольно простых вопросов о программировании AVR на Си.

Обсуждаем контроллеры компании Atmel.
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение OKF »

Смотря что понимать под "командой". Можно макро команду написать и это будет действительно всего одна строка, типа log x))). Ну ведь красиво же!)
Реклама
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

ага, создать из авр виртуальный процессор (что-то типа как Transmeta Crusoe), где log x будет настоящей ассемблерной, единичной машинной командой.
Реклама
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Just_Fluffy »

Martian, Мы такое сделали, правда на СТМ :)
Бейсиковская команда (точнее, функция) LOG(X) реально компилируется в 2 байта - байт команды и байт - номер временного регистра.
Но под капотом виртуальной машины честный флоатный логарифм на сях )))
Белая и Пушистая
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

ну вот и AQ29 такое же сделал, всё честно :)

Добавлено after 1 minute 28 seconds:
Just_Fluffy, это коммерческая разработка? или есть где посмотреть?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Just_Fluffy »

AQ29, ваш целочисленный логарифм на АБ/ассемблере тоже применим. Что б не изобретать велописеды на асме.
Но зочем вы говорите за свой асссемблерный код в теме про язык Си?
Martian писал(а):или есть где посмотреть?
Да какое там коммерческая....
GoldenAndy для себя задумал сделать мелкую консольку с несколькими аркадными игрульками... Типа тетриса, зоникса, питончика и т.д.
А я с ним заобщалась по поводу его тестера аккумуляторов... Слово за слово , в телеге разговорились.
И родилась мысль (с моей подачи) - не зашивать игры в МК, а сделать что то типа виртуальной машинки , в которую будут компилиться программы на ЯВУ. Выбор пал на диалект бейсика.
Сделали вдвоем. Задачка была интересная. Я там больше алгоритмами участвовала. В частности, работа с кучей и уборка мусора - один из моих алгоритмов там. Питона я под готовое изделие написала...
Ссылки не знаю, можно тут на сторонние ресурсы постить или нет, но подпись у Энди ведет в его блог - там можно почитать.

Белая и Пушистая
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение OKF »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4398588#p4398588"]Но зочем вы говорите...[/uquote]
Это из серии "грабить корованы"?)
Реклама
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Just_Fluffy »

OKF, да нет, это из более древнего мема "зочем ви т'равите...."
Белая и Пушистая
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4398588#p4398588"]Ссылки не знаю, можно тут на сторонние ресурсы постить или нет[/uquote]
хм... пункт 2.9 запрещает рекламу в любом виде, но, полагаю, вряд ли нас уличат в сговоре так долго и сложно подводить тему к ссылке на разработку )
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Just_Fluffy »

Martian писал(а):но, полагаю, вряд ли нас уличат в сговоре так долго и сложно подводить тему к ссылке на разработку
Ну ок.
Тогда вот. Смотреть записи снизу вверх.
Белая и Пушистая
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение OKF »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4398670#p4398670"]OKF, да нет, это из более древнего мема "зочем ви т'равите...."[/uquote]
ОК, вижу что у нас разные весовые категории).
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Shuspano »

Добрый день. Попалась вот такая запись в операции установки бит.

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

 UCSR0C=(3<<UCSZ00); 
Почему здесь тройка, и что она значит. Сколько ни смотрел разные руководства по битовым операциям, везде тут единица без исключений.
Компилируется и работает нормально.
veso74
Поставщик валерьянки для Кота
Сообщения: 1906
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение veso74 »

Устанавливают 2 бита сразу.
Замените частях, в какой системе счисления хотите, напр. в двоичном.
3 -> 0b00000011
UCSZ00 (atmega328?, стр. 193) -> 1

UCSR0C = (3 << UCSZ00);
UCSR0C = (0b00000011 << 1);
UCSR0C = 0b00000110;

Смотрим документацию (стр. 193, 194):
The UCSZn1:0 bits combined with the UCSZn2 bit in UCSRnB sets the number of data bits (Character SiZe) in a frame the Receiver and Transmitter use.
(UCSZn2 = 0?), UCSZn1 = 1, UCSZn0 = 1 -> Character Size: 8-bit
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

[uquote="Shuspano",url="/forum/viewtopic.php?p=4425543#p4425543"]Добрый день. Попалась вот такая запись в операции установки бит.

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

 UCSR0C=(3<<UCSZ00); 
Почему здесь тройка, и что она значит. Сколько ни смотрел разные руководства по битовым операциям, везде тут единица без исключений.
Компилируется и работает нормально.[/uquote]
нормальные люди делают так:

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

UCSR0C=_BV(UСSZ00) | _BV(UCSZ01);
или так (что то же самое, но длиннее):

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

UCSR0C=(1<<UСSZ00) | (1<<UCSZ01);
, а ненормальные двигают сразу 2 бита в позицию UCSZ00, как у вас
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

а самые нормальные делают так:

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

...
#define USR_DataSize_8_b 0x03
...
UCSR0C |= USR_DataSize_8_b;
veso74
Поставщик валерьянки для Кота
Сообщения: 1906
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение veso74 »

Тоже нормальные люди это те, кто также написали документацию ATmega48A/PA/88A/PA/168A/PA/328/P :).

стр. 185, Assembly Code Example:

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

USART_Init:
; Set baud rate
out UBRRnH, r17
out UBRRnL, r16
; Enable receiver and transmitter
ldi r16, (1<<RXENn)|(1<<TXENn)
out UCSRnB,r16
; Set frame format: 8data, 2stop bit
ldi r16, (1<<USBSn)|(3<<UCSZn0)
out UCSRnC,r16
ret
стр. 185, C Code Example:

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

Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

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

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

Бритва Оккама... Если, кроме нужных битов, в регистре не должно ничего быть, то...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

Ну, тут субъективно становится. Лично я за удобочитаемость и установку только того, что устанавливается, то есть, либо в твой вариант добавлю |, либо так же оставлю, если цель сбросить остальные поля. Но смещать тройку названием поля размером один бит... это в любом случае как-то странно выглядит.
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение OKF »

[uquote="Martian",url="/forum/viewtopic.php?p=4425966#p4425966"]Лично я за удобочитаемость...[/uquote] Стараюсь указывать все используемые биты, типа, REG = 1<<bit1 | 0<<bit0; и тогда явно видно какие биты в каком состоянии.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Martian »

тоже стараюсь все, но когда не лень, даю им нормальные названия, чтобы в итоге получалось UART = Speed9600 | Bit8 | WithParity. Но в последнее время лень, и тогда вариант ARV
Ответить

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