Как стать автором
Обновить

Комментарии 11

  • В PFIC всего 3 бита приоритетов прививаний (кроме QingKeV4A, где их 4, но семейств CH32V это не касается).

Кстати, либо я что то не понимаю, либо все проекты из MountRiver для CH32V3xx по умолчанию не используют при компиляции FPU

Речь идет о примерах от WCH? Так-то никто не запрещает указать архитектуру -march=rv32imafc_zicsr и пользоваться FPU в свое удовольствие.

__attribute__((interrupt("WCH-Interrupt-fast")))

Здесь стоило уточнить, что это нестандартное расширение от wch, обычный gcc его не поддерживает. Есть несколько костылей вроде вот такого:

void TIM3_IRQHandler(void) __attribute__((naked)); //Это чтобы не компилятор не сохранял контекста и не делал обычного возврата
void TIM3_IRQHandler( void ) //Это чтобы сохранить регистры s0 и s1, если они используются в вызываемом коде и чтобы сделать подходящий возврат mret вместо ret
{
    __asm volatile ("call TIM3_IRQHandler_Real; mret"); //Вызов naked-кода для обработки и возврат из прерывания
}

void TIM3_IRQHandler_Real( void )
{
 /* Interrupt handler that works with upstream GCC */
}

Но тоже не идеально. Скажем, с FPU это вообще не работает.

Контроллер прерываний PFIC

Стоило указать еще одну забавную особенность местного контроллера прерываний. Он может работать аж в трех режимах: общий обработчик на все прерывания, таблица адресов и таблица переходов. В первом варианте программист вручную должен проверять mcause чтобы узнать какое именно прерывание возникло. Во втором используется таблица, заполненная адресами обработчиков. И в третьем - таблица, заполненная командами переходов.

Зачем это сделано - без понятия.

Речь идет о примерах от WCH? Так-то никто не запрещает указать архитектуру -march=rv32imafc_zicsr и пользоваться FPU в свое удовольствие

Я пишу про работу из под IDE. Обычно, если производитель дает примеры под тот же чистый Eclipse, не говоры уже про IAR и Keil, в настройках проекта делается вся конфигурация. Тут, для CH32V3XX даже в примере с названием FPU, собственно FPU не настроен. Из встроенного в MoutRiver генератора проектов под CH32V3 тоже не включается FPU. Так что я исключительно про экосистему WCH.

Не знаю как там у вас в IDE, но флаги-то компилятора где-то задать можно. Возможно, сложнее, чем руками в makefile, но мало ли, в настройках проекта...

даже в примере с названием FPU, собственно FPU не настроен.

А чего его настраивать? В смысле что в нем вообще поддается настройке? Единственное, что вспоминается - настройки округления. Которые почти никогда не нужны.

Если интересно, про дробные числа в v303 я когда-то писал.

Так что я исключительно про экосистему WCH.

"экосистема wch" это в первую очередь сами контроллеры. В вашем случае v307. Он прекрасно поддерживает FPU. И все, что требуется от программиста - указать компилятору архитектуру IMAFC. Не удивлюсь, если в примерах от производителя она и так указана.

У нас разные представления об экосистемах:)

rv32imafc_zicsr

в ide она выбирается в выпадающем списке, так что надо будет как то исхитрятся.

а еще эту штуку надо указывать для внешних компиляторов xpack

В IDE это выглядит в духе конструктора "собери сам". Не очень понятно кто такой RVXW.

да я про это место. возможно настройки ABI крутить надо

RVF расширение выбрать и все работает. Но я то про логику IDE. От визарда IDE я ожидаю что мне настроят проект под выбранное ядро:) IDE то не сторонняя, а своя. Вот и все.

Кстати, либо я что то не понимаю, либо все проекты из MounRiver для CH32V3xx по умолчанию не используют при компиляции FPU. В стартапе, для CH32V3xx FPU всегда включается, а в настройках TragetProcessor проекта по умолчанию - нет...

Это же вроде норма. Например в IAR в подавляющем большинстве примеров для чипов на Cortex M4 тоже FPU по умолчанию отключен.

Еще незнаю, особенность это IDE для WCH или чего то еще, то если в проект для CH32V2 притянуть библиотеку math.h, то в проект линкуется вся библиотека целиком, а не только используемые функции. С ходу плюс примерно 15 кб флеша. Со string так же.

Ну да, сам дурак, слишком долго жил в мире розовых пони и CubeIDE:) Счас проверил как перетаскивал проект на Geehy F405, таки да, в примерах под Eclipse у них FPU выключен. Просто раз WCH запилили свой IDE на Eclipse, то логично хотя бы в примере, который называется FPU, врубить этот самый FPU в настройках проекта:)

Еще незнаю, особенность это IDE для WCH или чего то еще, то если в проект для CH32V2 притянуть библиотеку math.h, то в проект линкуется вся библиотека целиком, а не только используемые функции. С ходу плюс примерно 15 кб флеша. Со string так же.

Рискну предположить что это про GCC. Я все проекты MoutRiver собираю на оптимизации -Оs. Начинал с портирования рабочего проекта с ST32F103R. Без оптимизации вообще не лезет в CH32V203R (FreeRTOS + CanOpenNode). Прям катастрофический. C оптимизацией примерно тоже самое по размеру что и STM-й код (собранный на -O2) и разница где-то 15-20КБ. Глянул на текущие .lst файлы, вроде как ничего лишнего из библиотек нет ни на V203, ни на V307.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации