Перейти к содержанию
    

VladislavS

Свой
  • Постов

    1 240
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Сообщения, опубликованные VladislavS


  1. 44 минуты назад, maksimdag0 сказал:

    Влад, не получается, вот что keil говорит на это

    Выберите какое ядро у вашего процессора и всё получится.

    image.thumb.png.235f928ef57525236e1140f66b4e1d0d.png

     

    Би: Ну, гравицаппа - это то, без чего пепелац может только так летать. А с гравицаппой - в любую точку Вселенной - фьюить! - за пять секунд.

     

  2. 1 час назад, maksimdag0 сказал:

    Ведь если не установить пакет, то создать проект не получится.

    Это ошибочное утверждение. Создаёте пустой проект и добавляете в него всё необходимое руками, предварительно скачав/написав это самостоятельно. А с пакетом можно просто тыкнуть галочки в визарде - вот для этого он и нужен.

  3. 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 буфер есть, но линкер о нем ничего не знает.

  4. У RISC-V в этом плане зоопарк. Вендоры кто во что горазд. У кого-то есть аппаратное сохранение как Cortex-M, у кого-то нет. Надо доки на контроллер прерываний конкретного ядра читать. Судя по стартапу, вам надо всё самому сохранять.

  5. Нашёл на просторах сети патч для поддержки аппаратного сохранения регистров при входе в прерывание для ядра 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

     

    • Like 2
  6.  

    19 минут назад, yes сказал:

    прерывания отключены?

    Код уже в прерывании. Вроде других прерываний не должно поверх быть. Сейчас попробую запретить вообще перед этим местом.

     

    19 минут назад, yes сказал:

    сохраните а0 в два регистра до и после lui, ну и брек после

    Я на С/С++ пишу. Если только ассемблерными вставками грязной лапой залезть...

    19 минут назад, yes сказал:

    выровняйте эту комманду на 32

    Выравнивание ничего не дало.

    ---------------------------------------------------------------------

    Докладываю. Похоже, отладчик гадит. Запрет прерываний немного раньше по коду ничего не меняет. А вот если точку останова поставить чуть позже этой команды, то регистр оказывается не испорчен.

  7. Коллеги, не дайте умом тронуться, одолел меня RISC-V.

    Контроллер CH32V307. Ядро QingKeV4 c расширениями rv32imafc и abi = ilp32f судя по мануал. Команда непосредственной загрузки константы в регистр lui a5, 0x40011 кроме загрузки a5 портит ещё и а0.

    Вот под отладкой стою на команде.

     01.thumb.png.11bcd0adf7798dcaff95941a7ccda082.png

    Теперь делаю один шаг. а5 загружен, а0 сломан.

    02.thumb.png.f4913ba0365cd840342e52ca6629b477.png

    Команда закодирована правильно согласно талмудам.

    03.thumb.png.b6f9ce90b0e3bba19c940bf9d7671c74.png

    Подскажите, что происходит? Куда копать?

    PS: есть и другие команды, которые так себя ведут...

  8. 23 минуты назад, dimka76 сказал:

    В конец таблицы добавить еще один элемент (вектор)

    Что-то я не подумал, что стартап и таблица векторов это тоже одно из табу на редактирование :)))

  9. В CMSIS есть макросы __UNALIGNED_UINT32_WRITE, __UNALIGNED_UINT16_WRITE, __UNALIGNED_UINT32_READ и __UNALIGNED_UINT16_READ. Можно использовать, это будет компиляторонезависимо. Ну и просто подсмотреть как "взрослые дяди" это делают.

  10. Только что, gazpar сказал:

    Вопрошание было на либу, которой можно заменить. В ответ же только вопросы: "зачем оно надо?"

    Потому что глупо искать там где светлее, а не там где потерял.

    1 минуту назад, gazpar сказал:

    Только вот у меня их найти как-то не выходит особо.

    Ну я использую стандартные библиотеки идущие в комплекте с GCC, IAR и ARMClang. Ничем они не отличаются особо. Да и прибиты к тулчейну основательно так, не перенесёшь. Других вариантов не знаю. Да и не нужны они. Лучще разберитесь что в проекте пожирает ресурсы. 

     

    8 минут назад, gazpar сказал:

    Начнут применять стрикции, чтобы войти в доступное подмножество.

    Лучше вместе сядьте и разберитесь какие тяжёлые вещи они применяют. А то может они и правда как на PC программируют и никакой библиотекой это не исправишь.

  11. Это точно. 350к кода это год писать не разгибаясь 🙂 Хотя, с дуру и хрен сломать можно.

    Вот, например, реализация USB-CDC c "C++ на максималке". 2340 байт, из которых только таблица векторов прерываний 400 байт.

    image.thumb.png.d55fdb378895b01bd0b84f86746a1c19.png

    • Like 1
  12. 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

     

×
×
  • Создать...