Obam 38 19 августа Опубликовано 19 августа · Жалоба Видел, применяется в китайских лазерных рулетках. https://www.compel.ru/infosheet/RUIMENG/MS5351M Занятная "балалайка", вот только кварц к ней 25..27 МГц и дока - "TRUE CHINA" )-8Ж За ProgMan-ом обращаться к нашим очень "дорогим чайным друзьям". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbinger 10 20 августа Опубликовано 20 августа · Жалоба 5 часов назад, Obam сказал: дока - "TRUE CHINA" Оно? https://ur8qp.com/_ld/0/3_MS5351_M.pdf (upd) Неполное. Впрочем, перевести 39 страниц - дня на 2 работы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
НЕХ 7 20 августа Опубликовано 20 августа · Жалоба Разве она чем-то отличается от SI5351 ? https://eax.me/stm32-si5351/ 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 223 20 августа Опубликовано 20 августа · Жалоба 9 часов назад, vov4ick сказал: Там же трёхфазный таймер, можно по фазе на мост и одна фаза запасная. Да, когда выяснилось, что это по-прежнему то же самое изделие из предыдущих тем, и каналов не сотня, а всего два, вопрос про решению задачи на TIM1 аппаратно снова актуален. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 20 августа Опубликовано 20 августа (изменено) · Жалоба 14 hours ago, _pv said: листинг в студию. __NOP();__NOP();__NOP();__NOP();__NOP(); switch (FG) { case 3: asm(" NOP"); case 2: asm(" NOP"); case 1: asm(" NOP"); case 0: asm(" NOP"); } __NOP();__NOP();__NOP();__NOP();__NOP(); \ 0x160 0xBF00 Nop \ 0x162 0xBF00 Nop \ 0x164 0xBF00 Nop \ 0x166 0xBF00 Nop \ 0x168 0xBF00 Nop \ 0x16A 0x.... LDR R4,??DataTable17_2 \ 0x16C 0x7825 LDRB R5,[R4, #+0] \ 0x16E 0x2D00 CMP R5,#+0 \ 0x170 0xD0E5 BEQ ??main_17 \ 0x172 0x2D02 CMP R5,#+2 \ 0x174 0xD0E1 BEQ ??main_15 \ 0x176 0xD3E1 BCC ??main_16 \ 0x178 0x2D03 CMP R5,#+3 \ 0x17A 0xD0DD BEQ ??main_14 \ ??main_18: (+1) \ 0x17C 0xBF00 Nop \ 0x17E 0xBF00 Nop \ 0x180 0xBF00 Nop \ 0x182 0xBF00 Nop \ 0x184 0xBF00 Nop Вот нопами окропил по краям чтобы точно выделить код. Мы видим постоянные сравнения что и приводит к шагу в 50кгц А с вашей задержкой такой код \ 0x0 0x4487 add pc, r0 115 116 asm("nop"); \ 0x2 0xBF00 nop 117 asm("nop"); \ 0x4 0xBF00 nop 118 asm("nop"); \ 0x6 0xBF00 nop 119 asm("nop"); \ 0x8 0xBF00 nop 120 asm("nop"); \ 0xA 0xBF00 nop 121 asm("nop"); \ 0xC 0xBF00 nop 122 asm("nop"); \ 0xE 0xBF00 nop 123 asm("nop"); \ 0x10 0xBF00 nop 124 asm("nop"); \ 0x12 0xBF00 nop 125 asm("nop"); \ 0x14 0xBF00 nop Правда при изменении r0 c 10->12 18->20 26->28 итд шаг делает 10 кгц при других изменениях 4кгц с чем связано непонятно Изменено 20 августа пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 августа Опубликовано 20 августа · Жалоба 1 hour ago, whale said: Мы видим постоянные сравнения что и приводит к шагу в 50кгц On 8/18/2024 at 2:15 AM, jcxz said: При достаточно большой величине N должен получиться как раз ваш "вычисляемый переход". при 4 ветках видимо "дешевле" развернуть в сравнения, если сделать switch побольше и ещё и оптимизацию по скорости включить вроде должен нормально сделать, но опять же без особых гарантий что при смене параметров оптимизации не сломается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 20 августа Опубликовано 20 августа (изменено) · Жалоба Just now, _pv said: смене параметров оптимизации не сломается Я вообще стараюсь оптимизацию не применять могут быть всякие глюки. А по сбою шага никаких идей не подскажите ? как то слишком периодично ровно через 8 сбивается. В листинге все гладко, загадка.... Изменено 20 августа пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 августа Опубликовано 20 августа · Жалоба 4 minutes ago, whale said: А по сбою шага никаких идей не подскажите ? как то слишком периодично ровно через 8 сбивается. flash wait states, исполнение из ram Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 20 августа Опубликовано 20 августа · Жалоба 17 минут назад, whale сказал: стараюсь оптимизацию не применять Зря, очень зря. Без оптимизации используется наиболее простейший алгоритм построения, с минимальным набором инструкций и РОН. Включение оптимизации ускоряет генерируемый код в 2-3 раза. 20 минут назад, whale сказал: как то слишком периодично ровно через 8 сбивается А никто и не гарантирует, что NOP-ы будут равномерно проходить и исполняться. Они вообще могут выкидываться из исполнения, поскольку NOP применяется так же и для выравнивания инструкций по границам 4-х байт 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 20 августа Опубликовано 20 августа · Жалоба 3 часа назад, whale сказал: __NOP();__NOP();__NOP();__NOP();__NOP(); switch (FG) { case 3: asm(" NOP"); case 2: asm(" NOP"); case 1: asm(" NOP"); case 0: asm(" NOP"); } __NOP();__NOP();__NOP();__NOP();__NOP(); \ 0x160 0xBF00 Nop \ 0x162 0xBF00 Nop \ 0x164 0xBF00 Nop \ 0x166 0xBF00 Nop \ 0x168 0xBF00 Nop \ 0x16A 0x.... LDR R4,??DataTable17_2 \ 0x16C 0x7825 LDRB R5,[R4, #+0] \ 0x16E 0x2D00 CMP R5,#+0 \ 0x170 0xD0E5 BEQ ??main_17 \ 0x172 0x2D02 CMP R5,#+2 \ 0x174 0xD0E1 BEQ ??main_15 \ 0x176 0xD3E1 BCC ??main_16 \ 0x178 0x2D03 CMP R5,#+3 \ 0x17A 0xD0DD BEQ ??main_14 \ ??main_18: (+1) \ 0x17C 0xBF00 Nop \ 0x17E 0xBF00 Nop \ 0x180 0xBF00 Nop \ 0x182 0xBF00 Nop \ 0x184 0xBF00 Nop Вот нопами окропил по краям чтобы точно выделить код. Может хотя-бы прочитать что я писал? В 18.08.2024 в 03:15, jcxz сказал: При достаточно большой величине N должен получиться как раз ваш "вычисляемый переход". Вроде как очевидно, что 4 - слишком мало. Хотя-бы 8 нужно или больше. И очевидно что - оптимизация должна быть включена на максимум. 1 час назад, whale сказал: Я вообще стараюсь оптимизацию не применять Тогда никаких "вычисляемых переходов" можете не ждать. 1 час назад, whale сказал: могут быть всякие глюки. Надо код правильно писать. Чтобы глюков не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 20 августа Опубликовано 20 августа · Жалоба 1 hour ago, _pv said: flash wait states, исполнение из ram Поправить как нить можно в данном контексте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 августа Опубликовано 20 августа · Жалоба 44 minutes ago, whale said: 2 hours ago, _pv said: flash wait states, исполнение из ram Поправить как нить можно в данном контексте? собственно второе и лечит первое, вызванное тем что МК на большой частоте не успевает читать флэш что даже кэш на несколько слов не помогает и соответственно добавляет паузы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 20 августа Опубликовано 20 августа · Жалоба При линейном исполнении кода и при правильно настроенных буферах предвыборки задержек возникать не должно, поскольку по параллельной шине с флеши забирается инструкций больше, чем требуется. Задержки из-за сброса конвейера могут происходить при ветвлении кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 августа Опубликовано 20 августа · Жалоба 45 minutes ago, EdgeAligned said: При линейном исполнении кода и при правильно настроенных буферах предвыборки задержек возникать не должно, поскольку по параллельной шине с флеши забирается инструкций больше, чем требуется. Задержки из-за сброса конвейера могут происходить при ветвлении кода. это при правильно настроенных, PRFTEN по умолчанию выключен у STM32G070. в ram перенести этот десяток nopов всё равно надёжней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 20 августа Опубликовано 20 августа (изменено) · Жалоба PRFTEN действительно выключен, я так понял он уменьшает два такта считывания 8 байт из памяти до одного + можно уменьшить задержку сейчас LATENCY = 2 при 64мгц. Попробовать смогу только завтра. 17 minutes ago, _pv said: в ram перенести этот десяток nopов всё равно надёжней. Получается 80 нопов тут для более-менее перекрытия диапазона. С ram пока не работал, действительно можно объявить функцию через __ramfunc при инициализации а потом обращаться к ней в коде и будет выполнение из ram без задержек ? Или все несколько сложнее ? Изменено 20 августа пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться