firstvald 24 18 августа Опубликовано 18 августа · Жалоба 6 hours ago, EdgeAligned said: А массив указателей на ф-ции - разве не вариант "вычисляемого перехода"? И я чет не понял, зачем столько NOP-ов в таблице? Они ж ничем не отличаются. Это чето похоже на индусский код. Есть такой трюк - мы пишем баааальшую последовательность нопов. в функции задержки прыгаем в какую то точку и получаем задкржку в виде оставшихся. это нужно когда надо сделать регулируемую задержку с минимально возможным шагом по времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 223 18 августа Опубликовано 18 августа · Жалоба 3 часа назад, whale сказал: Если под каждые 256 частоты делать отдельную таблицу никакой озу не хватит. Вы о чём? Разумеется, собирать код каждый раз под очередной канал, очередную частоту и очередное количество её периодов — скважность 5000 в предыдущей теме была, поэтому времени навалом. И диапазон 500 кГц ±100 кГц задаёт разница в 26 тактов на 64 МГц, никакие не 256, не говоря о том, что ПЭ с таким разбросом ещё поискать, обычно ±10 кГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_ 59 18 августа Опубликовано 18 августа · Жалоба 3 часа назад, whale сказал: Я не читаю посты забаненых, предпочитаю общение с нормальными людьми а не муда...ми. https://rutube.ru/video/92c6a7c6a5ea0e75301d19372e84bf0c/?r=wd 1 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 18 августа Опубликовано 18 августа · Жалоба 2 часа назад, firstvald сказал: Есть такой трюк - мы пишем баааальшую последовательность нопов. в функции задержки прыгаем в какую то точку и получаем задкржку в виде оставшихся. это нужно когда надо сделать регулируемую задержку с минимально возможным шагом по времени. Только это не работает на ARM-ах. На AVR-ах или чём-то подобном простейшем - возможно будет работать. На ARM (из-за его сложной матрицы шин, конвеера команд, нескольких bus-masters, кешей, буферов записи, частичного распараллеливания инструкций и т.п.) - такое работать не будет. Что бы не казалось ТС. 4 часа назад, amaora сказал: Может быть тогда перекладывать данные в регистры GPIO через DMA по событию таймера? Аналогично не будет работать. В смысле - не обеспечит точной задержки. По той же самой, вышеуказанной причине. Задержка будет плавать +-трамвайная остановка. От любого чиха будет плавать. PS: ТСу нужно: 1) или вернуться на AVR-ы или подобные им простейшие, где есть точная растактовка команд, и там вволю ногодрыгать; но тогда даже STM8L ему будет закрыт (так как имеет DMA и вроде даже простейший конвеер); 2) или излечиваться от ногодрыжеской болезни, если уж решил заниматься ARM. Других вариантов нет. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 223 18 августа Опубликовано 18 августа · Жалоба 1 час назад, jcxz сказал: такое работать не будет Цитата The SRAM can be accessed by bytes, half-words (16 bits) or full words (32 bits), at maximum system clock frequency without wait state and thus by both CPU and DMA. И порты напрямую с АЛУ соединены, т.е. если отключить ПДП и периферию, то программа в ОЗУ и вывод в порты будут работать предсказуемо. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 18 августа Опубликовано 18 августа · Жалоба 2 часа назад, Plain сказал: И порты напрямую с АЛУ соединены, т.е. если отключить ПДП и периферию, то программа в ОЗУ и вывод в порты будут работать предсказуемо. В даташите и правда рисуют нечто подключенное напрямую к ядру. Надо посмотреть в детали... 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 24 18 августа Опубликовано 18 августа · Жалоба 7 hours ago, jcxz said: Только это не работает на ARM-ах. На AVR-ах или чём-то подобном простейшем - возможно будет работать. На ARM (из-за его сложной матрицы шин, конвеера команд, нескольких bus-masters, кешей, буферов записи, частичного распараллеливания инструкций и т.п.) - такое работать не будет. Что бы не казалось ТС. конечно же работает. обработку последовательности команд одна за одной никто не отменял. до тех пор пока не включена оптимизация. иначе наличие команды ноп вообще ставится под вопрос. другой вопрос стабильность получаемой задержки. тут ответ однозначный - ее нет. но мы можем сказать, что она не меньше такой- то. если нужно растащить фронты импульсов друг от друга то чем еще ? ну и нужно отбросить категоричность. задача может быть решена разным сочетанием аппаратных и программных приемов. от внешнего аппаратного узла, до внутреннего программного колечка типа ардуины, в котором опускаются и поднимаются ноги. эти решения будут иметь разные стоимости, с точки зрения времени разработки, отладки, стоимости аппаратуры при тиражировании, получаемыми характеристиками. в реальности, коллеги занимающиеся разработкой управления моторчиком, грохнули года два, и процесс продолжается, на референсных платах, разбираясь с таймерами. так что, надо очень взвешивать: во что ввязываться , нужно ли это или будет достаточно что- то набросать по - верхам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 19 августа Опубликовано 19 августа · Жалоба Просто как вариант. Не принципиально для какого процессора. такой-себе время-задержечный "ЦАП" Реализуем "набор" линейных "тактовых" задержек в двоичном коде 1248. . . . в виде функций (более оптимально указатели). В зависимости от разрядности, для каждого разряда "задания" - в таблице свой вызов. В аналогичной таблице - могут быть корректирующие константы для каждого разряда, учитывающие точность задержки и накладные расходы на вызов-возврат. Реализация - не то что "на любителя", а можно сказать на фаната своего дела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 19 августа Опубликовано 19 августа · Жалоба On 8/18/2024 at 10:47 AM, amaora said: GPIO через DMA А чего перекладывать, память не безгранична. On 8/18/2024 at 11:38 AM, majorka65 said: И зачем произвольный выбор ног? Все заняты другими делами. On 8/18/2024 at 12:33 PM, Plain said: времени навалом Вы думаете процессор все это время отдыхает ? Вы заблуждаетесь. On 8/18/2024 at 11:59 AM, firstvald said: прыгаем в какую то точку Как прыгать то с минимальным временем ? Нужно еще вычислить куда прыгать, в этом главный вопрос . Just now, k155la3 said: В зависимости от разрядности, для каждого разряда "задания" - в таблице свой вызов Не совсем понял вашу мысль. On 8/18/2024 at 12:33 PM, Plain said: задаёт разница в 26 тактов на 64 МГц В ЛЧМ до 300 кгц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 19 августа Опубликовано 19 августа (изменено) · Жалоба Вижу только один путь - делаем сто нопов подряд и смещаем указатель команд на нужную строку нопов. Весь вопрос как сместить это указатель (счетчик команд) на нужную величину с минимальными потерями, тк смещение от цикла к циклу все время меняется. Самый быстрый по моему просто прибавить нужное смещение, кто нить знает как это сделать в iar ? Изменено 19 августа пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 19 августа Опубликовано 19 августа · Жалоба 17 минут назад, whale сказал: А чего перекладывать, память не безгранична. Делать там циклический буфер, пока ПДП выгружает в BSRR порта одну половину буфера - программа может наполнять вторую. 4 минуты назад, whale сказал: Весь вопрос как сместить это указатель И, главное, чтобы ни дай бог не возникло какое-нибудь прерывание или потребность сделать что-то еще. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 19 августа Опубликовано 19 августа (изменено) · Жалоба Just now, Сергей Борщ said: прерывание или потребность сделать что-то еще На период вывода все запрещено. Just now, Сергей Борщ said: программа может наполнять вторую. не успеет скорее всего Изменено 19 августа пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eddddy 31 19 августа Опубликовано 19 августа · Жалоба Сделать на ПЛИС, и можно легко, естественно и непринужденно вводить любые задержки, в зависимости от тактовой. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 19 августа Опубликовано 19 августа (изменено) · Жалоба Just now, eddddy said: Сделать на ПЛИС Это примерно тоже самое что слетать на луну раньше китайцев на текущий момент. Изменено 19 августа пользователем whale 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Priest_89 8 19 августа Опубликовано 19 августа · Жалоба 39 minutes ago, whale said: память не безгранична 40 minutes ago, whale said: Все заняты другими делами. 40 minutes ago, whale said: Вы думаете процессор все это время отдыхает Возьмите контроллер из нормальной серии хоть тех же ST - например stm32f407, а еще лучше - gd32f450 - цена 1000 р, 2 "моторных" таймера - то что нужно для управления полумостами, частота 200 МГц, fpu, dsp команды. Явно же дешевле будет и проще, чем тратить драгоценное время на постройку костылей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться