-
Постов
1 240 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Сообщения, опубликованные VladislavS
-
-
Вы всё ещё создаёте пользователей с именами, содержащими русские буквы? Тогда мы идём к вам 🙂
-
Советую не "зависать" на такой фигне, иначе до программирования контроллера вы так никогда не доберётесь 😞
- 1
-
У ТС STM32F401, насколько я помню, чего его искать...
-
-
1 час назад, maksimdag0 сказал:
Ведь если не установить пакет, то создать проект не получится.
Это ошибочное утверждение. Создаёте пустой проект и добавляете в него всё необходимое руками, предварительно скачав/написав это самостоятельно. А с пакетом можно просто тыкнуть галочки в визарде - вот для этого он и нужен.
-
1 час назад, jcxz сказал:
Это как? По абсолютному константному адресу, вычисленному написателем программы? типа: *(int *)0x12345678 ?
Вообще, в жизни так бывает. Например, в заголовочном файле контроллера задефаёнен адрес буфера USB
#define USB_PMAADDR (APB1PERIPH_BASE + 0x00006000U)
В программе используется так
inline const auto ep_buf_dscr = (volatile EP_BUF_DSCR *)USB_PMAADDR; ep_buf_dscr[0].ADDR_TX = EP0_ADDR_TX; ep_buf_dscr[0].COUNT_TX = 0;
Без мэджик намберов, но смысл тот же. volatile буфер есть, но линкер о нем ничего не знает.
-
2 часа назад, dxp сказал:
На основании чего?
А зачем его оставлять, если нет обращений к нему?
-
Адрес возврата в mepc. Поэтому для вложенных прерываний его надо сохранять.
- 1
-
У RISC-V в этом плане зоопарк. Вендоры кто во что горазд. У кого-то есть аппаратное сохранение как Cortex-M, у кого-то нет. Надо доки на контроллер прерываний конкретного ядра читать. Судя по стартапу, вам надо всё самому сохранять.
-
Причём тут Ulink2, если ругань "Not a genuine ST Device"?
-
Нашёл на просторах сети патч для поддержки аппаратного сохранения регистров при входе в прерывание для ядра QingkeV4 контроллеров от WCH.
https://github.com/hydrausb3/riscv-none-elf-gcc-xpack
Новые версии GCC поддерживают спецификацию The RISC-V Instruction Set Manual 20191213, поэтому ддя процессоров с IMAC (GD32VF103, CH32V20x) строка конфигурации превратилась в -march=rv32imac_zicsr_zifencei -mabi=ilp32.
Для IMACF CH32V30x соответственно -march=rv32imafc -mabi=ilp32f.Прерывания с аппаратным сохранением регистров определяем с __attribute__((interrupt("WCH-Interrupt-fast"))) как это в MounRiver принято.
Собрал со всеми -multi-lib.
xpack-riscv-none-elf-gcc-12.2.0-1-win32-x64-wch.zip
xpack-riscv-none-elf-gcc-12.2.0-1-linux-x64-wch.tar.gz
- 2
-
Не, без rtos. Пока просто щупаю. Тут ещё на каждом уровне пилить, пилить и пилить.
-
Если честно, я ХЗ как оно там внутри работает. Связка CH32V307(SWD) <-> WCH-Link <-> OpenOCD-WCH <-> riscv-none-elf-gdb <-> VisualGDB в Visual Studio.
-
19 минут назад, yes сказал:
прерывания отключены?
Код уже в прерывании. Вроде других прерываний не должно поверх быть. Сейчас попробую запретить вообще перед этим местом.
19 минут назад, yes сказал:сохраните а0 в два регистра до и после lui, ну и брек после
Я на С/С++ пишу. Если только ассемблерными вставками грязной лапой залезть...
19 минут назад, yes сказал:выровняйте эту комманду на 32
Выравнивание ничего не дало.
---------------------------------------------------------------------
Докладываю. Похоже, отладчик гадит. Запрет прерываний немного раньше по коду ничего не меняет. А вот если точку останова поставить чуть позже этой команды, то регистр оказывается не испорчен.
-
Коллеги, не дайте умом тронуться, одолел меня RISC-V.
Контроллер CH32V307. Ядро QingKeV4 c расширениями rv32imafc и abi = ilp32f судя по мануал. Команда непосредственной загрузки константы в регистр lui a5, 0x40011 кроме загрузки a5 портит ещё и а0.
Вот под отладкой стою на команде.
Теперь делаю один шаг. а5 загружен, а0 сломан.
Команда закодирована правильно согласно талмудам.
Подскажите, что происходит? Куда копать?
PS: есть и другие команды, которые так себя ведут...
-
Линковщик раблтает в пределах одной прошивки. А требуется чтобы сторонняя прошивка по какому-то фиксированному адресу нашла нужные данные.
-
23 минуты назад, dimka76 сказал:
В конец таблицы добавить еще один элемент (вектор)
Что-то я не подумал, что стартап и таблица векторов это тоже одно из табу на редактирование :)))
-
Magic Number проще всего положить в незадействованый вектор в таблице векторов прерываний.
-
В CMSIS есть макросы __UNALIGNED_UINT32_WRITE, __UNALIGNED_UINT16_WRITE, __UNALIGNED_UINT32_READ и __UNALIGNED_UINT16_READ. Можно использовать, это будет компиляторонезависимо. Ну и просто подсмотреть как "взрослые дяди" это делают.
-
1 час назад, gazpar сказал:
Если бы. Аллокаторы, строки, принты и прочие потроха. Но в стиле десктопной разработки.
А виновата, конечно, стандартная библиотека. Дурдом.
-
Сообщение об ошибке это слишком просто. Надо так сломать, чтобы оно просто потихуши коварно не работало. И бежать. Раз по хорошему договориться не можете.
-
Только что, gazpar сказал:
Вопрошание было на либу, которой можно заменить. В ответ же только вопросы: "зачем оно надо?"
Потому что глупо искать там где светлее, а не там где потерял.
1 минуту назад, gazpar сказал:Только вот у меня их найти как-то не выходит особо.
Ну я использую стандартные библиотеки идущие в комплекте с GCC, IAR и ARMClang. Ничем они не отличаются особо. Да и прибиты к тулчейну основательно так, не перенесёшь. Других вариантов не знаю. Да и не нужны они. Лучще разберитесь что в проекте пожирает ресурсы.
8 минут назад, gazpar сказал:Начнут применять стрикции, чтобы войти в доступное подмножество.
Лучше вместе сядьте и разберитесь какие тяжёлые вещи они применяют. А то может они и правда как на PC программируют и никакой библиотекой это не исправишь.
-
-
15 минут назад, gazpar сказал:
Именно поэтому и хочу найти лёгкую либу
Да не бывает лёгких и тяжёлых стандартных библиотек. Все они плюс/минус одинаковые, так как реализуют одинаковый функционал, заданный стандартом языка программирования.
15 минут назад, gazpar сказал:Т.к. я не знаю, чего там наворотили коллеги
Ну посмотрите map-файл хотя бы, что там весит столько.
15 минут назад, gazpar сказал:Мне же нужно оптимизировать внутреннюю либу сделанную коллегами.
Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации". И почему вместо этого вы решили стандартную библиотеку оптимизировать? Её явно не дураки писали - там всё в порядке. Пусть ваши коллеги свой код и оптимизируют.
15 минут назад, gazpar сказал:Ключами компиляции/линковки удалось ужать до 350кБ.
Можно глянуть на ключи? Похоже?
CPP_FLAGS := -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -Wall LD_FLAGS := -Wl,--gc-sections -nostartfiles -specs=nano.specs -specs=nosys.specs
Вопрос по настройкам в keil
в Keil
Опубликовано · Пожаловаться
Чтобы закрепить
Боле подробно из IAR-овской документации. В других IDE принцип такой же.
FlashLoaderGuide.ENU.pdf