Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 18:24:34

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 390, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 14:05:32 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23909
Откуда: Московская область, Фрязино
Рейтинг сообщения: 1
Просто, так как я пользовался ассемблером исключительно из С, то упустил, что именно его загрузчик перемещает сегмент данных из флеша в оперативку.

Если я в коде на Си определю таблицу как const, то линкер ее прибъет гвоздями к флешу.
Нет никакого смысла в таблицах, если они будут отжирать дорогой и дефицитный RAM с 6 транзисторами на бит вместо дешевого флеша с 1 транзистором на бит.
В системе команд 8-битных (и не только) контроллеров отдельной фичей является доступ к флешу как к данным В РЕАЛЬНОМ ВРЕМЕНИ, а не с помощью создания копии в ОЗУ.
В современных чипах того же Микрочипа есть такое понятие, как PSV-доступ. Когда в гарвардской архитектуре пространство адресов флеша отображается в пространство адресов ОЗУ.
ЗЫ. И причем тут загрузчик? :dont_know:
Загрузчик не работает из исполняемого кода - у него совершенно другие функции. То, о чем вы говорите, называется стартапом. И если я определю таблицу как инициализированный массив в ОЗУ, тогда в стартапе произойдет загрузка в ОЗУ из таблицы расположенной непосредственно за программным кодом флеша.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 15:10:25 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
я сомневаюсь что был хоть один случай когда вместо программы размером 1КB приносили программу на 1GB и доказывали, что сама программа то 1KB, а все остальное - данные загружаемые с внешнего носителя )

Более того, такие решения я применяю постоянно. Например, прогнозирование выполняется в выходные за 36-40 часов, данные результата сохраняются, а остальной код, которому требуются результаты этого прогнозирования, используют эти данные в течении недели. И ни разу мне никто не сказал, что эти даже не гигабайтные, а стогигабайтные прогнозы, являются кодом тех модулей, которые этот прогноз использует.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 15:31:18 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Код:
clr R16
ldi R17, 9
dec R17
breq pc+5
lsl(lsr) R1
brcc pc-3
inc R16
rjmp pc-5
; ---
dec r16
breq(brne)...куда-нибудь
если только не ошибся)
проверку цикла пришлось впереди поставить :dont_know:


Последний раз редактировалось shonty Сб дек 07, 2024 15:55:05, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 15:45:06 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Если я в коде на Си определю таблицу как const, то линкер ее прибъет гвоздями к флешу.

Можете точно, до последних цифр в версии, указать используемый компилятор и линкер? У меня avr-gcc упорно копирует данные со спецификатором const в RAM. Для того, чтобы заставить его разместить их во флеше приходится явно указывать дополнительно спецификатор PROGMEM.

Нет никакого смысла в таблицах, если они будут отжирать дорогой и дефицитный RAM

В AVR есть, так как особенности системы команд приводят к снижению производительности при доступе к данным в флеше.
Для доступа к данным в флеш есть единственная команда LPM, гвоздями прибитая к адресу в r31:r30 и выполняемая за 3 такта.
Тогда как возможности LD куда шире, а выполняются они за 2 такта.
Так что, если для задачи RAM достаточно, а производительность очень важна, то лучше копировать все или часть константных данных в RAM при старте.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 15:51:33 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
shonty писал(а):
если только не ошибся)
нет, не ошибся, работает. Исключает где 1+ бит и 0 бит.

Добавлено after 39 seconds:
но про 0 бит не было установки куда сортировать :)

Добавлено after 1 minute 39 seconds:
20 байт :dont_know:
но пока рекорд))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 16:13:11 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 427
Рейтинг сообщения: 1
20 байт :dont_know:
но пока рекорд))

Код:
      cpi r0,2
      brlo end
      mov r1,r0
      dec r1
      and r0,r1
      inc r0
end:

Проверить негде, но должно работать. Если в байте установлен единичный бит, то в r0 должно вернуть 1.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 16:29:21 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Adrift писал(а):
Если в байте установлен единичный бит, то в r0 должно вернуть 1.
да, возвращает, проверил.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 16:44:48 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 427
Рейтинг сообщения: 0
я сомневаюсь что был хоть один случай когда вместо программы размером 1КB приносили программу на 1GB и доказывали, что сама программа то 1KB, а все остальное - данные загружаемые с внешнего носителя )

Более того, такие решения я применяю постоянно. Например, прогнозирование выполняется в выходные за 36-40 часов, данные результата сохраняются, а остальной код, которому требуются результаты этого прогнозирования, используют эти данные в течении недели. И ни разу мне никто не сказал, что эти даже не гигабайтные, а стогигабайтные прогнозы, являются кодом тех модулей, которые этот прогноз использует.

Есть у вас, допустим, функция std::sort(), она поставляется вместе с данными которые должна сортировать? Нет конечно, можно хоть пустой массив передать на сортировку, ей без разницы. А что если внутри std::sort() есть таблица которая используется для ускорения некоторых операций, можно пользоваться такой функцией без нее? Снова нет, эта таблица нужна чтобы программа в принципе могла работать и является неотъемлемой частью программы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 16:55:41 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 2
Это издержки ЯВУ видимо.. Не все конечно, но некоторые погружаются в такую беспробудную виртуализацию :facepalm: , что не воспринимают физическое существование объекта :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 18:34:17 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 96
Зарегистрирован: Вс окт 25, 2020 22:13:25
Сообщений: 303
Откуда: Смоленск
Рейтинг сообщения: 1
определить, что в байте единичный только 1 бит, все остальные в нуле

Если я правильно понимаю тз, то единичный бит может быть в любой позиции байта и надо понять, что он один?
Тогда так (проверяемый байт в r0, сохраняется)
Код:
       ldi r16, 1
m1: mov r1, r16
       eor r1, r0
       breq label_one_bit
       rol r16
       brcc m1
      ; здесь имеем не одну единицу в байте
      ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 18:54:19 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23909
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
У меня avr-gcc упорно копирует данные со спецификатором const в RAM. Для того, чтобы заставить его разместить их во флеше приходится явно указывать дополнительно спецификатор PROGMEM.

Это проблема конкретно gcc, который писался для фоннеймана, а не для гарварда.
Но на gcc свет клином не сошелся. XC8 и XC16 (а так же Кайл) по умолчанию размещают const во флеш.
В AVR есть, так как особенности системы команд приводят к снижению производительности при доступе к данным в флеше.
Для доступа к данным в флеш есть единственная команда LPM, гвоздями прибитая к адресу в r31:r30 и выполняемая за 3 такта.
Тогда как возможности LD куда шире, а выполняются они за 2 такта.
Так что, если для задачи RAM достаточно, а производительность очень важна, то лучше копировать все или часть константных данных в RAM при старте.

С этим трудно не согласиться. Однако в большинстве задач таблицы имеют значительный размер и не влазят в ОЗУ.
По крайней мере в моем чисто радиотехническом эмбедде. Это тригонометрические функции, оконные функции, таблицы линеаризации, таблицы обмена, таблицы шифрования и CRC. Я бы сказал, что таблицы у меня занимают минимум четверть хекса.


Последний раз редактировалось КРАМ Сб дек 07, 2024 21:31:20, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 21:30:17 
Встал на лапы

Зарегистрирован: Сб июл 30, 2011 21:00:24
Сообщений: 111
Рейтинг сообщения: 0
AQ29 писал(а):
вариант из 5 команд

Коротко конечно. Но с допущением, что входящее значение имеет только один единичный бит. Если больше или ноль, то зависли.

Почему программа зависнет?
Если байт не содержит один единичный бит, в конце 8 цикла команда LSL обнулит r20, бит Z в SREG установится в 1. Команда BRNE будет пропущена.
Ещё один плюс программы, по значению r20 можно узнать положение бита.
Если r20 = 0, то единичного бита нет, если, например, r20 = 4, то единичный бит находится во 2 разряде (отсчёт от нуля).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 21:36:36 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Это проблема конкретно gcc, который писался для фоннеймана, а не для гарварда.

Очень сомневаюсь, но об этом ниже.

XC8 и XC16 (а так же Кайл) по умолчанию размещают const во флеш.

