Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 2 minutes ago, GenaSPB said: Этого не зватило Не хватило - это как? Я прописал только ее. Там еще есть dsp3D_LL_readFromDepthBuffer - ее пока не знаю как прописывать, поэтому закомментируйте, иначе функция не будет рисовать точку. void dsp3D_drawPointDepthBuffer(int32_t x, int32_t y, float32_t z, color32_t color) { if((x > -1) && (x < SCREEN_WIDTH) && (y > -1) && (y < SCREEN_HEIGHT)) { int32_t index = (x + y * SCREEN_WIDTH) * 3; // if(dsp3D_LL_readFromDepthBuffer(index) < z) // return; dsp3D_LL_writeToDepthBuffer(index, z); dsp3D_LL_drawPoint(x, y, color); } } В main пробуйте последовательно dsp3D_renderPoints (это точно должно работать) dsp3D_renderWireframe dsp3D_renderFlat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба Изменено 10 января, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 5 minutes ago, GenaSPB said: Так это на вашем 800 МГц проце.... А у меня 208 МГц. Но и у Фабио такой же проц и скорость нормальная. Нужно, чтобы кто нить запустил на F7. Я все больше подозреваю, что тормозят операции с плавающей точкой. Не зря в библиотеке arm_math прописывается FPU_PRESENT и DSP_PRESENT... GenaSPB, а вы можете посчитать, сколько тактов проходит между вызова и записи точки? Если столько же сколько у меня (345-380) значит ваш проц берет частотой (что вряд ли - частота всего в 4 раза выше, а вот быстродействие в десятки раз). Если меньше, значит мой проц не рационально работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Нет не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба Не только частотой. Тут а7 а не м7. И cmsis скомпилирована с максимальной оптимизацией по скорости. Еще вас спрашивали про пиксел клок вашего дисплея. В остатках кода увидел размеры 1024 на 600. По паспорту на 7 дюймов обычно 50 МГц. Скажем прямо - с таким дисплеем и при 32 бит цвете на работу процессора с памятью sdram на FMC совсем не остается пропускной способности. 1024 на 600 при 60 кадров в секунду и 32 бит цвете это около 200 мегабайт в секунду из памяти к ltdc. На моем аппарате 800х480 и память 16 бит ddr3 на 533 мгц. Потому 120 мегабайт в секунду при 32 бит цвете не влияют существенно. Изменено 10 января, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 37 minutes ago, GenaSPB said: Скажем прямо - с таким дисплеем и при 32 бит цвете на работу процессора с памятью sdram на FMC совсем не остается пропускной способности. Нет. У меня дело в расчетах. Ибо очистка экрана мгновенная, а вот кадр рисуется 1 секунду. Хотя..... может быть попиксельное обращение к LTDC дезорганизует работу донельзя..... сейчас посмотрю, как будет меняться время расчета, если отключить вывод на экран. 40 minutes ago, GenaSPB said: Скажем прямо - с таким дисплеем и при 32 бит цвете Поставил разрешение 800х480 - все равно медленно. 1 hour ago, GenaSPB said: Нет не могу. Простите, а в чем сложность? В 157 камне нет DWT или его аналога? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Посчитал у себя - все те же 380 тактов на расчет точки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 46 minutes ago, Salamander said: Нет. У меня дело в расчетах. Ибо очистка экрана мгновенная, а вот кадр рисуется 1 секунду. Хотя..... может быть попиксельное обращение к LTDC дезорганизует работу донельзя..... сейчас посмотрю, как будет меняться время расчета, если отключить вывод на экран. Поставил разрешение 800х480 - все равно медленно. Простите, а в чем сложность? В 157 камне нет DWT или его аналога? Код подсчеиа иактов с использованием dwt дайте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 9 minutes ago, GenaSPB said: Код подсчеиа иактов с использованием dwt дайте delta_tick=DWT->CYCCNT-last_tick; // считаю разницу. last_tick=DWT->CYCCNT; //обновляю счетчик. Код выше вставляете в функцию dsp3D_drawPointDepthBuffer (неважно куда) Глобально объявляете uint32_t last_tick, delta_tick; delta_tick - смотрите в отладчике в нем постоянно разница тактов Вот это инициализация DWT в F7. Как в MP157 - не знаю. uint32_t DWT_Delay_Init(void) { /* Disable TRC */ // CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; // ~0x01000000; /* Enable TRC */ // CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // 0x01000000; DWT->LAR = 0xC5ACCE55; /* Disable clock cycle counter */ DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk; //~0x00000001; /* Enable clock cycle counter */ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; //0x00000001; /* Reset the clock cycle counter value */ DWT->CYCCNT = 0; /* 3 NO OPERATION instructions */ __ASM volatile ("NOP"); __ASM volatile ("NOP"); __ASM volatile ("NOP"); /* Check if clock cycle counter has started */ if(DWT->CYCCNT) { return 0; /*clock cycle counter started*/ } else { return 1; /*clock cycle counter not started*/ } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 3 часа назад, Salamander сказал: В первом условии накосячить сложно, да и по факту - всего 7 тактов занимает запись точки. Это не запись точки. Неправильно измерили. Есть такое понятие как "кеш" для внешней памяти. Хоть включен ли он у вас - только вам ведомо. 3 часа назад, Salamander сказал: Еще вопрос - серия F7 имеет аппаратную поддержку плавающей точки? Наверное да. Если так, то может быть такое, что у меня эта функция отключена? Посмотреть в листинги и убедиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Quote Как в MP157 - не знаю. Да, там DWT такого нет... Есть дркугие счетчики циклов но Вам они бесполезны... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба 13 minutes ago, jcxz said: Это не запись точки. Неправильно измерили. Есть такое понятие как "кеш" для внешней памяти. Хоть включен ли он у вас - только вам ведомо. Все может быть. Но если я к памяти вообще не обращаюсь, а просто рассчитываю точку, это занимает 380 тактов. Если поделить частоту (208 мгц) на такты и на разрешение получится чуть больше секунды. Примерно одну секунду у меня и рассчитывается один кадр. Вот скрин с демо я подразобрался в библиотеке. В функцию вывода точки действительно нужно добавить строки для заполнения буфера. А вывод буфера на экран отдельная функция - dsp3D_present render - это время расчета. present - это вывод на экран кадра. Как видите, расчет при 480х272 занимает 41 ms считаем. 480х272х20.4 = 2 663 424 точки в секунду. То есть примерно 78 тактов на точку при 208 МГц. А у меня 380 9 minutes ago, GenaSPB said: Есть дркугие счетчики циклов но Вам они бесполезны... А вы знаете, как их запустить? Как потом использовать - я написал delta_tick=DWT->CYCCNT-last_tick; // считаю разницу. last_tick=DWT->CYCCNT; //обновляю счетчик. Гляньте, навскидку, все ли хорошо в настройках arm_math? arm_math.h Изменено 10 января, 2021 пользователем Salamander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба FPU аппаратный используете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 14 minutes ago, GenaSPB said: FPU аппаратный используете? А как это проверить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба .... Нафик. Стер. При вызове dsp3D_projectVertex из dsp3D_renderPoint используется память за пределами массива coord. И об этом сообщает компилятор еще до исполнения... Куда автор смотрел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться