Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс апр 09, 2023 19:46:55

Смотря что понимать под "командой". Можно макро команду написать и это будет действительно всего одна строка, типа log x))). Ну ведь красиво же!)

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

Вс апр 09, 2023 20:06:59

ага, создать из авр виртуальный процессор (что-то типа как Transmeta Crusoe), где log x будет настоящей ассемблерной, единичной машинной командой.

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

Вс апр 09, 2023 21:49:48

Martian, Мы такое сделали, правда на СТМ :)
Бейсиковская команда (точнее, функция) LOG(X) реально компилируется в 2 байта - байт команды и байт - номер временного регистра.
Но под капотом виртуальной машины честный флоатный логарифм на сях )))

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

Вс апр 09, 2023 22:45:52

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

Добавлено after 1 minute 28 seconds:
Just_Fluffy, это коммерческая разработка? или есть где посмотреть?

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

Вс апр 09, 2023 23:17:22

AQ29, ваш целочисленный логарифм на АБ/ассемблере тоже применим. Что б не изобретать велописеды на асме.
Но зочем вы говорите за свой асссемблерный код в теме про язык Си?

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

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

Пн апр 10, 2023 07:26:58

Но зочем вы говорите...

Это из серии "грабить корованы"?)

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

Пн апр 10, 2023 09:49:25

OKF, да нет, это из более древнего мема "зочем ви т'равите...."

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

Пн апр 10, 2023 09:56:39

Ссылки не знаю, можно тут на сторонние ресурсы постить или нет

хм... пункт 2.9 запрещает рекламу в любом виде, но, полагаю, вряд ли нас уличат в сговоре так долго и сложно подводить тему к ссылке на разработку )

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

Пн апр 10, 2023 10:29:37

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

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

Пн апр 10, 2023 20:44:01

OKF, да нет, это из более древнего мема "зочем ви т'равите...."

ОК, вижу что у нас разные весовые категории).

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

Вс июн 04, 2023 06:29:36

Добрый день. Попалась вот такая запись в операции установки бит.
Код:
 UCSR0C=(3<<UCSZ00);

Почему здесь тройка, и что она значит. Сколько ни смотрел разные руководства по битовым операциям, везде тут единица без исключений.
Компилируется и работает нормально.

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

Вс июн 04, 2023 06:59:20

Устанавливают 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

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

Вс июн 04, 2023 15:57:37

Добрый день. Попалась вот такая запись в операции установки бит.
Код:
 UCSR0C=(3<<UCSZ00);

Почему здесь тройка, и что она значит. Сколько ни смотрел разные руководства по битовым операциям, везде тут единица без исключений.
Компилируется и работает нормально.

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

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

Вс июн 04, 2023 18:07:53

а самые нормальные делают так:
Код:
...
#define USR_DataSize_8_b 0x03
...
UCSR0C |= USR_DataSize_8_b;

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

Вс июн 04, 2023 19:18:12

Тоже нормальные люди это те, кто также написали документацию 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);

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

Вс июн 04, 2023 19:55:47

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

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

Вс июн 04, 2023 22:39:30

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

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

Вс июн 04, 2023 22:47:23

Ну, тут субъективно становится. Лично я за удобочитаемость и установку только того, что устанавливается, то есть, либо в твой вариант добавлю |, либо так же оставлю, если цель сбросить остальные поля. Но смещать тройку названием поля размером один бит... это в любом случае как-то странно выглядит.

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

Пн июн 05, 2023 09:55:25

Лично я за удобочитаемость...
Стараюсь указывать все используемые биты, типа, REG = 1<<bit1 | 0<<bit0; и тогда явно видно какие биты в каком состоянии.

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

Пн июн 05, 2023 09:59:39

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