Это очень похоже на нарушение стандарта.
Спецификатор const в стандарте относится только к своей области видимости и лишь запрещает модификацию переменной с этим спецификатором.
Но спецификатор const не должен влиять на область памяти, в которой эта переменная находится и на машинный код, который используется для доступа к этой переменной.
В одном модуле может выделяться память для переменной со спецификатором const (или даже const volatile), а в другом модуле - содержаться функция, модифицирующая эту переменную, как extern. Например, вычисляя какие-то калибровочные значения.
Получается, что если для каких то модулей глобальная переменная может модифицироваться, а для каких-то - нет, то указанные Вами компиляторы, в разрез стандарту, не позволяют это указать.

С этим трудно не согласится. Однако в большинстве задач...

В большинстве Ваших задач - возможно. А я, например, выбираю МК под задачу, а не наоборот. Если Вам мало 2К в ATMega328, то кто мешает взять ESP32-C3 с 400К, который сейчас стоит чуть ли не дешевле Arduino Nano?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 22:08:29 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23909
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
указанные Вами компиляторы, в разрез стандарту, не позволяют это указать.

Я в каком то месте сказал, что не позволяют? Я сказал, что делают это по дефолту. Я в курсе стандарта, если что. Однако контроллеры - это особая тема со своей спецификой.
В большинстве Ваших задач - возможно. А я, например, выбираю МК под задачу, а не наоборот.

Вы не поверите - я тоже. Только у нас с вами задачи разные.
Плюс к этому нужно сопоставлять не любые МК, а только те, которые вообще способны удовлетворять ТТХ целевого устройства.
Приведу пример.
Года два назад я разработал RF-EAS систему моно типа (есть альтернативная - свипирующая, а эта с импульсным возбуждением). Стандартное решение в этой системе по аналоговому фронтэнду - конвейерный АЦП 10...12 разрядов с рейтом от 40 мспс. Нужно этот поток втянуть в МК и обеспечить обработку в 9 частотных фильтрах и последующим корреляционным анализом.
Все производители ставят на входе FPGA и только потом МК или все делают на FPGA. Я обошелся одним 5 долларовым двухядерным dsPIC33CH512MP208.
В результате электроника изделия имеет себестоимость 70 долларов против 160 у самых дешевых китайцев и 250 у чехов.
Есть такое мнение, что ESP кратно не справится с задачей. :wink: Это контроллер совершенно для другого.
Сейчас в работе ридер HF RFID, где требуется, чтобы в МК был приличный АЦП с рейтом 5 мспс и более. Плюс ядро от 240 мипс и более. В работу пошел AT32F435. 250 рублей, если что... :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 07, 2024 22:45:45 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: -4
Медали: 1
Получил миской по аватаре (1)
То, что компилятор нарушает стандарт по-умолчанию - уже нарушение. Даже если его пинками можно заставить стандарт соблюдать.
А Ваши задачи - это всё же только Ваши задачи. И не надо распространять их на "большинство".
Последнее из субъективного опыта никак не может вытекать. Для таких утверждений нужна весьма широкая и репрезентативная выборка.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс дек 08, 2024 06:28:23 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
ПростоНуб писал(а):
У меня avr-gcc упорно копирует данные со спецификатором const в RAM.
Вы это как представляете физически? Она же энергозависимая :dont_know:

Добавлено after 18 minutes 50 seconds:
AVR GCC: секции памяти (что такое .text, .data, .bss, .noinit?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс дек 08, 2024 09:30:13 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23909
Откуда: Московская область, Фрязино
Рейтинг сообщения: -3
То, что компилятор нарушает стандарт по-умолчанию - уже нарушение. Даже если его пинками можно заставить стандарт соблюдать.

Это не ко мне. Это к Микрочипу и Кайлу. :tea:
Догадайтесь с одного раза что они вам скажут на вашу "критику". Особенно с учетом вашей квалификации в электронике и радиотехнике. :)
А Ваши задачи - это всё же только Ваши задачи. И не надо распространять их на "большинство".
Последнее из субъективного опыта никак не может вытекать.

Какое отношение "репрезентативность" имеет к обсуждаемым вопросам? Есть такое мнение, что вообще никакого.
Ну и себестоимость производства единицы изделия ни о чем не говорит, без указания его тиража и стоимости его разработки.

