mantech 48 7 февраля Опубликовано 7 февраля · Жалоба 1 час назад, vasilius сказал: ну типа да Если не сложно будет, попробуйте по быстродействию сравнить обычный код и vliw, будет интересно посмотреть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vasilius 1 7 февраля Опубликовано 7 февраля · Жалоба 2 минуты назад, mantech сказал: Если не сложно будет, попробуйте по быстродействию сравнить обычный код и vliw, будет интересно посмотреть... у меня пока проблемы с пониманием как-то это собирать и как запускать.... Вижу противоречия - в линкере и т.д. Там компилится не бинарник, а эльф.... его надо еще распотрашить и запустить... FREERTOS кстати базируется на конфигах олвинера, но там тоже "по-своему" сделано.... не совсем так.... пока разбираюсь... хочется правильно это собрать и запускать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 февраля Опубликовано 7 февраля (изменено) · Жалоба On 2/7/2024 at 12:40 AM, mantech said: On 2/7/2024 at 12:31 AM, repstosw said: есть RTFM на GCC тулчейн. связываться особо нет желания. Использование эклипса (впрочем, как и другие IDE) не освободит от раскуривания ключей компилятора/ассемблера/линковщика. Иначе, вот этих ошибок мы бы от вас не услышали: Quote In file included from ../sys/drivers/GUI/Gui_ll.c:40:0: ../sys/drivers/GUI/Gui_ll.c: In function 'GrayRotation90_NEON': d:\program works\gnu\sourcery_arm_eabi\lib\gcc\arm-none-eabi\6.3.1\include\arm_neon.h:541:1: error: inlining failed in call to always_inline 'vadd_u8': target specific option mismatch vadd_u8 (uint8x8_t __a, uint8x8_t __b) ^~~~~~~ On 2/7/2024 at 4:01 AM, vasilius said: Зачем все писать самому? Я нашел(купил) оригинальный пакет конфига от олвинера для hifi4. Получил лицензию на xplorer. Есть смысл использовать реальный тулчейн, со всеми плюшками... да - сложно и не все понятно, но... Затем, чтобы избежать проблем вроде ваших: Quote у меня пока проблемы с пониманием как-то это собирать и как запускать.... Вижу противоречия - в линкере и т.д. Там компилится не бинарник, а эльф.... его надо еще распотрашить и запустить... FREERTOS кстати базируется на конфигах олвинера, но там тоже "по-своему" сделано.... не совсем так.... пока разбираюсь... хочется правильно это собрать и запускать Наличие лицензии на компилятор и полного конфига(оверлея) на HiFi4 DSP от T113-s3 не отменяет того факта, что придётся разбираться с этим ядром и понять что и по каким адресам памяти должно быть. Кроме того, вангую, что это всё завязано на FREERTOS, а это значит, чтобы использовать это на BareMetal, необходимо будет выкорчёвывать RTOS произвести рефакторинг кода и переделку стартапа. У меня эти шаги уже позади. Возможно, у меня тоже скоро появится лицензия на компилятор Cadence (XCC/Clang) и полноценный конфиг (оверлей). Будет интересно натравить эти компиляторы на мой SDK и сравнить скорости выполнения некоторых критичных фрагментов кода от выхлопов компиляторов: Free GCC XGCC Clang Изменено 7 февраля пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 8 февраля Опубликовано 8 февраля · Жалоба 9 часов назад, repstosw сказал: не освободит от раскуривания ключей компилятора/ассемблера/линковщика. Ну можно еще просто спросить у того, кто уже расковырял, для этого и форум, чтоб не мариноваться каждому в "собственном соку"))) 9 часов назад, repstosw сказал: Наличие лицензии на компилятор и полного конфига(оверлея) на HiFi4 DSP от T113-s3 не отменяет того факта, Ну да, по уму производитель должен предоставить еще и SDK для этого, чтоб не оставлять покупателя один на один с непонятным чудом, ИМХО... В свое время для IMX6 производитель предоставлял кроме линукса и вполне неплохой SDK бареметал - очень хороший пример заботы об потребителях из не только линуксового сообщества. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 8 февраля Опубликовано 8 февраля (изменено) · Жалоба 16 minutes ago, mantech said: Ну да, по уму производитель должен предоставить еще и SDK для этого, чтоб не оставлять покупателя один на один с непонятным чудом, ИМХО... В свое время для IMX6 производитель предоставлял кроме линукса и вполне неплохой SDK бареметал - очень хороший пример заботы об потребителях из не только линуксового сообщества Для сосременных мощных камней - мэйнстрим - это Linux. Поэтому все SDK производителя будут крутиться вокруг Линукса. Xtensa - не исключение. Производитель предлагает использовать и писать программы под FREERTOS. На планете найдутся не так много извращенцев любителей писать код в BareMetal: я, вы, Геннадий и может ещё пара человек с форума. Всё. Quote В свое время для IMX6 производитель предоставлял кроме линукса и вполне неплохой SDK бареметал В своё время интересовался IMX6. Но к тому времени, они уже убрали с сайта фирменный SDK. Нашёл только любительский SDK, в котором было не всё. Изменено 8 февраля пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 8 февраля Опубликовано 8 февраля (изменено) · Жалоба On 2/8/2024 at 12:06 PM, mantech said: В свое время для IMX6 производитель предоставлял кроме линукса и вполне неплохой SDK бареметал - очень хороший пример заботы об потребителях так вы ценник сравните на процессоры - "любой каприз за ваши деньги", Linux в первую очередь есть из-за андроида а голые процессоры без примеров кода никому не нужны Изменено 8 февраля пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vasilius 1 8 февраля Опубликовано 8 февраля (изменено) · Жалоба Xtensa - она не навязывает RTOS, но логично, что ее предлагает... как и все, впрочем. Если брать линукс - то, кстати, вот именно в S3, ядро XTENSA и решает проблему прямого доступа к железу. Там смысл в том, что оно запускается отдельно и имеет прямой доступ к железу (например аудио) и если надо то берет ресурсы с кортекс ядер. Впрочем в Т113 СДК оно так и используется. Мне линукс не оч нравится тем, что мне нужны мощности всех ядер кортекса и еще ядро ДСП на всю катушку. И не хочется никакой ОС отдавать ресурсы. Да, это из-за жлобского подхода : все хочется на одном камне сделать и дешево. Вся суть с этим ДСП, в том, что надо иметь все сразу и СДК от олвинера, и лицензию от каденсы, чтобы понять как это работает. Без конфигов олвинера лицензия не поможет. По-умолчанию конфиги для hifi4 там совсем абстрактные. Но стоит иметь и СДК чтобы видеть как олвинер это применяет. Конфиг от олвинера почти полностью представлен на гите по ФРИИРТОС. Файл линкера там от min-rtos. Хотя конфиг обознает конфигурацию sim. Но пример с СДК использует свой вариант... хз Allwiner SDK MEMORY { iram0_0_seg : org = 0x00400000, len = 0x660 iram0_1_seg : org = 0x00400660, len = 0x9A0 iram0_2_seg : org = 0x00401000, len = 0x17C iram0_3_seg : org = 0x0040117C, len = 0x20 iram0_4_seg : org = 0x0040119C, len = 0x20 iram0_5_seg : org = 0x004011BC, len = 0x20 iram0_6_seg : org = 0x004011DC, len = 0x20 iram0_7_seg : org = 0x004011FC, len = 0x20 iram0_8_seg : org = 0x0040121C, len = 0x20 iram0_9_seg : org = 0x0040123C, len = 0xEDC4 dram0_0_seg : org = 0x00420000, len = 0x8000 dram1_0_seg : org = 0x00440000, len = 0x8000 ddr1_0_seg : org = 0x32000000, len = 0x100000 } Config Allwiner MEMORY { sram0_seg : org = 0x00020000, len = 0x2E0 sram2_seg : org = 0x00020400, len = 0x178 sram3_seg : org = 0x00020578, len = 0x4 sram4_seg : org = 0x0002057C, len = 0x1C sram5_seg : org = 0x00020598, len = 0x4 sram6_seg : org = 0x0002059C, len = 0x1C sram7_seg : org = 0x000205B8, len = 0x4 sram8_seg : org = 0x000205BC, len = 0x1C sram9_seg : org = 0x000205D8, len = 0x4 sram10_seg : org = 0x000205DC, len = 0x1C sram11_seg : org = 0x000205F8, len = 0x4 sram12_seg : org = 0x000205FC, len = 0x1C sram13_seg : org = 0x00020618, len = 0x4 sram14_seg : org = 0x0002061C, len = 0x1C sram15_seg : org = 0x00020638, len = 0x4 sram16_seg : org = 0x0002063C, len = 0x1C sram17_seg : org = 0x00020658, len = 0x1F9A8 iram0_0_seg : org = 0x00400000, len = 0x20000 dram0_0_seg : org = 0x00420000, len = 0x20000 dram1_0_seg : org = 0x00440000, len = 0x20000 } FreeRTOS git MEMORY { iram0_1_seg : org = 0x00400000, len = 0x1000 iram0_2_seg : org = 0x00401000, len = 0x17C iram0_3_seg : org = 0x00401178, len = 0x20 iram0_4_seg : org = 0x00401198, len = 0x20 iram0_5_seg : org = 0x004011B8, len = 0x20 iram0_6_seg : org = 0x004011D8, len = 0x20 iram0_7_seg : org = 0x004011F8, len = 0x20 iram0_8_seg : org = 0x00401218, len = 0x20 iram0_9_seg : org = 0x00401238, len = 0xEDC4 ddr1_0_seg : org = 0x37900000, len = 0x400000 } ну и т.д. Изменено 8 февраля пользователем makc Удалён оффтопик Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 8 февраля Опубликовано 8 февраля · Жалоба 2 часа назад, vasilius сказал: И не хочется никакой ОС отдавать ресурсы. Да, это из-за жлобского подхода : все хочется на одном камне сделать и дешево. Так вроде задумано было, что линукс сидит только на кортексах, а ДСП работает в бареметал, ибо линукс на него не поставить в принципе, ну и это решает задачу реалтайма. Если б линукс можно было поставить только на одно ядро кортекса, а второе под реалтайм, тогда этот ДСП уже можно было отдать целиком под аудио или еще что... Ну а в случае отказа от линукса можно делать вообще что хочешь))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 8 февраля Опубликовано 8 февраля · Жалоба 16 minutes ago, mantech said: Если б линукс можно было поставить только на одно ядро кортекса, а второе под реалтайм Никто не запрещал ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 8 февраля Опубликовано 8 февраля · Жалоба Admin: Продолжение оффтопика приведёт к предупреждениям и закрытию темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 8 февраля Опубликовано 8 февраля · Жалоба 1 hour ago, mantech said: Так вроде задумано было, что линукс сидит только на кортексах, а ДСП работает в бареметал, ибо линукс на него не поставить в принципе Под ADSP BlackFin есть μClinux. При этом у Blackfin нет даже MMU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vasilius 1 8 февраля Опубликовано 8 февраля · Жалоба В 07.02.2024 в 13:19, mantech сказал: Если не сложно будет, попробуйте по быстродействию сравнить обычный код и vliw, будет интересно посмотреть... CALL0 vs WINDOWED - людское объяснение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 11 февраля Опубликовано 11 февраля (изменено) · Жалоба В 29.01.2024 в 12:14, mantech сказал: Неа, просто программно декодить на фулл-хд не быстро получается(( Не подскажет кто, нужно сделать поворот картинки на 90 град, программно получается медленно, а g2d чет не могу заставить это делать, что я делаю не так: int G2D_ImageRotate(uint16_t *width,uint16_t *height) { uint16_t w; uint32_t width1;uint32_t height1; *width=640; *height=640; G2D_BLT.flag=G2D_BLT_ROTATE90; G2D_BLT.src_image.w=*width; //размер исходного фрейма G2D_BLT.src_image.h=*height; G2D_BLT.src_image.format=G2D_FMT_ABGR_AVUY8888; G2D_BLT.src_image.pixel_seq=G2D_SEQ_NORMAL; G2D_BLT.src_rect.x=0; //координаты вырезки G2D_BLT.src_rect.y=0; G2D_BLT.src_rect.w=*width; //размер области вырезки G2D_BLT.src_rect.h=*height; G2D_BLT.dst_image.addr[1]=0; G2D_BLT.dst_image.addr[2]=0; G2D_BLT.dst_image.w=*width; //размер конечного фрейма (должен совпадать с размерами исходного фрейма для BLT) G2D_BLT.dst_image.h=*height; G2D_BLT.dst_image.format=G2D_FMT_ABGR_AVUY8888; G2D_BLT.dst_image.pixel_seq=G2D_SEQ_NORMAL; G2D_BLT.color=0x000000; G2D_BLT.alpha=0xFF; //Адреса откуда копировать для G2D G2D_BLT.src_image.addr[0]= (u32)TMPIMG_BASE; //Y яркостная составляющая //куда выводить //координаты G2D_BLT.dst_x=0; G2D_BLT.dst_y=0; G2D_BLT.dst_image.addr[0]=(u32)SAVEFG_BASE;// ПОЛУЧАТЕЛЬ !!! cache_flush_range((u32)TMPIMG_BASE ,(u32)(TMPIMG_BASE+TEMP_IMAGESIZE)); //инвалидация кеша - декодер записал в память vsync_flag=g2d_blit(&G2D_BLT); cache_flush_range((u32)SAVEFG_BASE ,(u32)(SAVEFG_BASE+TEMP_IMAGESIZE)); //инвалидация кеша - декодер записал в память /* w=*width; *width=*height; *height=w; */ } Изменено 11 февраля пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 февраля Опубликовано 11 февраля (изменено) · Жалоба 1) Поворот и масштабирование не могут одновременно выполняться 2) Поворот и конверсия цветов не могут одновременно выполянться 3) Инвалидация кеша вызывается другой функцией 4) Если процессор не участвует в обработке данных, то инвалидация(invalidate) и сброс с кеша(flush/clean) не нужны (цепочка: Декодер => G2D) . Ниже - рабочий поворот на 270 градусов: void G2D_Run(struct pipeline_dev *pd) { g2d_blt G2D_Rot; G2D_Rot.flag=G2D_BLT_ROTATE270; G2D_Rot.src_image.w=pd->rm->first_dimension; G2D_Rot.src_image.h=pd->rm->second_dimension; G2D_Rot.src_rect.w=pd->rm->first_dimension; G2D_Rot.src_rect.h=pd->rm->second_dimension; G2D_Rot.src_image.format=G2D_FMT_PYUV420UVC; G2D_Rot.src_image.pixel_seq=G2D_SEQ_NORMAL; G2D_Rot.src_image.addr[0]=(u32)((u8*)pd->rm->address+(((pd->rm->first_dimension*pd->rm->second_dimension)/2)*(((pd->swap^1)*3)+0))); //Y G2D_Rot.src_image.addr[1]=(u32)((u8*)pd->rm->address+(((pd->rm->first_dimension*pd->rm->second_dimension)/2)*(((pd->swap^1)*3)+2))); //UV G2D_Rot.src_rect.x=0; G2D_Rot.src_rect.y=0; G2D_Rot.dst_image.addr[0]=(u32)((u8*)pd->wm->address+(((pd->wm->first_dimension*pd->wm->second_dimension)/2)*((pd->swap*3)+0))); //Y G2D_Rot.dst_image.addr[1]=(u32)((u8*)pd->wm->address+(((pd->wm->first_dimension*pd->wm->second_dimension)/2)*((pd->swap*3)+2))); //UV G2D_Rot.dst_image.w=pd->wm->first_dimension; G2D_Rot.dst_image.h=pd->wm->second_dimension; G2D_Rot.dst_image.format=G2D_FMT_PYUV420UVC; G2D_Rot.dst_image.pixel_seq=G2D_SEQ_NORMAL; G2D_Rot.dst_x=WINDOW0_X; G2D_Rot.dst_y=WINDOW0_Y; G2D_Rot.color=0x000000; G2D_Rot.alpha=0xFF; g2d_blit(&G2D_Rot); //... } Изменено 11 февраля пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 12 февраля Опубликовано 12 февраля (изменено) · Жалоба 5 часов назад, repstosw сказал: 4) Если процессор не участвует в обработке данных, то инвалидация(invalidate) и сброс с кеша(flush/clean) не нужны (цепочка: Декодер => G2D) . Данные могут приходить от программного PNG декодера, поэтому сброс кэша нужен, и выходной поток тоже может быть использован в постобработке. 5 часов назад, repstosw сказал: 1) Поворот и масштабирование не могут одновременно выполняться 2) Поворот и конверсия цветов не могут одновременно выполянться Об этом я в курсе) 5 часов назад, repstosw сказал: Ниже - рабочий поворот на 270 градусов: Спасибо! 5 часов назад, repstosw сказал: 3) Инвалидация кеша вызывается другой функцией Странно, но она работает))) 5 часов назад, repstosw сказал: G2D_Rot.src_image.w=pd->rm->first_dimension; G2D_Rot.src_image.h=pd->rm->second_dimension; Вот тут чет затупил, что это такое? first_dimension - это ширина источника, или что? Или это высота*ширину источника? 5 часов назад, repstosw сказал: G2D_FMT_PYUV420UVC Вот здесь, я так понял, что нужно поставить G2D_FMT_ABGR_AVUY8888, т.к. плоскость RGB ? 5 часов назад, repstosw сказал: G2D_Rot.src_image.addr[0]=(u32)((u8*)pd->rm->address+(((pd->rm->first_dimension*pd->rm->second_dimension)/2)*(((pd->swap^1)*3)+0))); //Y G2D_Rot.src_image.addr[1]=(u32)((u8*)pd->rm->address+(((pd->rm->first_dimension*pd->rm->second_dimension)/2)*(((pd->swap^1)*3)+2))); //UV Тут как понимаю 2 адреса из-за плоскости Y\C в RGB нужен только первый? 5 часов назад, repstosw сказал: G2D_Rot.dst_x=WINDOW0_X; G2D_Rot.dst_y=WINDOW0_Y; Ну и вот тут бы пояснительную бригаду))) Изменено 12 февраля пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться