- Ребята, кто знает, есть ли в 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, ссылка)
- Почему результат АЦП у STM32F030 может быть всегда ноль, при этом
фактически на входе практически напряжение питания? Тактирование
есть, флаги завершения преобразования выставляются/сбрасываются,
канал выбран правильный, пробовал выбрать несколько каналов, все
дают ноль, хотя на входе что-то есть. Программа сделана в КУБе,
надеялся так быстрее запустить, а оно не хочет измерять АЦП, выдает
всегда ноль, и не понятно что ему не нравится. - AlexBi(18.04.2025 18:13, ARM, полностью)
- Да может тупо проц неисправен (см. п. 1 по ссылке) POV(1 знак., 19.04.2025 13:20, ссылка)
- Действительно, оказалось, что проц неисправен. Сегодня утром еще
помучился, пробовал и так и этак, потом заменил м/с и все
заработало. Не думал что такое возможно. Есть подозрение, что пока
включал плату мог подать повышенное напряжение на процессор. В
итоге, процессор работал, на выводах сигналы формировались, все
флаги у АЦП устанавливались и сбрасывались, но результатом
измерения был ноль. - AlexBi(21.04.2025 15:01)
- Ну мы же все понимаем, какой из вариантов на 99% верный: "проц
сломан"/"компилятор глючный"/"звёзды не так сошлись"/"ымбедер
накосячил". - SciFi(19.04.2025 13:24)
- Нужно расписать преобразование по этапам, и по ним же пошагово
проверять. "ДМА не влияет, в самом регистре результата АЦП ноль" - точно так ? DMA может не запуститься, читать откуда попало и
писать куда попало...
простыню Чек-лист в студию ! - De_user(19.04.2025 13:17)
- На AVDD подано питание? - my504(18.04.2025 21:56)
- Чтобы было = 0 нужно или запуск запретить, или REF отключить - De_user(18.04.2025 20:11)
- [мои очередные высказывания о калокубе] Если делать по даташиту,
все ОК. А вообще, по умолчанию все ноги сконфигурированы как
аналоговый вход. И если на входе 0, то либо неправильно АЦП
настроен, либо DMA (если, конечно, оно используется для получения
данных). - Eddy_Em(18.04.2025 20:10)
- А порты установлены как analogInput? - mse homjak(18.04.2025 18:23)
- Нога МК сконфигурирована в Analog Mode? - il-2(18.04.2025 18:23)
- Вопрос по атомарной записи - чтению в Stm32 f4. Использую uint8_t
uint16_t для передачи флагов между задачами и передачи данных из
ISR, не парясь, т.к. видел в каком то документе по ARM что 8bit
16bit и 32bit запись чтение в ARM атомарные. И тут Deepseek
сообщает мне, что мол нельзя так делать, т.к. если uint16_t не
выровнена по четной границе, запись может быть не атомарной. Правда
или бред? И надо мол использовать #include <stdatomic.h> Mty1(173 знак., 19.04.2025 20:30, ARM, полностью)
- Поднятие приоритета текущего выполнения в RISC-V вместо BASEPRI у
ARM. Nikolay_Po(1187 знак., 05.01.2025 20:21, ARM, ссылка, полностью)
- Олды, подскажите как настроить кейл так чтобы он при прошивке не
стирал последнюю страницу памяти, там хранятся калибровочные
данные. stm32f030 - danuna(09.04.2025 10:49, ARM, полностью)
- Кто-нибудь реализовывал BACnet на стеке lwIP? Погуглил, мало чего
понял если честно. Вроде есть какие-то проекты на гитхабе, но там
десятки файлов, общей сути не уловил. Если правильно понимаю, он
поверх UDP работает? А нет ли у кого простенького примера, чтобы
пару значений из прибора вычитывать? - FDA(05.04.2025 09:57, ARM)
- STM32: Для чего используется сброс вместо вхождения в Standby или
Stop? std_engineer(782 знак., 28.06.2021 01:58,
, ARM, полностью)MBedder
- Миграция с STM32F103 на GD32F103. Запись во Флэш полностью
совместимая? - IBAH(26.03.2025 10:49, ARM, полностью)
- Между попытками найти почему у меня запись во флешь вызывает
странные последствия решил проверить относительное быстродействие
при исполнении программы из флеш и из ОЗУ для AT32F407 Результат
получился не очевидный. В эксперименте процессор работал на частоте
близкой к максимальной (225МГц), программа выводила 0-1 на ножку,
скриптом линкера помещал программу в разные участки памяти и
смотрел осциллографом период сигнала на выводе. Результаты
получились такие: AlexBi(160 знак., 21.03.2025 21:28, ARM, полностью)
- Ребята,а где вообще качают stm библиотики? наблюдаю юзер мануал Balda(161 знак., 23.03.2025 11:51, ARM, полностью)
- Захотел пошить GD32F103 в Keil5, нагенерировал проект в Cube,
открыл в Кейле, заменил МК с STMа на GD, ошибка линковки "error:
L6236E: No section matches selector - no section to be FIRST/LAST."
Что я делаю не так? - IBAH(22.03.2025 21:51, ARM, полностью)
- Возникла непонятная проблема при записи во встроенную флеш у
AT32F407. Запись ведется при исполнении программы из этого же
флеша, в область не занятую программой. Перед записью работают
уарты, таймеры, ацп, дма, ethernet, ни чего не запрещается, только
запрещаются прерывания через __disable_irq() То, что программа
остановится на время записи меня не смущает. Запись в итоге
выполняется (записывается один сектор), но после записи программа
может улететь не пойми куда, что AlexBi(175 знак., 21.03.2025 12:30, ARM, полностью)
- Насколько периферия CH32V схожа с CH32F (Таймеры и пр.)? vpv.vpv(395 знак., 19.03.2025 11:11, ARM, полностью)
- Большое всем спасибо! Теперь как-то энтузиазму поприбавилось. )) - vpv.vpv(19.03.2025 13:48)
- периферию шью по докам от СТМ, но одним глазом смотрю в родную.
Пока проколов не было. Дажэ наоборот, в ВЦШной, у СПИ нарисовано,
что только ЛСБ(илиМСБ) лезет первым, но если программировать по
СТМовской, то лезет первым и тот, и тот. - mse homjak(19.03.2025 12:11)
- С CH32F периферия должна совпадать почти полностью, там даташиты
даже общие. Про STM32F читать можно, но имейте ввиду, что CH32 не
копия, очень очень похожие, но другие МК. AlexG(71 знак., 19.03.2025 12:03)
- Даже не столько ch32f, а stm32f. Большая части периферии, похоже,
взята оттуда. Да и информации по STM-кам больше. Разве что эта
информация перемешана с мусором вроде ST-HAL. COKPOWEHEU(152 знак., 19.03.2025 11:39,
)
- Да. - petrd(19.03.2025 11:21)
- Да, так и надо делать. - SciFi(19.03.2025 11:13)