-
- В куске кода 5 функций. Для начала нужно разобраться, куда именно уходит ресурс, иначе разговор ни о чем. - VLLV(25.11.2017 09:40)
- Могу посоветовать сделать переменные 32-разрядные - uint32_t. - Bill(24.11.2017 12:23)
- Рубрика "вредные советы". Чем тип int не угодил? И букв в 2 с половиной раза меньше. - SciFi(24.11.2017 12:37)
- 32 разряда для ARM является естественной разрядностью. Тип int может иметь различную разрядность, все зависит от конкретной реализации компилятора. Bill(53 знак., 24.11.2017 16:35)
- Компилятор для 32-разрядного Арма, у которого sizeof(int)!=4 - в студию! - SciFi(24.11.2017 16:43)
- Общеизвестно, что ARM-архитектуры хуже дружат с типами, отличающимися по размеру от размера регистра. lloyd(200 знак., 24.11.2017 12:49)
- Поскольку мне это не было известно, проделал эксперимент. Функция складывает два вектора длиной 1024. Процессор F303, частота 72МГц, компилятор IAR8.11. Время выполнения в тактах не зависит signed/unsigned, но зависит от битности: 8 - 7425, 16 - йцукен(2511 знак., 25.11.2017 14:01)
- Отвратительный код! Нафиг R12 столько раз грузить одним и тем же? - Ксения(24.11.2019 12:31)
- Векторные операции - это как раз то, что очень хорошо ложится на SIMD - lloyd(25.11.2017 14:10)
- Специально привёл листинг, чтобы было видно, что компилятор не генерирует SIMD. Но если вставить ручками, получается 3328 тактов. йцукен(249 знак., 25.11.2017 14:23)
- а ведь я запомню. :-) Нафиг мне ОЗУ экономить? У меня ее 128К в кристалле. - Лагунов(24.11.2017 16:54)
- Прошу пардону, конечно, но после лицезрения Вашего кода могу заметить, что типы переменных - наименьшая из проблем :-) - SciFi(24.11.2017 23:29)
- я этим языком (Си) занялся уже на пенсии. Чего ж вы хотите? Пусть хоть как-то работает. - Лагунов(25.11.2017 09:02)
- Прошу пардону, конечно, но после лицезрения Вашего кода могу заметить, что типы переменных - наименьшая из проблем :-) - SciFi(24.11.2017 23:29)
- Сам ты ересь. int - это феншуй, гармония и лепота. Только не на 8-битниках, конечно :-) - SciFi(24.11.2017 12:50)
- Вот слезешь с арма и узнаешь, что int бывает однобайтовым, но в байте - 16 бит - lloyd(24.11.2017 12:59)
- Встречал только 16 бит у AVR и char 16 бит у tms320f28. Чтобы вместе не встречал. - misyachniy(24.11.2017 17:36)
- Бывает и так в одном месте :-) char32=bool32=int32=long32 - sav6622(25.11.2017 10:24)
- Так sizeof(char) == sizeof(int) == 1 у C28x. lloyd(107 знак., 24.11.2017 20:16)
- Встречал только 16 бит у AVR и char 16 бит у tms320f28. Чтобы вместе не встречал. - misyachniy(24.11.2017 17:36)
- Вот слезешь с арма и узнаешь, что int бывает однобайтовым, но в байте - 16 бит - lloyd(24.11.2017 12:59)
- Поскольку мне это не было известно, проделал эксперимент. Функция складывает два вектора длиной 1024. Процессор F303, частота 72МГц, компилятор IAR8.11. Время выполнения в тактах не зависит signed/unsigned, но зависит от битности: 8 - 7425, 16 - йцукен(2511 знак., 25.11.2017 14:01)
- 32 разряда для ARM является естественной разрядностью. Тип int может иметь различную разрядность, все зависит от конкретной реализации компилятора. Bill(53 знак., 24.11.2017 16:35)
- Рубрика "вредные советы". Чем тип int не угодил? И букв в 2 с половиной раза меньше. - SciFi(24.11.2017 12:37)
- Во-первых, удобнее не SysTick->VAL, а DWT->CYCCNT. Во-вторых, что есть func(&struct1)? Может быть, там биткоины майнятся? В-третьих, не надо ничего инлайнить, нужно включить оптимизацию по сумме всех исходников. В gcc это называется link time SciFi(45 знак., 24.11.2017 10:45)
- 1)В чём разница, если таймер запущен? В доках от STM не вижу, только в хидере нашёл. В каком документе читать? 2)Нет, работа с периферией, подключенной как внешняя PSRAM. Через вставку дрыгноги замерял, меньше 1/8 периода съедаю. 3) Пошёл читать и Dingo(13 знак., 24.11.2017 11:03)
- Кстати, да, надо проверить регистр FLASH->ACR на предмет включения ускорителей. Причём в первой ревизии 407 был глюк, из-за которого нужно выключать PRFTEN, ЕМНИП. - SciFi(24.11.2017 11:12)
- STM (почти) не перепечатывает доки от Арма. См. тут, например --> - SciFi(24.11.2017 11:08, ссылка)
- Оно логично, но почему поиском ничего не найти? Хотя бы в карте регистров могли упомянуть?.. Да и по вашей ссылке понятно только, что оно там есть, не более. #3) не даёт эффекта. Dingo(172 знак., 24.11.2017 11:26)
- Кстати, учу кликать строчки в оглавлении, дорого -->. На самом деле они хитрые жуки, конечно. Пишут "DWT registers are described in the ARM®v7M Architecture Reference Manual". Потом пишут "This document is only available in a PDF version to SciFi(94 знак., 24.11.2017 11:33 - 11:39, ссылка, ссылка)
- Вы - не вы, если не подколите. Нашёл уже. Оказывается, ещё и от ARM-а документы надо грызть, не только 4(DS, PM, RM, Errata) от изготовителя. (Вспоминается AVR8 с одним как сказка.) Dingo(231 знак., 24.11.2017 11:58)
- Выходит, включено. Кстати, куда торопимся? Может быть, оно и так всё успеет? Или уже подтверждено, что не успеет? - SciFi(24.11.2017 12:37)
- Код. Но, видимо, копать дальше буду понедельник. Dingo(2365 знак., 24.11.2017 13:28 - 13:33)
- если printf в обработчике, то это жесткое турецкое порно. на крайняк какой-нибудь TxDMA_Post(). PUTCHAR где-то там же. все подслова SEND для пакетов читаю как нечто, ожидающее завершения отправки, потому дальше не понял - Vit(24.11.2017 13:38)
- Оно же не срабатывает? Или всё одно тормозить может(каким образом тогда?!)? Вот поди ж ты - оно! Спасибо.
Но почему - всё равно не понял.Внутри версия. Dingo(756 знак., 24.11.2017 13:50 - 25.11.2017 12:29)- Я на нечто подобное нарывался. Теперь вся отладка складывается в FIFO, только потом ее обрабатываю. michas(24.11.2017 17:08)
- Спасибо ещё раз. Копировал по проектам, поправляя, при необходимости, тип данных. Вчера сделал под произвольный тип, в том числе структуры. Может ещё кому пригодится. Dingo(1 знак., 28.07.2022 11:22, ссылка)
- DMA хорош после некоторых размышлений: можно на лету добавлять информацию для вывода. В цикле в большинстве итераций останется только опрос флага "сделано". Fifo тоже норм, даже без прерываний: проверить наличие сообщения в буфере; если есть, Dingo(150 знак., 24.11.2017 19:11)
- для отладочного вывода спецом заделан SWO - Vit(24.11.2017 17:59)
- Обычно для отладки проекта используем специально написанный клиент на ПК. Как программу на TCL легко срастить с SWO? Кажется что по старинке проще через UART. - michas(24.11.2017 18:11)
- Вы не поверите, но SWO и есть UART. lloyd(83 знак., 24.11.2017 20:25, ссылка)
- А, вспомнил в чем была проблема. Перешли на М0, а там нет SWO. Вот такая загогулина получилась. :) - michas(25.11.2017 08:34)
- и не на всех упаковках CM3 есть. но такая отладка с выхлопом чаще нужна при довольно объёмном софте, а это на малоногие упаковки до недавнего времени не очень-то ложилось. как компромисс можно отлаживаться и на бОльших упаковках. в любом из Vit(188 знак., 25.11.2017 08:51)
- Я правильно понял из статьи, что нет возможности передавать данные без какого-либо Link и его драйвера? Т.е. это все таки не UART в привычном виде? Я пробовал в кейле выводить отладку через ST-Link (для F205) в окно отладчика. Но дальше не копал. - michas(25.11.2017 08:57 - 09:01)
- Обычно юзаю либо Keil, либо EmBitz+Segger_SWO_Viewer - Vit(25.11.2017 19:54)
- Ну эта штука умеет плевать данные сама, без участия процессора вообще (к примеру при переключении контекста). Там какой-то (очень простой) формат пакета, который вроде как изкоробки умеет передавать несколько потоков данных lloyd(96 знак., 25.11.2017 11:13 - 11:21, ссылка)
- Я правильно понял из статьи, что нет возможности передавать данные без какого-либо Link и его драйвера? Т.е. это все таки не UART в привычном виде? Я пробовал в кейле выводить отладку через ST-Link (для F205) в окно отладчика. Но дальше не копал. - michas(25.11.2017 08:57 - 09:01)
- и не на всех упаковках CM3 есть. но такая отладка с выхлопом чаще нужна при довольно объёмном софте, а это на малоногие упаковки до недавнего времени не очень-то ложилось. как компромисс можно отлаживаться и на бОльших упаковках. в любом из Vit(188 знак., 25.11.2017 08:51)
- А, вспомнил в чем была проблема. Перешли на М0, а там нет SWO. Вот такая загогулина получилась. :) - michas(25.11.2017 08:34)
- Вы не поверите, но SWO и есть UART. lloyd(83 знак., 24.11.2017 20:25, ссылка)
- Обычно для отладки проекта используем специально написанный клиент на ПК. Как программу на TCL легко срастить с SWO? Кажется что по старинке проще через UART. - michas(24.11.2017 18:11)
- Я на нечто подобное нарывался. Теперь вся отладка складывается в FIFO, только потом ее обрабатываю. michas(24.11.2017 17:08)
- Оно же не срабатывает? Или всё одно тормозить может(каким образом тогда?!)? Вот поди ж ты - оно! Спасибо.
- если printf в обработчике, то это жесткое турецкое порно. на крайняк какой-нибудь TxDMA_Post(). PUTCHAR где-то там же. все подслова SEND для пакетов читаю как нечто, ожидающее завершения отправки, потому дальше не понял - Vit(24.11.2017 13:38)
- Не успеет. Надо за 500 мксек по внешнему прерыванию записать во "внешнюю память" 9 байт по 8-ми битной шине, отправить пакет из 28 байт, принять при наличии такой же по размерам. Ещё и держать это всё в буфере, пока своей очереди не дождётся. Dingo(304 знак., 24.11.2017 13:10 - 13:22)
- ОЗУ - сомневаюсь, что будет выгода, да и делать это надо умеючи (не забыть ремап на 0, исполнение с адресов 0x20000000 медленное). Ну и вот эти операции "по 8-битной шине" (небось, и скорость там 1 МГц) надо бы делать в фоне, через DMA что ли, SciFi(54 знак., 24.11.2017 13:27)
- пересылки можно зацепить на DMA, причем часто в STM32 такое можно сделать через "ивенты", а не вручную из обработчика прерывания - Vit(24.11.2017 13:26)
- Код. Но, видимо, копать дальше буду понедельник. Dingo(2365 знак., 24.11.2017 13:28 - 13:33)
- Выходит, включено. Кстати, куда торопимся? Может быть, оно и так всё успеет? Или уже подтверждено, что не успеет? - SciFi(24.11.2017 12:37)
- Вы - не вы, если не подколите. Нашёл уже. Оказывается, ещё и от ARM-а документы надо грызть, не только 4(DS, PM, RM, Errata) от изготовителя. (Вспоминается AVR8 с одним как сказка.) Dingo(231 знак., 24.11.2017 11:58)
- Поиском найти, в гугле, например. Доки от Арма, скажем так, специфические, к ним ещё привыкать надо. Ну а PRFTEN - это и есть "ART Accelerator prefetch queue instruction is not supported", вот так криво они выразились. Я на практике реально ловил SciFi(49 знак., 24.11.2017 11:29)
- Кстати, учу кликать строчки в оглавлении, дорого -->. На самом деле они хитрые жуки, конечно. Пишут "DWT registers are described in the ARM®v7M Architecture Reference Manual". Потом пишут "This document is only available in a PDF version to SciFi(94 знак., 24.11.2017 11:33 - 11:39, ссылка, ссылка)
- Оно логично, но почему поиском ничего не найти? Хотя бы в карте регистров могли упомянуть?.. Да и по вашей ссылке понятно только, что оно там есть, не более. #3) не даёт эффекта. Dingo(172 знак., 24.11.2017 11:26)
- 1)В чём разница, если таймер запущен? В доках от STM не вижу, только в хидере нашёл. В каком документе читать? 2)Нет, работа с периферией, подключенной как внешняя PSRAM. Через вставку дрыгноги замерял, меньше 1/8 периода съедаю. 3) Пошёл читать и Dingo(13 знак., 24.11.2017 11:03)