1) Сейчас открыл ту свою статью, которая в столе лежит, проверил. Там этому посвящён целый раздел, который говорит, что строгая типизация действительно затрудняет именно хранение в массиве но в принципе — это возможно.
2) А вот у самого автора той библиотеки зато есть более интересная штука — PinList. Ноги, объявленные таким методом, объединяются в группу, которую можно заполнять занесением двоичной константы. Я в своих статьях как раз извращаюсь с их заполнением и смотрю, что выдаёт оптимитзатор. А оптимизатор там даёт идеальный код. На ассемблере с этой группой контактов обычно лучше не получится работать. Правда, в Кейле надо включить обязательно оптимизацию по времени. Если по размеру — всё будет хуже.
Собственно, из статьи про эти группы контактов я и узнал о существовании той библиотеки. Но когда скачал с Гитхаба, оказалось, что она — это не только GPIO, а ещё и масса других вещей. Надеюсь, за ссылку на очень старую статью на другой ресурс, меня не расстреляют. Она реально старая. Тогда библиотека ещё называлась avrcpp. Сегодня её надо гуглить по имени mcucpp. Вот, нагуглил текущее состояние.
Кстати, а измеряет Ваша программа или чужая? Просто подумалось, а не вещественные ли числа там делятся? Если они, то при росте порядка, идёт загрубление, что может приводить к интересным результатам.
А так — выше я в комментариях отписался (и новый раздел ближе к концу текста вставил), как удалось разогнать на любых объёмах. Тот же метод, что и у китайцев, но не абстрактное «Мы сделали», а скачана конкретная библиотека от отечественного автора. И получившиеся осциллограммы соответствуют предсказанным. Ну, и с USB 2.0 хабом, предсказуемо ничего не улучшилось.
Когда ориентируемся на частоту генератора — я уже привык на реальные тысячи умножать. Потому что там все эти биты в секунду от кварца пляшут. Так что все программистские вычисления тут только всё запутают.
Да, но остальные или хуже, или дороже… Понятно, что они не вечны… Но вот прямо сейчас, если бы не дефицит на фоне пандемии, они популярны. А лет 10 назад я Мегу восьмую любил. Причём писал на ассемблере для неё.
У NXP библиотеки лучше сделаны. Да и сами они неплохи. Но ценаааааа… Я просто сейчас Teensy 4.1 по проектной необходимости изучаю. Но когда надо круть — можно и переплатить. Когда не надо — зачем переплачивать?
В своё время, конкретно F103C8T6 на сайте обещали не снимать с производства в ближайшие 10 лет. Так что если сама фирма не развалится, то должно быть всё хорошо. Будем хотя бы на это надеяться.
Но как человек, живший при дефиците, я несколько десятков Пилюль купил давно. Для дома, для семьи… Уж больно они замечательные.
Первая строка нужна, чтобы на порт тактирование включить, оно там само определит, на какой GPIO подать, для более сложных блоков — и на GPIO ног, и на блоки подаст.
Ну, и работаем
oscOut::Set();
oscOut::Clear();
Обратите внимание, что никаких переменных не заводится. Там работа через статические функции идёт. Как макросы, только легко читаются реализующие функции, и всё строго типизировано. И при вводе текста часто подсказки IntelliSense хорошие выдаёт, не надо всё помнить.
Оптимизируются так, что руками на ассемблере лучше не написать. Я проверял.
Для всего, кроме USB Middleware я использую mcucpp Константина Чижова. Она довольно здорово оптимизирует код, а также делает простой работу со сложными блоками (я использовал GPIO, таймеры, в том числе, в режиме ШИМ, UART, SPI). При этом ноги перекидывать при переразводке платы — сплошное удовольствие.
Правда, я давно не заглядывал, что у него там сейчас. Лет 5 назад скачал и развивал свой вариант. В столе даже есть пара статей про эту библиотеку, но знакомые отговорили от их публикации. Она же не моя. И типа нечего тут…
USB — приходилось пользоваться тем, что есть… Но буду изучать библиотеки, с которыми познакомился сегодня. Сейчас вставлю дополнение в текст…
Ну, дешёвый контроллер с FS — это всё тот же F103. Он замечательный по большинству параметров. А дикая скорость нужна не всегда. Чуть выше я в комментарии привёл график, полученный с использованием библиотеки EddyEm — с нею можно получить полноценную скорость. Я верил, что в комментариях мне подкинут идею (правда, для этого пришлось пошерстить его комментарии к чужим статьям, чтобы найти ссылку на эту библиотеку). Чуть позже дополню статью ссылкой на эту библиотеку.
EHCI — вот эта плата, процессор NXP IMXRT1062. Скоро выложу несколько статей со своими первыми впечатлениями о работе с нею. Но по цене это совсем разные весовые категории… И отладочного порта на этой плате нет. А так — забавная штучка.
Это было (для меня) нелегко, но я справился со сборкой Вашего проекта /F1-nolib/CDC_ACM под Windows. Результат при прямом подключении к материнке — просто замечательный. Через хаб — предсказуемо такой же, какой был.
Сделаю несколько замеров — дополню статью ссылкой на российского автора полезной библиотеки в Вашем лице…
Оптимизация на размер именно в Кейле даёт массу CALLов вместо автоматических инлайнов. Так что она точно на скорость в лучшую сторону не может повлиять.
Что до постепенного разгона — вопрос интересный. По крайней мере, я замерял для нескольких мегабайт.
Порылся по Вашему профилю. Нашёл Вашу USB библиотеку на Гитхабе. Выглядит забавно. Настолько забавно (в хорошем смысле этого слова), чтобы показать всем. Будем измеряяяять. По результатам — отпишусь.
Сложный вопрос. Давным-давно, лет 5 назад, играл я в CMSIS RTOS. В те времена её вызовы проваливались в ту же самую MiddleWare, что и у Кубика используется. Дрйверы для ОС же поставляли те же самые STшники. Возможно, с тех пор что-то изменилось, но мне это было уже не интересно.
Я находил альтернативную реализацию, лишённую ряда слоёв. Но копирайты там были те же самые. Так что это просто другой вариант развития той же идеологии. И разумеется, за требуемое время из обработчика прерывания там выйти тоже ничего не успевало. Со всеми теми же самыми проблемами.
В общем, единственные, кто целенаправленно давил эту проблему — те самые китайские товарищи. Но тот самый USB 2.0 хаб испортил бы результаты и им… И это в статье доказано.
Может когда-нибудь руки и дойдут… Или кто ещё сделает это. А я сейчас весь в играх с Teensy 4.1. Последние графики сняты на ней. Скоро планирую результаты своих осмотров той платы опубликовать. Спасибо Заказчику Тинсевого проекта, разрешил все находки в публикацию пускать.
2) А вот у самого автора той библиотеки зато есть более интересная штука — PinList. Ноги, объявленные таким методом, объединяются в группу, которую можно заполнять занесением двоичной константы. Я в своих статьях как раз извращаюсь с их заполнением и смотрю, что выдаёт оптимитзатор. А оптимизатор там даёт идеальный код. На ассемблере с этой группой контактов обычно лучше не получится работать. Правда, в Кейле надо включить обязательно оптимизацию по времени. Если по размеру — всё будет хуже.
Собственно, из статьи про эти группы контактов я и узнал о существовании той библиотеки. Но когда скачал с Гитхаба, оказалось, что она — это не только GPIO, а ещё и масса других вещей. Надеюсь, за ссылку на очень старую статью на другой ресурс, меня не расстреляют. Она реально старая. Тогда библиотека ещё называлась avrcpp. Сегодня её надо гуглить по имени mcucpp. Вот, нагуглил текущее состояние.
А так — выше я в комментариях отписался (и новый раздел ближе к концу текста вставил), как удалось разогнать на любых объёмах. Тот же метод, что и у китайцев, но не абстрактное «Мы сделали», а скачана конкретная библиотека от отечественного автора. И получившиеся осциллограммы соответствуют предсказанным. Ну, и с USB 2.0 хабом, предсказуемо ничего не улучшилось.
У NXP библиотеки лучше сделаны. Да и сами они неплохи. Но ценаааааа… Я просто сейчас Teensy 4.1 по проектной необходимости изучаю. Но когда надо круть — можно и переплатить. Когда не надо — зачем переплачивать?
Слева сверху зелёненькая надпись Active. Чуть правее от неё монетка десятикопеечная. Наведите на неё курсор…
Но как человек, живший при дефиците, я несколько десятков Пилюль купил давно. Для дома, для семьи… Уж больно они замечательные.
Где-то объявляем
Потом можно всегда поименять на другое
Затем — где надо, инициализируем
Первая строка нужна, чтобы на порт тактирование включить, оно там само определит, на какой GPIO подать, для более сложных блоков — и на GPIO ног, и на блоки подаст.
Ну, и работаем
Обратите внимание, что никаких переменных не заводится. Там работа через статические функции идёт. Как макросы, только легко читаются реализующие функции, и всё строго типизировано. И при вводе текста часто подсказки IntelliSense хорошие выдаёт, не надо всё помнить.
Оптимизируются так, что руками на ассемблере лучше не написать. Я проверял.
Правда, я давно не заглядывал, что у него там сейчас. Лет 5 назад скачал и развивал свой вариант. В столе даже есть пара статей про эту библиотеку, но знакомые отговорили от их публикации. Она же не моя. И типа нечего тут…
USB — приходилось пользоваться тем, что есть… Но буду изучать библиотеки, с которыми познакомился сегодня. Сейчас вставлю дополнение в текст…
Больше библиотек, хороших и разных!
EHCI — вот эта плата, процессор NXP IMXRT1062. Скоро выложу несколько статей со своими первыми впечатлениями о работе с нею. Но по цене это совсем разные весовые категории… И отладочного порта на этой плате нет. А так — забавная штучка.
Это было (для меня) нелегко, но я справился со сборкой Вашего проекта /F1-nolib/CDC_ACM под Windows. Результат при прямом подключении к материнке — просто замечательный. Через хаб — предсказуемо такой же, какой был.
Сделаю несколько замеров — дополню статью ссылкой на российского автора полезной библиотеки в Вашем лице…
Что до постепенного разгона — вопрос интересный. По крайней мере, я замерял для нескольких мегабайт.
Я находил альтернативную реализацию, лишённую ряда слоёв. Но копирайты там были те же самые. Так что это просто другой вариант развития той же идеологии. И разумеется, за требуемое время из обработчика прерывания там выйти тоже ничего не успевало. Со всеми теми же самыми проблемами.
В общем, единственные, кто целенаправленно давил эту проблему — те самые китайские товарищи. Но тот самый USB 2.0 хаб испортил бы результаты и им… И это в статье доказано.
560 * 8 = 4 480 килобит, грубо 4.5 мегабита.
Сейчас поправлю текст. Ещё раз спасибо.
Скачал. На выходных погляжу, насколько легко или сложно пройти этим путём.