Меня вот удивляет одна вещь, соревнования по скорости сортировки максимально оторваны от реальности, и всем на это глубоко пофиг. Сортировка одного массива — это почти академическая задача. Она требуется всего пару раз в жизни…
В реальности гораздо чаще нужно сортировать многомерный массив — результат сканирования таблиц, или любого большого количества данных хоть в какой-то структуре хранения. Массив в виде адресов, индексов, числовых и текстовых значений… То-есть изначально разношорстный комок данных.
Для этого есть готовые алгоритмы сортировки, но видимо они слишком сложны для рассмотрения.
В этом нет практического смысла даже для теоретиков.
В реальности есть цифровые системы исчисления с фиксированным шагом приращения (x++;), и аналоговая (напряжение и фазовые свойства волны) — с плавающей точностью.
Вся разница в ограничениях применения оператора "++".
В цифровых системах всего два варианта считаются стандартом: двоичная и десятичная. Изобретать тут особо нечего, потому как даже после изобретения — придётся использовать десятичную систему для доказательств и объяснений, что довольно глупо.
А вот аналоговые системы исчисления — не паханое поле.
Здесь уже иная математика, другие законы и правила. Но и возможностей на голову выше.
Приколы начинаются с того что аналоговый вариант просто невозможно записать на бумаге с абсолютной точностью. Так-же событие равенства в такой системе будет бесконечно редким событием.
Можно играться с уровнем напряжения — это достаточно легко, но накладывает несколько фундаментальных ограничений, отчего математические возможности явно беднеют.
Гораздо интереснее играться с фазой сигнала фиксированной амплитуды. В этом случае доступна вся математика без ограничений и нарушений баланса энергий.
Вот оно не паханое поле.
Сейчас наборов для АМ радио в подобном виде — просто не существует. Если уж очень хочется — придётся детальки заказывать по отдельности, ну или в одном магазине комплектом.
Чтоб просто поиграться есть однокристальные FM приёмники, их много и ценники не выше сотни.
Для более продвинутых есть si4730 — всеволновый приёмник с цифровым управлением. На али есть готовые платки, для аурдинщиков.
Для максимально продвинутых si47972, это уже намного сложнее и дороже.
Всё это использует тот-же принцип что и в статье, за исключением более малых габаритов.
Вот-же странность, фабрики работают на 120%, а чипов нет. Может стоит заинтересоваться, чего эти фабрики выпускают в таком огромном количестве. А главное — кто заказчик, и откуда у него столько денег.
В качестве примера коллега нашел вот такой фрагмент кода, который используется в продакшне:
Вот не лень-же было кому-то столько строк писать. Хотя есть подозрение, что это сделал автомат. Современные умные помощники с перекаченным AI — такие задания разгадывают за пару строк.
Смотрим что выдаёт функция: строку фиксированной длинной, значит все данные можно загнать в один непрерывный массив без нулей. Из 257 условных переходов останется ноль штук. Только прямое чтение из массива и добавление нуля. Строка полностью помещается в регистр, так-что проблем ноль.
Прежде всего — эта клавиатура с наклейками, которые стираются со временем.
Уж если есть возможность — то делайте клавиши двухкомпонентными: сначала буквы, потом остальная часть клавиши другим цветом. Такие кнопки если и будут стираться, то равномерно.
Saalur
Подмена интерфейса выхлопа cout — замечательно. Но меня не радует способ реализации. Использовать наработки урезанных по функционалу мк в виде базовых — очень плохая идея.
Хуже может быть только переключение типа ядра в готовой собранной библиотеке. Есть такие товарищи, и вы с ними обязательно столкнётесь.
Для совместной печати в ITM интерфейс — можно принудительно назначить номер порта. Это поможет избежать каши, но не уберёт взаимную блокировку. Кстати, это достаточно удобно.
Совместная печать через физику без деления на каналы — всегда головная боль. Нормального решения нет.
Кстати, вы подумали как отключать отладочную печать? Как реагировать в случае недоступности физического интерфейса? Каким образом управлять печатью в разных исполняемых файлах?
Причёсывать код конечно нужно, и даже необходимо. Но упор на ленивое программирование требует минимального количества нажатия клавиш.
Время работы физики определяется выбранным интерфейсом, и не является качественным показателем. Так-же как и режим блокирования основной программы, просто это нужно делать иначе — использовать внешний буфер для дма при работе с физикой, копировать туда данные для передачи, и обновлять задание для дма. Само дма полностью на прерываниях, связь через задания.
моё github.com/AVI-crak/Rtos_cortex/blob/master/sPrint.h
физики там нет, время преобразования в строку для одинарной или двойной точности 2us,
F7 на частоте 216MHz.
А с кодом вы что-то намудрили H7 умеет прекрасно умножать и делить, и не только целые числа. При этом печать массивов — самая большая глупость что можно придумать, такие данные оформляются в сырые пакеты, и отдаются как есть.
Однако, запись формулы отличается от законченного продукта
Академические формулы которые описывают работу двигателя — не определяют его состояния в нужный вам момент, они общие, вообще для всего диапазона состояний. Они настолько далеки от практического применения — что не имеет смысла на них тратить время.
Мотор вообще очень простая штука, полностью аналоговая модель прекрасно его замещает. По этой причине нет смысла усложнять алгоритм, достаточно добиться приближения к аналоговой модели замещения.
Насчёт протоколов тоже мудрить нет смысла. Чем проще -тем надёжнее работа.
Насчёт тестов порадовали…
Ну невозможно как-либо производить отладку реально работающего двигателя. Даже если вас не убьёт потенциалом нуля горячего шасси — это сделает сам двигатель, когда вы остановите программу.
Я уже написал про модель замещения, вот на её эмуляции и выполняется отладка — там можно останавливаться и курить.
Spym
Код для векторного управления полностью помещается на экране монитора — примерно 30 строчек. Сам алгоритм простой как тапок, и он должен работать в реальном времени. Всё что для него требуется — занимает в флеше 60к, в памяти примерно 4к.
Умеет вращать от нуля до номинала, работать как серводвигатель.
100к сток кода там нафиг не требуется, двигатель на воде работать не будет.
Где доступ к регистрам и периферии?
В реальности гораздо чаще нужно сортировать многомерный массив — результат сканирования таблиц, или любого большого количества данных хоть в какой-то структуре хранения. Массив в виде адресов, индексов, числовых и текстовых значений… То-есть изначально разношорстный комок данных.
Для этого есть готовые алгоритмы сортировки, но видимо они слишком сложны для рассмотрения.
Число большое, но в реальности это меньше одного года непрерывной работы.
В реальности есть цифровые системы исчисления с фиксированным шагом приращения (x++;), и аналоговая (напряжение и фазовые свойства волны) — с плавающей точностью.
Вся разница в ограничениях применения оператора "++".
В цифровых системах всего два варианта считаются стандартом: двоичная и десятичная. Изобретать тут особо нечего, потому как даже после изобретения — придётся использовать десятичную систему для доказательств и объяснений, что довольно глупо.
А вот аналоговые системы исчисления — не паханое поле.
Здесь уже иная математика, другие законы и правила. Но и возможностей на голову выше.
Приколы начинаются с того что аналоговый вариант просто невозможно записать на бумаге с абсолютной точностью. Так-же событие равенства в такой системе будет бесконечно редким событием.
Можно играться с уровнем напряжения — это достаточно легко, но накладывает несколько фундаментальных ограничений, отчего математические возможности явно беднеют.
Гораздо интереснее играться с фазой сигнала фиксированной амплитуды. В этом случае доступна вся математика без ограничений и нарушений баланса энергий.
Вот оно не паханое поле.
Чтоб просто поиграться есть однокристальные FM приёмники, их много и ценники не выше сотни.
Для более продвинутых есть si4730 — всеволновый приёмник с цифровым управлением. На али есть готовые платки, для аурдинщиков.
Для максимально продвинутых si47972, это уже намного сложнее и дороже.
Всё это использует тот-же принцип что и в статье, за исключением более малых габаритов.
49$ != 3577р
Вот не лень-же было кому-то столько строк писать. Хотя есть подозрение, что это сделал автомат. Современные умные помощники с перекаченным AI — такие задания разгадывают за пару строк.
Смотрим что выдаёт функция: строку фиксированной длинной, значит все данные можно загнать в один непрерывный массив без нулей. Из 257 условных переходов останется ноль штук. Только прямое чтение из массива и добавление нуля. Строка полностью помещается в регистр, так-что проблем ноль.
Уж если есть возможность — то делайте клавиши двухкомпонентными: сначала буквы, потом остальная часть клавиши другим цветом. Такие кнопки если и будут стираться, то равномерно.
Подмена интерфейса выхлопа cout — замечательно. Но меня не радует способ реализации. Использовать наработки урезанных по функционалу мк в виде базовых — очень плохая идея.
Хуже может быть только переключение типа ядра в готовой собранной библиотеке. Есть такие товарищи, и вы с ними обязательно столкнётесь.
Для совместной печати в ITM интерфейс — можно принудительно назначить номер порта. Это поможет избежать каши, но не уберёт взаимную блокировку. Кстати, это достаточно удобно.
Совместная печать через физику без деления на каналы — всегда головная боль. Нормального решения нет.
Кстати, вы подумали как отключать отладочную печать? Как реагировать в случае недоступности физического интерфейса? Каким образом управлять печатью в разных исполняемых файлах?
Причёсывать код конечно нужно, и даже необходимо. Но упор на ленивое программирование требует минимального количества нажатия клавиш.
Время работы физики определяется выбранным интерфейсом, и не является качественным показателем. Так-же как и режим блокирования основной программы, просто это нужно делать иначе — использовать внешний буфер для дма при работе с физикой, копировать туда данные для передачи, и обновлять задание для дма. Само дма полностью на прерываниях, связь через задания.
моё github.com/AVI-crak/Rtos_cortex/blob/master/sPrint.h
физики там нет, время преобразования в строку для одинарной или двойной точности 2us,
F7 на частоте 216MHz.
А с кодом вы что-то намудрили H7 умеет прекрасно умножать и делить, и не только целые числа. При этом печать массивов — самая большая глупость что можно придумать, такие данные оформляются в сырые пакеты, и отдаются как есть.
mcu.goodboard.ru/viewtopic.php?id=265
И за это хотят 1610 рублей?
Академические формулы которые описывают работу двигателя — не определяют его состояния в нужный вам момент, они общие, вообще для всего диапазона состояний. Они настолько далеки от практического применения — что не имеет смысла на них тратить время.
Мотор вообще очень простая штука, полностью аналоговая модель прекрасно его замещает. По этой причине нет смысла усложнять алгоритм, достаточно добиться приближения к аналоговой модели замещения.
Насчёт протоколов тоже мудрить нет смысла. Чем проще -тем надёжнее работа.
Насчёт тестов порадовали…
Ну невозможно как-либо производить отладку реально работающего двигателя. Даже если вас не убьёт потенциалом нуля горячего шасси — это сделает сам двигатель, когда вы остановите программу.
Я уже написал про модель замещения, вот на её эмуляции и выполняется отладка — там можно останавливаться и курить.
Код для векторного управления полностью помещается на экране монитора — примерно 30 строчек. Сам алгоритм простой как тапок, и он должен работать в реальном времени. Всё что для него требуется — занимает в флеше 60к, в памяти примерно 4к.
Умеет вращать от нуля до номинала, работать как серводвигатель.
100к сток кода там нафиг не требуется, двигатель на воде работать не будет.