Для того, чтобы у вас были все данные для "все говорит о..." добавлю, что разработка длилась силами 1 (ОДНОГО) человека в течении 5 месяцев при нетто занятости именно этим проектом этого человека примерно 60%. Итого, чистого времени на весь проект 3 человеко-месяца. Из них на собственно написание кода - примерно четверть общих трудозатрат.
Тиражность следует из назначения изделия. Намекну - только один объект требует в среднем примерно 25 изделий. Объектов у только одной торговой сети примерно 500. Торговых сетей ... в общем вы поняли о чем я... :tea:
Вы это как представляете физически?

Ну это как раз просто. Делаются костыли для согласования здравого смысла с чуждым стандартом в виде копирования содержимого флеша в озу в стартапе. И занудные погромисты остаются довольны. :)))
Ведь const в стандарте это всего лишь самозапрет на модификацию - часть системы безопасности данных. Причем тут флеш?
Тем более, что и флеш может быть модифицирована. :wink: :tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс дек 08, 2024 09:36:05 
Сверлит текстолит когтями
Аватар пользователя

Карма: 1
Рейтинг сообщений: 23
Зарегистрирован: Чт авг 21, 2014 11:11:48
Сообщений: 1204
Откуда: краснодарский край
Рейтинг сообщения: 0
Надо дождаться, когда дребезг закончиться, тогда можно считывать положения кнопок.
Я использовал простой вариант – программа считывает порт с кнопками 3 раза с интервалом 30 миллисекунд в 3 регистра РОН, например, r20, r21 и r22. Если r21 не равно r20, то начинаю считывать сначала. Когда все 3 регистра равны, то дребезг закончился, это реальное состояние кнопок.

А можно сделать программный симулятор дребезжащей кнопки,и сравнивать с ним,а не с предыдущими двумя считываниями ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс дек 08, 2024 10:31:15 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23909
Откуда: Московская область, Фрязино
Рейтинг сообщения: 1
Я использовал простой вариант – программа считывает порт с кнопками 3 раза с интервалом 30 миллисекунд в 3 регистра РОН...

А кнопка может дребезжать без нажатия на нее?
Какой смысл ждать бездребезгового состояния на интервале опроса большем, чем время дребезга?
Попадание на дребезг ничем не грозит. Просто читаете состояние.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс дек 08, 2024 10:44:49 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 427
Рейтинг сообщения: 0
Но спецификатор const не должен влиять на область памяти, в которой эта переменная находится и на машинный код, который используется для доступа к этой переменной.
В одном модуле может выделяться память для переменной со спецификатором const (или даже const volatile), а в другом модуле - содержаться функция, модифицирующая эту переменную, как extern. Например, вычисляя какие-то калибровочные значения.
Получается, что если для каких то модулей глобальная переменная может модифицироваться, а для каких-то - нет, то указанные Вами компиляторы, в разрез стандарту, не позволяют это указать.

Вы же сами выше написали, что модификатор const в стандарте запрещает модификацию переменных, следовательно не должно быть никаких функций в других модулях этой модификацией занимающихся, разве что вы сами собираетесь нарушать стандарты. Можно, конечно, взять указатель, привести его к неконстантному и записать новое значение, но с непредсказуемым результатом. В VS, например, я в таком случае ловлю эксепшен. Вариантов всего два: или инициализируем const переменную константным значением, или вычисляемым в рантайме.
Код:
int calcVar() { return GPIOA->IDR; }

const int gvar  = 10;
const int gvar2 = calcVar();

Если посмотреть на адреса, то gvar оказалась во флеше, а gvar2 - в RAM. Если calcVar() будет в другом модуле и компилятор не сможет понять свернется она до константы или нет, то переменная пойдет в RAM.

Добавлено after 9 minutes 5 seconds:
Это издержки ЯВУ видимо.. Не все конечно, но некоторые погружаются в такую беспробудную виртуализацию :facepalm: , что не воспринимают физическое существование объекта :)

У меня есть более простая теория, но по этическим причинам ее лучше не озвучивать )


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 390, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y