В какой последовательности надо загружать данные в функцию для
КортексаМ. Как правильнее void Funk(int32_ t a, int16_t b, int8_t
c); или void Funk(int8_ t с, int16_t b, int32_t a); или пох? Всегда
считал, что более эффективно от большего к меньшему. Полистал
различный код, вроде пох. - IBAH(20.05.2025 17:43, ARM, полностью)
- Лучше об этом вообще не париться, пока где-нибудь не прижало. И
даже если прижало, будет на 99% не в этом месте. - SciFi(20.05.2025 20:10)
- На Cortex-M лучше вообще по возможности void Funk(int32_ t a,
int32_t b, int32_t c); - VladislavS.(20.05.2025 18:35)
- Посмотрел соглашение о вызовах, выделяется четыре регистра, один
регистр на один параметр, про размер ничего не сказано IBAH(320 знак., 20.05.2025 18:40)
- Размер компилятор будет отдельной командой усекать. Очень часто это
будет просто лишняя ненужная команда. Не надо ограничивать
разрядность без особой на то необходимости. - VladislavS.(20.05.2025 19:03)
- +1. Специально для локальных переменных в stdint.h имеются типы -
uint_fast8_t, uint_fast_16_t, uint_fast32_t ... Я ими пользуюсь и
для передачи параметров, и для возвратов, и для локальных
переменных, только названия сократил - ufast8_t, ufast16_t,
ufast32_t. il-2(331 знак., 22.05.2025 11:44)
- Ограничение разрядности может помочь обнаружить ошибки переполнения
там, где его не ожидаешь. Усекать компилятор будет не всегда. AlexBi(56 знак., 20.05.2025 19:20, картинка)
КортексМ. Если функция с пятью параметрами (загрузка параметров
через стек), причем некоторые параметры константы, имеет ли смысл
её заинлайнить? Ведь если заинлайнить компилятор наотиммизирует
чего-нибудь хорошего? - IBAH(20.05.2025 18:47, ARM, полностью)
RISC-овые мытарства... Понадобился тут простенький одноканальный УЗ
датчик, ибо сторонние промышленные стоят немеряно. Довольно
навороченный (датчик объема продукта на транспортерной ленте) на
MSP430G2553 с радиомодулем в активе уже имеется, а тут достаточно
дешевого 8-лапого МК. Ну и запустил MounRiver Studio со своим
проектиком контактной сварки на CH32V003 после годовалого перерыва.
Обнаружил, что проектик перестал отлаживаться. Вчера целый день
уродовал зенки - Гyдвин(947 знак., 02.05.2025 16:12 - 19:21, ARM, полностью)
- Просто интересно, сколько стоит Ваш рабочий день, если магазинные
приборы слишком дороги? - Kpoк(12.05.2025 15:48)
- жесть какая, просто как щебень по стоимости - Ralex(12.05.2025 12:08)
- Хотелось таки разобраться с этим CH32V003F4P6... Все выводы порта С
настроены на выход и работают правильно. Под кнопку отвел тогда
PD6. Настроил подтяжку к VDD. И вот с ним и онаружил засаду -
спорадически чип вылетает в hard fault при нажатии, а иногда даже
перезагружается. Задействовал под это дело PA2 - все работает как
положено. Прерывания вообще не пользую. B да - с подключенным
отладчиком к PD1. Глюк чипа? Гyдвин(1 знак., 11.05.2025 11:54, картинка)
- Для 003 спецсвисток для отладки нужэн. - mse homjak(02.05.2025 20:10)
- Тоже сейчас разбираюсь с PUYA только с py32f003 (so8 и so16) они
подороже, py32f002al15s6 в Платане по 12руб, в инете много
информации, что f002a, f003, f030 один кристалл и в f002a находят
4К RAM, PLL, DMA и из RAM работает на 96MHz Zikon(181 знак., 02.05.2025 19:25)
- Насчет поломанной отладки и старых проектов (на основе старых
шаблонов). il-2(1510 знак., 02.05.2025 19:01)
- У меня давно сложилась привычка использовать фирменную среду только
как отладчик. Сборка через Makefile, там что-то сломать довольно
сложно. - SciFi(02.05.2025 16:49)
- Хм, на порядок дороже в наших краях и "под заказ" в основном... - Гyдвин(02.05.2025 16:25)
Хабарка: "О переходе на QingKeV4. Тесты CoreMark в разных областях
флэша для СH32V2/V3 и что же такое non-zero wait." Toчкa oпopы(1 знак., 13.05.2025 21:07, ARM, ссылка)
Кароч, RISCоводы ВЦШные, никто не пробовал ставить меморьный
протект на микросхему? Такое впечатление, что при постановке
протекцыи, он её стирает. - mse homjak(09.05.2025 21:48, ARM, полностью)
Друзья, а ни у кого нет файла таблицы для генерации "ТЮ-ЛЮ-ЛЮКАНИЯ"
под цап для стм 32f103? Balda(128 знак., 31.03.2025 13:25, ARM, полностью)
- Для таких целей можно взять любой кусок "тюлюлюканья", сохранить
его (хоть sox'ом, хоть в audacity) в 8-битном виде, скажем, на
частоте дискретизации в 8кГц, а потом новомодной директивой #embed
воткнуть его в итоговый бинарь как массив uint8_t. Ну и в цикле DMA
гнать в ЦАП или ШИМ (смотря насколько дохренаножный МК). - Eddy_Em(31.03.2025 20:41)
- а чем можно конвертнуть bin в текст СИ? - Balda(05.05.2025 14:18)
- Было сделано чиста для сэбэ IBAH(1 знак., 05.05.2025 20:26, ссылка)
- Рекомендую программу, вдобавок бесплатную Бoмж(2 знак., 05.05.2025 15:05, ссылка, картинка)
- Раз - по ссылке. Два, три и четыре - приложено. Заменить префиксы в
выхлопах три и четыре, думаю, - будет не сложно, а очень несложно. Toчкa oпopы(2 знак., 05.05.2025 14:47, ссылка, ссылка)
- Это физически невозможно. Разве что пройтись дизассемблером, а
потом долго и мучительно самому писать. Смысла - нет никакого! Куда
быстрей с нуля самому написать что угодно. - Eddy_Em(05.05.2025 14:20)
- А реально эту директиву #embed препроцессора с кейлом заставить
работать? Как я понял это релиз Декабрь 24 года.. - Balda(04.04.2025 20:12)
- Какой то простой язычок был для озвучивания нот компом, то ли миди,
то ли забыл. - Visitor(31.03.2025 19:53)
- А такое влезет? Не тюлюлюканье, но может понравится. alexem(1 знак., 31.03.2025 19:30, ссылка)
- вот )) POV(4 знак., 31.03.2025 13:28, картинка, картинка)
А объясните глюк с GD32F103, внешний кварц. Тыкаю по плате осцилом,
отлаживаю аналоговую часть. Може чего и коротнул... Херак! МК
перестает работать! Диодиком не мигает! Наверно сваливается в
ХардФалаут. После сброса питания все ОК. С СТэМом такого не разу не
было. Неужели генерация срывается? Два раза словил такой глюк,
начинаю беспокоится. - IBAH(06.05.2025 13:40, ARM, полностью)
Новый ESP32-C5 jlm(1 знак., 03.05.2025 16:58, ARM, ссылка, полностью)
- Я смотрю, народ зажрался. Камень на 240 МГц и 384к СРАМ не вызывает
ровно никакой реакции - Kpoк(05.05.2025 10:41)
- А какую реакцию этот кусок говна может вызвать, если его невозможно
запрограммировать baremetal? - Eddy_Em(05.05.2025 14:21)
- Есть по проще HC32F460JETA;KETA (lqfp-48;64, Cortex-M4F, 200MHz,
512K Flash (+cache), 192K SRAM) Zikon(65 знак., 05.05.2025 14:06)
- Есть ещё RP2350 (dual core (CM33 or RV) 150MHz, 520Mb SRAM) - Zikon(05.05.2025 13:22)
- Как-то, так || Есть ещё SG2002 который в LicheeRV Nano (1ГГц+700МГц
256Мб DDR3) + Linux || по цене не так и дорого - Zikon(05.05.2025 13:10)
- почти такой МК (400МГц/1Mбайт СРАМ ) - STM32H743VIT6 в Промэлектро
600 руб. - Лaгyнoв(05.05.2025 12:20)
- Начали сравнивать байты и мегагерцы, jlm(155 знак., 05.05.2025 11:01)
- Вообще ниочом... ))) Я тут зарядил AT32F435 (288МГц) для HF RFID
ридера и внезапно обнаружил, что под два квадратурных массива
входящего потока с двух АЦП нужно 80000 32-битных структур. А всего
с учетом остального 362KB. Итого в остатке получается всего 20KB,
если требуется zero-wait. А он требуется. - my504(05.05.2025 10:50)
- Да сколько тех ресурсов там останется если sdk фирмовую накатить? А
если просто как МК, без сети, на одном ядре, то артери чем хуже?
Тот же 407VGT7 - POV(05.05.2025 10:48)
- это же не пик :-/ - SciFi(05.05.2025 10:45)
Коллеги, как лучше сделать - HAL_UART_Receive_IT() поставить до
отправки в очередь или после? UART Rx ISR Mty1(292 знак., 02.05.2025 00:10, ARM, полностью)
Обращаюсь к отряду телепатов быстрого реагирования :) Может идею
подкинете. Есть устройство с GD32F303. Я из примеров китайских взял
загрузчик HID USB, слегка подправил и использую. Тут понадобилось
грузить фирмварю из микрухи w25q. Добавил в китайский пример эту
тему. Вроде работает. Но при переходе из бута в основную прошивку
падает в хардфаулт. Ума не приложу с чего бы. Решил костыльно -
было без оптимизации, добавил слегка - перестало падать. Но
тревожно - хочется vesago(989 знак., 28.04.2025 14:38, ARM, полностью)
Опытного эмбеддера не проведёшь! CH32V203, эта сука потребовала
барьера между сбросом модуля CRC подачей данных: Nikolay_Po(2271 знак., 01.05.2025 14:08, ARM, картинка, картинка, полностью)
CH32V203. Сбой сигнала передачи SPI (при работе с DMA). Nikolay_Po(482 знак., 28.04.2025 01:24, ARM, картинка, полностью)
- Решилось так: сбросил тактовую HCLK (и процессора) с 110.592МГц
(была выбрана для UART и прямой работы с флеш) до 77.4144МГц. Зато
получил тактовую модуля SPI 19.3536МГц и идеальное удержание
последнего бита в 52нс - один такт этой тактовой. Заодно повысил
скорость SPI на целых 40%, до этого она не попадала в ограничения с
делителями шин 2^N. Увеличение скорости SPI, вобщем, штука
позитивная для проекта. Позволит реализовать дополнительный опрос
и, тем самым, сократить время Nikolay_Po(28 знак., 29.04.2025 12:33)
- В общем, это именно косяк модуля SPI. Сделал передачу на
прерываниях. И вот что (сиреневым к нулю - время нахождения в
прерывании TXE - буфер передачи пуст): Nikolay_Po(394 знак., 28.04.2025 17:25, картинка, картинка)
- Бедный, бедный SPI на СТМ-подобных контроллерах. Как можно было
сделать такое уродство, ХЗ... - mse homjak(28.04.2025 14:19)
- А если фазу инвертировать - выдавать новый бит по спаду, а
защёлкивать его (клок) по положительному фронту? Картина изменится?
Может, в связке с DMA проблема (попробовать выдачу 0х55 в цикле, из
регистра, просто по опросу)? А то попахивает жирной эратой. :( - vpv.vpv(28.04.2025 09:28)
- Ну да, похоже на косяк в конце байта. Возможно, что на более
высоком разрешении по времени там видна задержка на 1 такт МК(или
такт для модуля SPI) - т.е. десятки наносекунд. Если так, то в
принципе можно смириться, надо только смотреть в даташитах на
периферию, чтобы Data hold time была не более. Что у тебя там
подцеплено на SPI? Работает? - il-2(28.04.2025 06:26)
- Шансов для устройства, тактируемого по второму перепаду, мало.
Данные изменяются на 9нс
раньше после того, как происходит нештатный, преждевременный тактовый
перепад. Вместо требуемых в моём случае 50нс, удержание данных
сохраняется лишь 9нс. Это нехорошо. Nikolay_Po(127 знак., 28.04.2025 11:56, картинка)
- Ты ниже написал - что тактовая МК 110МГц - т.е. период как раз 9нс.
Можно попробовать посмотреть - изменится ли эта задержка от смены
тактовой МК. Посмотреть - от какой частоты зависит - от AHB или
APB. Если от APB - то можно в принципе снизить ее до 20-30МГц и
таким образом сделать эту задержку более "приличной" - 30-50нс. Так
глядишь - и победить это горе через задний проход :-) - il-2(28.04.2025 18:13)
- Хмм... Спасибо! Гениально! Я сам не догадался. Сейчас проработаю
этот вариант. У меня на этой же шине уже разведённый UART работает.
Но я предусмотрительно сделал тактовую и кварц кратным UART. Должно
сложиться. Мне нужно удержание данных 50нс. Это значит, что
тактовую нужно понизить не выше чем до 1/50нс=20МГц. Системная
частота у меня сейчас 110.592МГц. Значит, нужен делитель не менее
5.5296
МГц. В наличии делители 2, 4, 8 и 16. Беру 8. Nikolay_Po(476 знак., 28.04.2025 22:31)
- Сработало! После изменения делителя PPRE2 в регистре CFGR0 модуля
тактирования RCC, частота второй периферийной шины (PB2) поделилась
на 8, стала 13.824МГц. USART-делители пересчитались автоматически,
связь по RS-485 с устройством не нарушилась. Кадровый таймер
интерфейса связи не пострадал - оказался на первой периферийной
шине (впрочем, и он пересчитывается автоматически - стоит лишь
делитель верно задать). Nikolay_Po(435 знак., 28.04.2025 22:46, картинка, картинка)
- Погонял малость. По устранял ошибки. Типа, в режиме только
передачи, когда входящие с SPI не нужны, не включал DMA на приём. А
в SPI ошибка OVR и её выявлял обработчик состояния SPI. Так же
нужно было не забыть добавить очистку лишнего байта в буфере приёма
и сброса ошибки последовательным чтением сначала регистра данных,
потом статуса. Nikolay_Po(522 знак., 29.04.2025 01:37)
- Если переходить на программный, тогда зачем ДМА? В обычном режиме
оно работает нормально. Ну как, "нормально"... Работает. А я, в
ряде случаев, делаю программный интерфейс для РС232, СПИ, через
ДМА, чтобы не отвлекаться, в процэссе передачи. Формирую в ОЗУ
последовательность установок-сбросов бит порта и травлю на него
ДМА. Много ОЗУ идёт в расход, но щас этого ОЗУ, как у дурака
фантиков. Скорости можно добиться высокой. - mse homjak(28.04.2025 23:17)
- Периферия у меня старый АЦП, у него 50нс требуется удерживать
данные с момента перехода сигнала тактирования. - Nikolay_Po(28.04.2025 09:34)
- Я так думаю, что задержки SPI должны быть равны половине периода
клока. Для этого частота SPI и выбирается (1/2, 1/8, ... 1/64...).
Тут что-то другое. - vpv.vpv(28.04.2025 09:34)
Ребята, кто знает, есть ли в GCC для RISC-V возможность задать свой
пре-пролог для прерывания? Такое было возможно делать доработанном
GCC от Microchip для их контроллеров. Указывалось в виде параметра
спецификатора. И параметре - ассемблерная инструкция-другая.
Остальной, штатный, пролог компилятор вставлял после моего
пре-пролога. Nikolay_Po(479 знак., 23.04.2025 22:38, ARM, полностью)
- А этот GCC при влёте в прерывание сохраняет весь набор регистров,
или только используемые (изменяемые) в данном прерывании? Я про
программный режим в CH32V, разумеется, не про аппаратный. - vpv.vpv(24.04.2025 11:51)
- Я мечтаю, что сохраняет только используемые. Вроде, при обсуждении
аппаратного механизма, проскакивало, что для маленьких
обработчиков, где затрагивается мало регистров, программное
сохранение контекста может выиграть, но только если делать пролог и
эпилог вручную. Компилятор не оптимизирует количество сохраняемых
регистров. - Nikolay_Po(24.04.2025 11:53)
- Что ж, неважнецкий какой-то компилятор, значит. )) IAR AVR чётко
сохраняет только те, которые меняются. Но! Стоит внутри П/П сделать
ещё один вызов - всё. IAR сохраняет все регистры. Хотя вызов (я
делал косвенные, т.е. через указатели) очень простой. Вот там я
применял "__raw", т.е. указание IAR'у не сохранять ничего. Я сам
сохранял что нужно (особенно эффективна пересылка пары регистров в
другую пару за 1 такт), отчего реакция и отработка П/П
увеличивалась в разы. - vpv.vpv(25.04.2025 07:45)
- Мечта сбылась. Утверждается, что LLVM умеет IPRA. Но если
посмотреть на цифры, то реальная "польза" весьма скромная. Когда в
дизассемблере видишь сохранение кучи регистров, это немного
расстраивает, конечно. SciFi(1 знак., 24.04.2025 12:01, ссылка)
- Вот пример, как надо: __attribute__((naked)) void my_handler_hpe(){
asm("call my_handler; mret"); } - SciFi(24.04.2025 08:13)
- А зачем? Пишешь свою функцию пре-пролог, ее указываешь в таблице
векторов прерывания. А уже из нее делаешь вызов "настоящей"
функции-обработчика прерывания. Только вызов надо делать через JMP - il-2(24.04.2025 05:15)
Вопрос к опытным пользователям КУБа, там есть возможность включить
оптимизацию -flto? Внутри КУБа вроде бы GCC только не понятно какой
версии, и как управлять оптимизацией сходу не понятно. Хочется без
особых переделок программы, использующей HAL, увеличить
быстродействие, т.е. уменьшить время реакции на прерывание. Сейчас
от прерывания до обработчика проходится несколько слоев функций
HALа, которые должны бы выкинуться при LTO. - AlexBi(22.04.2025 19:22, ARM, полностью)
- Заклинаю: с LTO, повключай все предупреждения компилятора, может
быть, кроме "экстра". И устрани их прежде, чем тестировать работу
кода. LTO - штука весьма жестокая к ошибкам. А предупреждения -
важные подсказки. - Nikolay_Po(23.04.2025 11:03)
- Я кубом не пользуюсь, но уверен, что можно. Найдите место, где
выбирается оптимизация. Где-то рядом будет поле "дополнительные
ключи оптимизации" или "дополнительные параметры". Туда впишите
-flto=auto. - Nikolay_Po(22.04.2025 23:53)
- Я такого места не нашел AlexBi(2 знак., 23.04.2025 05:09, картинка, картинка)
- И проверь, чтобы компилятор был GCC 14.2.Rel1 - с сайта АРМ можно
скачать. Рабоатает. Nikolay_Po(1 знак., 23.04.2025 10:48, ссылка)
- Самая свежая версия вовсе не требуется. - SciFi(23.04.2025 10:49)
- Включение LTO в одном ряду со сменой компилятора. Если уже
включать, то на свежей версии. Ещё: раз уж борешься за скорость,
просто проверь с другой версией компилятора. У меня 14й дал больший
размер кода, чем 12й и 13й. А значит - размотал циклы поглубже.
Может, и скорость вырастет. Стоит, как минимум, попробовать и
сравнить. Nikolay_Po(124 знак., 23.04.2025 11:15)
- А как же: "Регулярное обновление базового ПО это не про исправление
ошибок. Это про исключение необходимости, в критической ситуации,
прыгать через три поколения и отлавливать все глюки этого прыжка в
один (самый неподходящий) момент." (с) Скрипач. Nikolay_Po(1 знак., 23.04.2025 11:00, ссылка)
- Ну так плюсик зелёный нажми, над большим полем Other flags. В
Miscellaneous. - Nikolay_Po(23.04.2025 10:46)
- Разве HAL подключается в виде исходников? Скорее всего, объектный
код, то есть не ждите от него никакого LTO. - SciFi(22.04.2025 20:30)
Хабарка. "RISC-V: векторное расширение и алгоритм Витерби" Toчкa oпopы(1 знак., 21.04.2025 22:04, ARM, ссылка)