Если Arduino — это детская площадка, то STM32 — уже промышленная стройка
Ардуино - это прежде всего стандартизированный и упрощеный способ написания ПО. Поэтому, учитывая наличие библиотек STM32 для среды Arduino и возможность программировать на низком уровне в самой среде Ardunio - фраза о "детской площадке" и "стройке" звучит странно.
Я уже тут говорил - 5-й режим, @-(Rn), вообще ни разу не видел вживую, кроме шуточек, а 3-й, @(Rn)+, если не считать применение к регистру PC - в очень редких случаях. И такого копирования там не было.
@(Rn)+- можно достать данные с адреса в стеке.
А можно использовать на поиска по массиву ссылок на записи переменной длины (строки), где вначале идет либо длина, либо контрольная сумма, либо тег. @-(Rn) тогда тоже будет рабочим при поиске с конца массива.
Сложение я ещё как-то могу понять, но без переноса - смысла мало, а про перенос мы уже обсуждали, без двухаргументной ADC больно
Операции с 32-битными и тем более большими числами не всегда нужны.
** - это не опечатка и это не копирование строк это копирование данных по массивам указателей. Немного специфичная операция, однако реализуется в одну команду, не имея жесткой привязки к конкретным РОН: mov @(R1)+,@(R2)+
Еще по командам MOVS и другим специализированным в X86: как там у них с переворотом массивов, сложением массивов, форммированием массивов с чередованием данных из нескольких массивов.
Да и парметры в подпрограммы через SI\DI передавать обычно не принято, чтобы сразу их там для строковых операций использовать.
Про безопасность: я не говорил, что автономный осцилл не нужен. Я имел виду что мультик лучше отдельный (из явных плюсов - его часто перезаряжать не надо, в отличии от автономных осциллов).
А по DT-830 . Я этим показометрам перестал доверять с тех пор, как несколько раз столкнулся с их сильной зависимостью замеров, от заряда батарейки.
Кстати, я хорошо помню сгоревшие дюроны от АМД в начале двухтысячных. Кажется, современные процессоры надежнее.
Там вроде была проблема только в требовании корректной установки системы охлаждения.
А вот с кучей сдохших южников у Intel из-за USB - там реально было ненадежно. Потом стало надежнее, но вот только один из способов этой надежности раздражает: отваливание USB портов до перезагрузки системы при каждом "чихе" на этих портах.
Стиль x86 дал возможность делать и короткие вычисления на двойных словах, и длинные без ограничения и извращений, одним и тем же средством, за линейное время.
Можно было и догадаться, что раз речь шла о наращивании разрядности чисел, то "adc b1, adc b2" - это каскадное добавлнение бита переноса.
[b2:47..32][b1:31..16][b0:15..0]
Вот именно, никаких регистров не хватит.
В любых процессорах\микроконтроллерах при наращивании разрядности будет в итоге абсолютно также (не учитывая всякие арифметические раширители вроде сопроцессоров, с отдельными наборами регистров).
O(N^2) для сложения - это таки диверсия
Если не используется кучу вычислений с очень большими числами - никакой диверсии нет. А на практике для большинства целочисленной арифметики в реальных программах за глаза хватает и 32-бит.
Ну вот я про ручной сбор флагов переноса писал здесь, код на C и ссылка на код для MIPS. Что мешало сделать двухаргументную ADC, пусть даже только на регистрах?
Этого я не понял. Как на ней можно экономить и что это даст, например, для флага carry?
Про Carry - при MOV он не менялся. А вот установку флага Z в MOV можно использовать для выхода из цикла копирования строк.
Кто его сбрасывал, вы о чём?
Я не полностью процитировал:
Одноадресные ADC, SBC давали возможность строить арифметику двойной длины, но не многократной. Для многократной приходилось костылить с ручным сбором флагов переноса.
И это уже само по себе существенно, потому что если он нужен, маску вычислять достаточно гиморно. Насколько я знаю, легче получить знаковый сдвиг из беззнакового, чем наоборот. Ну а при пошаговом сдвиге - особенно.
Дле первого сдвига - сброс бита переноса и циклический сдвиг (через бит переноса) вправо. Продолжение просто арифметическими сдвигами.
Изначально я рассматривал esp с поднятой точкой доступа Wi-Fi и красивым веб-интерфейсом управления. Но мне не очень хотелось каждый раз подключаться к точке доступа, да и в целом это мне показалось менее удобным и менее универсальным.Поэтому я решил рассмотреть вариант с arduino и управлением по UART. Этот вариант позволяет управлять и по Bluetooth, и по проводу. В качестве пульта можно использовать кучу уже существующих приложений, а если потребуется, легко написать свое или даже смастерить кнопочный пульт.
Esp32 имеет встроенную поддержку Bluetooth. А если OTA через WiFi прилепить, то можно обновлять ПО не снимая табло.
Для установки портов latchPin, clockPin и dataPin в значения high и low я написал соответствующие функции (на Arduino я выбрал порты 9, 10 и 11).
Почему не апаратный SPI?
модуль часов DS1302, мягко говоря, не очень точный и сильно убегает даже за день
В обычных(начиная с гибридных, я так цеплялся к Beholder-T8) тв-тюнерах компонентные входы тоже встречались, включая поддержку RGB захвата.
С нашими зимами - точно не уличная.
При этом он (Cmi8738) пережил многих более качественных конкурентов и очень похоже, что был взят за основу в ширпотребном USB варианте (CM108)
Ардуино - это прежде всего стандартизированный и упрощеный способ написания ПО. Поэтому, учитывая наличие библиотек STM32 для среды Arduino и возможность программировать на низком уровне в самой среде Ardunio - фраза о "детской площадке" и "стройке" звучит странно.
Может лучше приспособить для этого модуль RMT в ESP32? По описанию вроде подходит.
Система команд MSP430 сделана по схожей с PDP-11 схеме.
Причина в устранении конкурентов E-Ink: Sipix и Flex были вполне серийными, пока технологии не были выкуплены E-Ink и не "закопаны поглубже".
@(Rn)+
- можно достать данные с адреса в стеке.А можно использовать на поиска по массиву ссылок на записи переменной длины (строки), где вначале идет либо длина, либо контрольная сумма, либо тег.
@-(Rn) тогда тоже будет рабочим при поиске с конца массива.
Операции с 32-битными и тем более большими числами не всегда нужны.
** - это не опечатка и это не копирование строк это копирование данных по массивам указателей. Немного специфичная операция, однако реализуется в одну команду, не имея жесткой привязки к конкретным РОН: mov @(R1)+,@(R2)+
Еще по командам MOVS и другим специализированным в X86: как там у них с переворотом массивов, сложением массивов, форммированием массивов с чередованием данных из нескольких массивов.
Да и парметры в подпрограммы через SI\DI передавать обычно не принято, чтобы сразу их там для строковых операций использовать.
А вот такое? :)
**a++ = **b++
Про безопасность: я не говорил, что автономный осцилл не нужен. Я имел виду что мультик лучше отдельный (из явных плюсов - его часто перезаряжать не надо, в отличии от автономных осциллов).
А по DT-830 . Я этим показометрам перестал доверять с тех пор, как несколько раз столкнулся с их сильной зависимостью замеров, от заряда батарейки.
На практике раздельно удобнее.
Там вроде была проблема только в требовании корректной установки системы охлаждения.
А вот с кучей сдохших южников у Intel из-за USB - там реально было ненадежно. Потом стало надежнее, но вот только один из способов этой надежности раздражает: отваливание USB портов до перезагрузки системы при каждом "чихе" на этих портах.
Там других костылей хватает.
Можно было и догадаться, что раз речь шла о наращивании разрядности чисел, то "
adc b1
,adc b2" - это каскадное добавлнение бита переноса.
[b2:47..32][b1:31..16][b0:15..0]
В любых процессорах\микроконтроллерах при наращивании разрядности будет в итоге абсолютно также (не учитывая всякие арифметические раширители вроде сопроцессоров, с отдельными наборами регистров).
Если не используется кучу вычислений с очень большими числами - никакой диверсии нет. А на практике для большинства целочисленной арифметики в реальных программах за глаза хватает и 32-бит.
Всмысле порча аргумента? Стандартное двуоперандное сложение (или другая операция), где результат в одном из входных операндов. Также и в x86.
Если не хочется портить исходный операнд в памяти, то он копируется в регистры (второй можно, если не хватает регистров, брать из памяти).
Не коротко, но однооборазно - с ростом разрядностей просто добавляются ADC в арифметической прогрессии.
А что будет со студентами, которые напишут "змейку" без классов?
Про Carry - при MOV он не менялся. А вот установку флага Z в MOV можно использовать для выхода из цикла копирования строк.
Я не полностью процитировал:
Дле первого сдвига - сброс бита переноса и циклический сдвиг (через бит переноса) вправо. Продолжение просто арифметическими сдвигами.
Esp32 имеет встроенную поддержку Bluetooth. А если OTA через WiFi прилепить, то можно обновлять ПО не снимая табло.
Почему не апаратный SPI?
DS3231 поточнее.