А что там разбираться? У ДМА есть такой па раметр как латентность. У разных МК она разная.
Почитайте сообщения выше и узнаете в чем разбирались, семейство оговаривалось stm32f1xx. у Вас есть конкретное значение из даташита "латентности" или просто поговорить пришли? нет тогда к чему этот вброс? На текущий момент выяснено: 1. у stm32f0xx 5 тактов на мем то мем проверено людьми 2. у stm32f1xx 9 тактов на мем то мем, проверено мною в том числе 3. у stm32f3xx 4 тактов на мем то мем, хз придут проверю, пока не ясно, интересно, т.к. серия 303 хорошо для осликов подходит. 4. у stm32f4xx 4 тактов на мем то мем, проверено людьми, в принципе, МК есть можно перепроверить. И интерфейс камеры нужно проверить.
процедура ручного считывания отнимает 30 кбайт памяти, т.е. половину из доступной, лучше я на ней анализатор спектра намучу или сохранение на флешку скриншотов, а тут такая подстава. свободно памяти 2.4 кбайта, это только на исправление косяков можно сказать.
Кстати, у F103С8 флеша 128К, а не 64, хотя не везде можно получить к ней доступ. Родная утилита для ST-Link нормально шьет, в VS выдает ошибку и через интерфейс OpenOCD и через Texane ST-Link, а J-Link и в студии нормально работает.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Очень полезная информация. А главное ни в одном даташите нет этих данных. Стесняются своего DMA что ли? Однако на F0 получается забирать за 5 тактов
Код:
ldrb r0,[r1] ;2 strb r0,[r2] ;2 adds r2,1 ;1
И это на ядре М0. А у вас МК на ядре М3 и 6 тактов? Плохая сосиска И размер... при 4000 семплов длина сосиски будет 4000*6 = 24 000 байт.
Вы изменяете скорость количеством команд? не смешите, дайте реальную скорость своего кода посчитанную как-то желательно на логическом анализаторе. "4000*6 = 24 000 байт" кто вам сказал такое? что это за расчет? просто ни в какие ворота он не годится, смешно просто. подсказка каждая команда не весит 1 байт, вторая подсказка, не каждая команда выполняется за 1 такт. И смех и грех. мой код, кстати, лучше вашего, сосиска не плоха.
Код:
LDR r2,[r1,#0x00] STRB r2,[r0,#0x07]
Вот только выполняются эти две команды по 3 такта и это есть в описании этих команд, вернее в описании 3 задержки в каждой команде, чему они равны хз, ну судя по всему по 1 такту а там ХЗ, но по факты вместе они 6 тактов занимают
процедура ручного считывания отнимает 30 кбайт памяти, т.е. половину из доступной, лучше я на ней анализатор спектра намучу или сохранение на флешку скриншотов, а тут такая подстава. свободно памяти 2.4 кбайта, это только на исправление косяков можно сказать.
Кстати, у F103С8 флеша 128К, а не 64, хотя не везде можно получить к ней доступ. Родная утилита для ST-Link нормально шьет, в VS выдает ошибку и через интерфейс OpenOCD и через Texane ST-Link, а J-Link и в студии нормально работает.
Вот это интересно, т.е. программу собираем для мк STM32F103СB, чтобы ошибки по памяти не было, а потом тупо пытаемся залить в МК с заявленными 64 кбайтами 128? Где можно об этом почитать, выглядит загадочно
Вот это интересно, т.е. программу собираем для мк STM32F103СB, чтобы ошибки по памяти не было, а потом тупо пытаемся залить в МК с заявленными 64 кбайтами 128? Где можно об этом почитать, выглядит загадочно
В документации есть глава "Device overview", там все подвиды мк сведены в таблицу и сгруппированы в том числе по объему флеша и RAM. Например, у меня есть F103VC, в таблице он в одной группе с 103VD и 103VE, в таком случае обычно(может и всегда) все эти 3 мк есть 103VE, т.е. самый старший из них. Реально у 103VC в 2 раза больше флеша и на четверть больше RAM. F103C8 в таблице рядом с F103CB и они оба F103CB. F407VE рядом с F407VG и они оба VG. Так под F407VG прогу и собираем, главное подобрать правильные настройки программатора или его самого, иначе придется шить отдельной утилитой, что не так удобно. Еще есть и более экзотические варианты, у того же F030 не только в 2 раза больше памяти, но еще есть 32-ти битный таймер и по сути он F031. У F101 есть USB и т.д.
У меня и STM32F407 при программном за 4 такта шпарит (теже 2 команды он выполняет за 4 такта, а не за 6, это для тех, кто думал скорость на ассемблерных командах мерить), а по ДМА за 6! Тоже в 1.5 раза оно медленнее, в режиме мем то мем по крайней мере, а в других оно не завелось.
Спойлер ---------- GFX, по количеству тактов на команду, может Вам будет интересно вот это. Как раз с этим МК тест делал.
О, спасибо за подтверждение, но это я итак знал, что команды тут не выполняются за 1 такт, хоть некоторые и упрямо лепят мне ассемблерные команды в доказательство количества циклов. Только практический замер может дать реальное значение скорости.
На текущий момент выяснено ДМА: 1. у stm32f0xx ? 2. у stm32f1xx 9 тактов на мем то мем, точно 3. у stm32f3xx ? 4. у stm32f4xx 6 тактов на мем то мем, точно в m2m, p2m не заводится(вроде и не должен работать, gpio не поддерживается), кто завел, выложите код для проверки скорости. Программное чтение: 1. у stm32f0xx ? 2. у stm32f1xx 6 тактов, точно 3. у stm32f3xx ? 4. у stm32f4xx 4 такта, точно
У меня и STM32F407 при программном за 4 такта шпарит (теже 2 команды он выполняет за 4 такта, а не за 6, это для тех, кто думал скорость на ассемблерных командах мерить), а по ДМА за 6! Тоже в 1.5 раза оно медленнее, в режиме мем то мем по крайней мере, а в других оно не завелось.
Не подтверждаю. Последовательность вот таких команд
Код:
asm("LDRB R0, [R1]"); asm("STRB R0, [R2], #1");
выполняется за 14355 тактов, DMA отрабатывает за 14383, разница в одну сотую такта... Итого 4 и 4, как в статье и написано.
На текущий момент выяснено ДМА: 1. у stm32f0xx ? 2. у stm32f1xx 9 тактов на мем то мем, точно 3. у stm32f3xx ? 4. у stm32f4xx 6 тактов на мем то мем, точно в m2m, p2m не заводится(вроде и не должен работать, gpio не поддерживается),
Читайте референс. В stm32f4xx два ДМА. Один работает с ЖПИО, другой - нет. Это связано с распределением шин.
у stm32f0xx 6 тактов с p2m.
И ваще. Это от Трэвора Мартина (Trevor Martin) для М3. Для других семейств принцип тот же.
Цитата:
Each DMA transfer is made up of four phases: a sample and arbitration phase, an address computation phase, bus access phase and a final acknowledgement phase. Each phase takes a single cycle, with the exception of the bus access phase.
У меня и STM32F407 при программном за 4 такта шпарит (теже 2 команды он выполняет за 4 такта, а не за 6, это для тех, кто думал скорость на ассемблерных командах мерить), а по ДМА за 6! Тоже в 1.5 раза оно медленнее, в режиме мем то мем по крайней мере, а в других оно не завелось.
Не подтверждаю. Последовательность вот таких команд
Код:
asm("LDRB R0, [R1]"); asm("STRB R0, [R2], #1");
выполняется за 14355 тактов, DMA отрабатывает за 14383, разница в одну сотую такта... Итого 4 и 4, как в статье и написано.
У меня работает за 6, это точно и это факт, почему у вас за 4 не знаю, я проверю DMA1 может оно быстрее. Код выложите свой сравню. ДМА может работать с разной скоростью, нужно понять просто, как выжать максимальную.
На текущий момент выяснено ДМА: 1. у stm32f0xx ? 2. у stm32f1xx 9 тактов на мем то мем, точно 3. у stm32f3xx ? 4. у stm32f4xx 6 тактов на мем то мем, точно в m2m, p2m не заводится(вроде и не должен работать, gpio не поддерживается),
Читайте референс. В stm32f4xx два ДМА. Один работает с ЖПИО, другой - нет. Это связано с распределением шин.
у stm32f0xx 6 тактов с p2m.
И ваще. Это от Трэвора Мартина (Trevor Martin) для М3. Для других семейств принцип тот же.
Цитата:
Each DMA transfer is made up of four phases: a sample and arbitration phase, an address computation phase, bus access phase and a final acknowledgement phase. Each phase takes a single cycle, with the exception of the bus access phase.
Может и реальный пример есть, а то что-то теория с практикой не сходится? ДМА1 вообще не работает с GPIO, DMA2 работает, но медленнее, у меня за 6 тактов. Тактирование проверить еще, но если бы там косяк был и процессор бы медленнее забирал. Да и перечитайте, что вы написали, там не о 4 тактах говорится "with the exception of the bus access phase.", т.е. доступ к шине может быть больше а на сколько не указано, это от загрузки шины зависит видимо, ну оно так и есть стоит два ДМА запустить их скорость падает.
У меня работает за 6, это точно и это факт, почему у вас за 4 не знаю, я проверю DMA1 может оно быстрее. Код выложите свой сравню. ДМА может работать с разной скоростью, нужно понять просто, как выжать максимальную.
Я перебрал кучу настроек, всегда получается 4 такта кроме случаев, когда размер источника в 2 раза больше, т.е., например, читаешь из порта 16 бит, а пишешь по 8, но тогда выходит 8 тактов, а не 6. С разной скоростью DMA тоже не должен работать, если не считать лаги. VGA либа, на которую я ссылался, выдает 800x600, там скорость вывода пикселей ровно 40MHz, а скорость проца - 160MHz. Код практически такой-же, как и на F103: Спойлер
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения