-
- А почему код такой большой и стек используется Zikon(1382 знак., 07.03.2025 12:38)
- Да, надо было уточнить для чистоты эксперимента - MRS + GCC8 + Oo +
48МГц. Оптимизацию всю отключил специально. - petrd(07.03.2025 12:56)
- Надо сразу не глядя переключаться на GCC12 -> il-2(1 знак., 07.03.2025 14:10, ссылка)
- Зачем? Зачем мерить скорость при отключенной оптимизации? Какой в
этом смысл? - Nikolay_Po(07.03.2025 12:57)
- Мне же не скорость нужна, а на такты посмотреть без выкрутасов компилятора. - petrd(07.03.2025 13:00)
- Если MRS 2, то будет GCC12, вроде. И к первой я подключал xPack GCC
14. Успешно, если ручками прописать особенности архитектуры и
ручками реализовать wch-fast. - Nikolay_Po(07.03.2025 12:57)
- по умолчанию - GCC8 ! ; GCC12 - включать надо и компактный код генерит - неплохой! - Zikon(07.03.2025 13:00)
- Да, надо было уточнить для чистоты эксперимента - MRS + GCC8 + Oo +
48МГц. Оптимизацию всю отключил специально. - petrd(07.03.2025 12:56)
- выравнивание команд на куда переход идет - 2 и 4 байта играет роль - скорее всего ! Zikon(134 знак., 07.03.2025 11:32)
- Вот интересная статья, но только с ch32x035 может чем-то поможет ! Zikon(1 знак., 07.03.2025 09:19, ссылка)
- Предположу, что выравнивание инструкций во флеш меняется, отсюда и время доступа к ним, wait state. - Nikolay_Po(07.03.2025 09:06)
- Мужик пишет письмо на спичечную фабрику: "Я на протяжении 10 лет
покупаю спички Вашей фабрики и считаю количество спичек в коробке.
Вы их кладёте то 59, то 60 штук, иногда 61, а вчера положили 56. Вы
что там, совсем ебанутые?" - POV(07.03.2025 08:55)
- 8-D - Vit(07.03.2025 08:58)
- А как там флеш, задержки при чтении, предвыборка кода? Погрешность
измерения слишком велика, чтобы достоверно намерить 2 такта, КМК. - SciFi(07.03.2025 08:47)
- Систик работает на частоте ядра. Четко видно, что при добавлении
одного NOP, время увеличивается на 1 такт, а команды типа LW, SW -
2 такта. - petrd(07.03.2025 09:24)
- Это чётко - когда работа идёт из кэша. А когда случилось ветвление,
промах - тут уже может зависеть от места расположения данных во
флеш, от выравнивания. Может, какие архитектурные нюансы, типа
пересечения границы страницы и прочее... - Nikolay_Po(07.03.2025 09:29)
- Да, как мне кажется я и подобрался к этим архитектурным нюансам.
Вот и захотелось прояснить насколько получится и как это объяснить.
Ядро V2 достаточно простое, исхожу из того что кеша нет (могу
ошибаться, но подтверждения, что кеш есть тоже не видел). Может
быть есть какой-то буфер для префетча. По аналогии с другими МК WCH
предполагаю, что программа работает из теневого RAM, куда программа
перекочевала из флеш при загрузке. В месте кода где различия
обращение идет только к petrd(4 знак., 07.03.2025 09:48)
- Вроде бы доках упоминают flash wait states, это не бьётся с
"теневым ОЗУ". - SciFi(07.03.2025 10:02)
- Почему-же. В V20x V30x одновременно есть и zero-wait и
non-zero-wait. Для V003 может и не так, но суть моего вопроса не в
этом. - petrd(07.03.2025 10:20)
- Лёгкость мысли необычайная. Предлагаю разделить факты и предположения. Это как бы важно. - SciFi(07.03.2025 10:34)
- Теневое ОЗУ это для шустрых чипов за сотню МГЦ. - Andreas(07.03.2025 10:04)
- Почему-же. В V20x V30x одновременно есть и zero-wait и
non-zero-wait. Для V003 может и не так, но суть моего вопроса не в
этом. - petrd(07.03.2025 10:20)
- Чуть выше Zikon дал ссылку на статью, в которой сразу обращают внимание на то, что в один 32-бит регистр за раз попадает две 16-бит команды - это уже по сути мелкий кэш. - Vit(07.03.2025 09:52)
- Вроде бы доках упоминают flash wait states, это не бьётся с
"теневым ОЗУ". - SciFi(07.03.2025 10:02)
- Да, как мне кажется я и подобрался к этим архитектурным нюансам.
Вот и захотелось прояснить насколько получится и как это объяснить.
Ядро V2 достаточно простое, исхожу из того что кеша нет (могу
ошибаться, но подтверждения, что кеш есть тоже не видел). Может
быть есть какой-то буфер для префетча. По аналогии с другими МК WCH
предполагаю, что программа работает из теневого RAM, куда программа
перекочевала из флеш при загрузке. В месте кода где различия
обращение идет только к petrd(4 знак., 07.03.2025 09:48)
- Это чётко - когда работа идёт из кэша. А когда случилось ветвление,
промах - тут уже может зависеть от места расположения данных во
флеш, от выравнивания. Может, какие архитектурные нюансы, типа
пересечения границы страницы и прочее... - Nikolay_Po(07.03.2025 09:29)
- Систик работает на частоте ядра. Четко видно, что при добавлении
одного NOP, время увеличивается на 1 такт, а команды типа LW, SW -
2 такта. - petrd(07.03.2025 09:24)
- А почему код такой большой и стек используется Zikon(1382 знак., 07.03.2025 12:38)