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

kan35

Участник
  • Постов

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

  • Посещение

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

    1

kan35 стал победителем дня 22 августа 2023

kan35 имел наиболее популярный контент!

Репутация

7 Обычный

Информация о kan35

  • Звание
    Знающий
    Знающий

Посетители профиля

3 300 просмотров профиля
  1. А Вы нам и не нужны уже! Мы же тут плодотворно общаемся))) (шучу, конечно же)
  2. itoa - тоже можно, только вот прелесть библиотек в том, чтобы взять что-то хорошо сделанное и использовать его для своего блага, а itoa можно и свой написать за 5 минут. Как вариант - есть еще от coremark printf (а может они сами его где-то позаимствовали), с опциональной поддержкой плавающей точки. Он тоже единицы кБ занимает. https://github.com/eembc/coremark/tree/main/barebones
  3. Чтобы вручную не переключать --specs=nano.specs, полнота выбирается в свойствах линкера. Там же включается поддержка плавающей точки.
  4. Я там выше писал, компилятор - С18, для pic18. ANSI 89. И спасибо всем за комментарии
  5. Регистр объявлен так: extern volatile far unsigned char RCREG4; не хотелось бы делать { тип i = RCREG4; } (у меня на самом деле оно примерно так и есть) Хочу, чтобы переменная в стеке не появлялась совсем. Просто поясню зачем мне это нужно: сейчас занялся высвобождением памяти, контролируя глубину стеков всех задач, таким образом, спасая один байт в обработчике прерываний я могу убавить стеки в 6ти задачах на 1, то есть по сути высвободится 6 байт. у меня такая мысль тоже была, но есть нюанс - в какой регистр свободен в этот момент... Я конечно применяю, совсем простые инструкции, типа: void vApplicationIdleHook( void ) { _asm sleep _endasm } А вот с регистрами уже просадка... плохо понимаю архитекктуру выходного кода, да и архитектуру процессора тоже плохо осознаю 🙂
  6. Заменил unsigned char byte; byte = RCREG4; byte = RCREG4; byte = RCREG4; на (void)RCREG4; (void)RCREG4; (void)RCREG4; и по результату работы кода вижу, что он уже не делает вычитку из регистра. Компилятор C18 к сожалению не знаю как можно посмотреть дизассемблер этого куска кода... Есть ли еще что-нибудь более жестко регламентирующее, чтобы он не удалял эти строки из работы?
  7. Доброго дня всем! Пробую уменьшить расход стеков, компилятор у меня с очень низкими возможностями оптимизации, потому вот такой вопрос: Нужно считать несколько раз регистр, но само значение не нужно. Сейчас я завожу переменную и читаю в неё. unsigned char byte; byte = RCREG4; byte = RCREG4; byte = RCREG4; Но это же бессмысленно, как записать в Си чтение в никуда? Спасибо всем.
  8. Всем доброго дня, Есть подозрение на недостаточность стека в определенных случаях. Попытался использовать функцию uxTaskGetStackHighWaterMark. Из описания https://www.freertos.org/uxTaskGetStackHighWaterMark.html следует, что нужно лишь определить INCLUDE_uxTaskGetStackHighWaterMark -> 1 Правильно ли я понимаю, что он заполняет стек определенным числом и потом вычитывает и смотрит на сколько он залез на шаблон?
  9. Наверное в этом есть смысл при работе кода из внешней памяти, на сколько я понимаю в ESP flash висит как раз на SPI. При памяти на кристалле - 1мс это совершенно не нагрузка. Например, на самом утлом PIC18 - 12000 циклов между тиками при 1мс. Получается расход на обслуживание ОСРВ наверное будет - 1-10%, вполне приемлемо. Лично мне просто 1мс привычно, оно и в Windows 1мс кстати, в общем устоялось так.
  10. Вот так "легким движением руки" процессор 144МГц, с TCM и L1 кэш памятью, FPU и TZ затесался у нас между CM0 и CM3. Вам нельзя работать в присяжных с вашей объективностью 🙂
  11. Ну опять 25, BL702 имеет ядро близкое к CM4-7. Вы подбираете варианты, чтобы высказать негатив? Coremark Вам тоже не Вам авторитет... странное отношение к синтетическим тестам, вы же можете открыть исходники и увидеть что там за попугаи, и прочитать описание почему выбраны именно такие вычисления, с обоснованиями Эллиптические кривые - было бы интересно попробовать. Но задача, я бы сказал - специфическая, чтобы из результатов делать широкие выводы. Я кстати, недавно делал подсчет MD5 (где есть 64 битные аккумуляторы) на PIC18, вот там я мечтал об Амуре. Так что всё относительно 😉 Позволю выразить такое мнение: если бы Микрон начал массово выпускать продукты близкие по функционалу AVR или PIC18, то мы уже приобрели бы значительный технологический суверенитет. А производительности Амура достаточно для 99% задач для этого класса микроконтроллеров. Даже 16кБ ОЗУ это достойный объем.
  12. Не совсем так, матрица шин, хоть и работает на частоте ядра, но она делится между многими мастерами, например DMA, у которого есть пачковый burst доступ, плюс время на захват шины и будет процессор M7 сидеть без данных или без кода многие десятки циклов. Только не говорите "а можно не использовать DMA" 🙂 , но кстати за счет деления SRAM банки в STM32 - там можно распределить нагрузку на матрицу шин, но все же . В общем и целом у CM0-CM4 всё те же слабые точки, что и у других архитектур того же уровня интеграции. Кстати, TCM на некоторых контроллерах может быть использована для кода тоже. Конечно же лучше, когда кэш находится и в самом процессоре. Ну и опять мы внезапно пришли к сравнению SCR1 с CM7... Все таки, более честно будет сравнивать с СM0 или хотя бы с СM3, так как у SCR1 есть аппаратное умножение, но точно не с CM7.
  13. Согласен на счет ширины шины между кэш и память, этого я не учел. Но какая эффективность у этого решения на реальных задачах - нужно хотя бы уметь оценить (так как ширину этой шины нельзя регулировать как правило - понять пользу от нее на реальных приложениях будет не так то просто - лучше на %% или в разы). У STM32 кэш так же находится за шинной матрицей, поэтому ваша претензия не обоснована. И опять же - есть предварительные замеры производительности: https://wiki.mik32.ru/CoreMark_Test и по этим данным кэш QSPI достаточно эффективен на задачах, близких к реальным. И немного лирики. Я встречался со случаями, когда производительности 500МГц не хватало для автосигнализации и разработчик требовал 1ГГц минимум, начинали разбираться в чем дело - машина состояний - он по очереди опрашивает разные датчики и у него всё по микросекундам уже. Говорю - применяй RTOS и будет тебе достаточно 10МГц, в ответ - "нет, мы боимся, мы не умеем, мы не хотим, дайте 1ГГц".
  14. Амур работает на 32МГц, при этом QSPI - на 16МГц, соотвественно, требуется 64мб/с, а есть 8, но хорошая новость в том, что кэш таки есть, он не в процессоре, а не блоке QSPI, его объем составляет 1кБ. Кстати, на STM32 флэш весьма медленная, около 30МГц, соответственно какой-нибудь STM32F4 на 180МГц будет иметь 6 циклов ожидания, а ведь у него ART акселератор - тот же кэш - составляет тот же 1кБ. Но считается, что флэш на нем не сильно его тормозит. А ведь это почти как в Амуре по количеству циклов ожидания. Хотя на QSPI еще и команды, протокол передачи... тут нужно просто замерять на самом деле. На счет TCM памяти - это память, которая не имеет задержек доступа из за загрузки матрицы шин, для сигнальных вычислений или чего то максимально реалтаймового. Но минус - не доступна для DMA.
×
×
  • Создать...