Перейти к содержанию
    

Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?

8 часов назад, repstosw сказал:

Есть же G2D.  Операция Blt Rectangle.

Так-то да, но это более универсально, например нужно "переехать" на проц, где нет g2d, и проблем нет, а если подвяжитесь под конкретное железо, то ай ай будет))))))

Поэтому придерживаюсь такого подхода, если есть менее платформенно-зависимый метод, ну даже пусть он помедленнее, но не критично, то его и сделаю, потом сам себе спасибо скажу)))

8 часов назад, repstosw сказал:

кодирование H264 Full HD  1920x1080

Ну тут понятно, только аппаратка...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/4/2024 at 10:53 AM, mantech said:

но это более универсально, например нужно "переехать" на проц, где нет g2d

а если графическую морду переехать в планшет - дядя например с планшетной фабрики прислал вышедшие из моды по цене рубль за тонну ? или в смартфон юзера а вместо ящика с товаром в молле дрон запускать с доставкой ? никакого развития у вас не предусмотрено в принципе, а вэб-технологии  конечно тормозные местами но непровзойдённо гибкие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Запустил второй SPI (SPI1), который на старших битах TCON LCD. Подключил к нему трансивер на базе Si4463.  На SPI0 висит Flash.  SD карта больше не нужна. И ножек хватает на всю периферию. Без аппаратных и программных уродств, что радует.

Тестовый макет фулл-дуплексного видео-чата на 430 - 440 МГц:

 

Spoiler
SoC: Allwinner T113-s3
Board:  MangoPi MQ-R
CPU0: Cortex-A7 @ 1200Mhz (RS coder)
CPU1: Cortex-A7 @ 1200Mhz (RS decoder)
DSP: Xtensa HiFi4 @ 600 MHz (Main code)
LCD: Nokia E72, 2.4", 320x240, 24 bit, 61 Hz, connected to TCON in i8080 8-bit mode, Tearing pin used for VBlank. Partnumber: LS024Q8UX05C
Camera: OV5640, connected to CSIC via DVP
Transceiver: RF4463PRO, 430..440 MHz, 4FSK, 100 mW RF power, 1250 kbps bitrate (overclocked +25%, XTAL 37.5 MHz instead default 30 MHz)
FEC: CR 4/5, Reed-Solomon FEC, GF 2^16
Frame size: 160x240 (two frames)
Frame rate: 12 FPS (full duplex)
Audio codec: CELT 24 kbps, 1 channel, 24 kHz, 16 bit.
Acoustic Echo Canceler: from Speex codec
Image Processing: MJPEG codec
Graphics Engine: Hardware G2D
Boot Media: NOR Flash or SD-card
Program Binary size: ~ 300 kB
Toolchains:  ARM GCC & Xtensa GCC
Target OS: NONE. Barmetal & LowLevel programming
Programming Languages: C/ASM

 

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/4/2024 at 12:44 PM, repstosw said:

И ножек хватает на всю периферию. Без аппаратных и программных уродств

а шифрование есть или смотри кто хочет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, sasamy said:

никакого развития у вас не предусмотрено в принципе, а вэб-технологии  конечно тормозные местами но непровзойдённо гибкие.

Каждому свое, кому помигать светодиодом через браузер , а кому просто быстро и надежно и предсказуемо... 

16 hours ago, sasamy said:

а если графическую морду переехать в планшет

Еще раз повторяю, в моем контроллере графическая морда не главная задача, а только UI.

16 hours ago, sasamy said:

или в смартфон юзера а вместо ящика с товаром в молле дрон запускать с доставкой ?

Еще про чат_гпт забыли)))))))0

On 2/3/2024 at 11:56 PM, GenaSPB said:

У меня так:

Вот проверил еще раз

gcc version 6.3.1

Ключи гцц из эклипса:

<tool command="arm-none-eabi-gcc -march=armv7-a -mtune=cortex-a7 $(FP) -marm -mfloat-abi=hard -mfpu=vfpv4 -mfpu=neon -mno-thumb-interwork -mno-unaligned-access -ffunction-sections -fdata-sections -MMD -MT$@ -Wa,-adhln&#9;-Wall -Wformat=0" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" errorParsers="org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.tool.gnu.cross.c.compiler.865133463" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
 

Функция:

Spoiler
#include <arm_neon.h>

 int GrayRotation90_NEON(uint8_t * in, uint8_t* out, int height, int width)
 {
     uint8x8_t vone = {1,1,1,1,1,1,1,1};
     uint8x8_t index_0 = {28, 20, 12, 4, 24, 16, 8, 0};
     uint8x8_t index_1 = vadd_u8(index_0, vone);
     uint8x8_t index_2 = vadd_u8(index_1, vone);
     uint8x8_t index_3 = vadd_u8(index_2, vone);
     uint8x8_t index_4 = {12, 13, 14, 15, 4, 5, 6 ,7};
     uint8x8_t index_5 = {8, 9, 10, 11, 0, 1, 2, 3};
     uint8x8x4_t mat0;
     uint8x8x4_t mat1;
     uint8x8x4_t temp0;
     uint8x8x4_t temp1;
     uint8x8x2_t out0;
     uint8x8x2_t out1;
     uint8x8x2_t out2;
     uint8x8x2_t out3;

     int x = 0, y = 0;
     for(y=0; y<height; y+=8)
     {
         for(x=0; x<width; x+=8)
         {
             mat0.val[0] = vld1_u8(in + y*width+x);
             mat0.val[1] = vld1_u8(in + (y+1)*width+x);
             mat0.val[2] = vld1_u8(in + (y+2)*width+x);
             mat0.val[3] = vld1_u8(in + (y+3)*width+x);
             mat1.val[0] = vld1_u8(in + (y+4)*width+x);
             mat1.val[1] = vld1_u8(in + (y+5)*width+x);
             mat1.val[2] = vld1_u8(in + (y+6)*width+x);
             mat1.val[3] = vld1_u8(in + (y+7)*width+x);

             temp0.val[0] = vtbl4_u8(mat0, index_0);
             temp0.val[1] = vtbl4_u8(mat0, index_1);
             temp0.val[2] = vtbl4_u8(mat0, index_2);
             temp0.val[3] = vtbl4_u8(mat0, index_3);

             temp1.val[0] = vtbl4_u8(mat1, index_0);
             temp1.val[1] = vtbl4_u8(mat1, index_1);
             temp1.val[2] = vtbl4_u8(mat1, index_2);
             temp1.val[3] = vtbl4_u8(mat1, index_3);

             out0.val[0] = temp0.val[0];
             out0.val[1] = temp1.val[0];
             out1.val[0] = temp0.val[1];
             out1.val[1] = temp1.val[1];
             out2.val[0] = temp0.val[2];
             out2.val[1] = temp1.val[2];
             out3.val[0] = temp0.val[3];
             out3.val[1] = temp1.val[3];
             mat0.val[0] = vtbl2_u8(out0, index_4); // line 0
             mat0.val[1] = vtbl2_u8(out0, index_5); // line 4
             mat0.val[2] = vtbl2_u8(out1, index_4); // line 1
             mat0.val[3] = vtbl2_u8(out1, index_5); // line 5

             mat1.val[0] = vtbl2_u8(out2, index_4); // line 2
             mat1.val[1] = vtbl2_u8(out2, index_5); // line 6
             mat1.val[2] = vtbl2_u8(out3, index_4); // line 3
             mat1.val[3] = vtbl2_u8(out3, index_5); // line 7

             // store out data in order: 0, 4, 1, 5, 2, 6, 3, 7
             vst1_u8(out + (x + 0) * height + height-8 - y, mat0.val[0]);
             vst1_u8(out + (x + 1) * height + height-8 - y, mat0.val[2]);
             vst1_u8(out + (x + 2) * height + height-8 - y, mat1.val[0]);
             vst1_u8(out + (x + 3) * height + height-8 - y, mat1.val[2]);
             vst1_u8(out + (x + 4) * height + height-8 - y, mat0.val[1]);
             vst1_u8(out + (x + 5) * height + height-8 - y, mat0.val[3]);
             vst1_u8(out + (x + 6) * height + height-8 - y, mat1.val[1]);
             vst1_u8(out + (x + 7) * height + height-8 - y, mat1.val[3]);
         }
     }

     return 0;
 }

Ошибки:

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)
 ^~~~~~~
../sys/drivers/GUI/Gui_ll.c:48:16: note: called from here
      uint8x8_t index_3 = vadd_u8(index_2, vone);
                ^~~~~~~
In file included from ../sys/drivers/GUI/Gui_ll.c:40:0:
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)
 ^~~~~~~
../sys/drivers/GUI/Gui_ll.c:47:16: note: called from here
      uint8x8_t index_2 = vadd_u8(index_1, vone);
                ^~~~~~~
In file included from ../sys/drivers/GUI/Gui_ll.c:40:0:
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)
 ^~~~~~~
../sys/drivers/GUI/Gui_ll.c:46:16: note: called from here
      uint8x8_t index_1 = vadd_u8(index_0, vone);

 

Ну и т.д....

Изменено пользователем haker_fox
Для оформления кода есть кнопка <>. Длинный код прячем под спойлр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, sasamy said:

а шифрование есть или смотри кто хочет

Возможны несколько опций:

1) Hardware Data Whitening (со стороны трансивера)

2) AES, SHA (со стороны T113-s3)

3) Псевдо-случайный интерливинг байт пакета

 

Ну и плюс к тому же, видео передаётся не тупо JPEG'ами,  а только полезная часть.   хедер и таблицы Хаффмана - не передаются, они восстанавливаются в приёмнике (заранее просчитаны).

Со звуком аналогично - передаётся только тело сжатия.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока вижу прииенение двух ключей mfloat с разными параметрами. Попробуйте как у меня один.

И компилятор поновее бы. Sorcery давно издох.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, GenaSPB сказал:

Пока вижу прииенение двух ключей mfloat с разными параметрами. Попробуйте как у меня один.

Попробовал, то же самое

tool command="arm-none-eabi-gcc -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4"

 

2 часа назад, GenaSPB сказал:

И компилятор поновее бы.

Хотите сказать, что компилятор начала 18 года не знает кортекс А7 ?? Странно

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/4/2024 at 3:14 PM, mantech said:

gcc version 6.3.1

зачем gcc такой молодёжный - надо 0.1.  Седьмой проглатывает ваш чатгпт

https://godbolt.org/z/4rzG1qxWv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, sasamy сказал:

Седьмой проглатывает ваш

У меня в этом эксплореле и 5.4.1 норм компилирует, если что...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, GenaSPB сказал:

И компилятор поновее бы. Sorcery давно издох.

Не подкинете ссылку, где скачать поновее проверенный под вин32 бита?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi.exe


Arm GNU Toolchain Downloads – Arm Developer

Раьотает ли под win32 не уверен. Закопайте стюардесу. По ссылке есть архивы релизов - откатитесь назад, когда прекратили поддержку я не отслкживал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, GenaSPB сказал:

Раьотает ли под win32 не уверен. Закопайте стюардесу.

Нет уж, рано еще))

Вот такой нашел - Version 10 2021.10

image.thumb.png.1d2463680745107b002864cc1fd3d1ab.png

Попробую на нем...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, mantech сказал:

Флаг -mfloat поправьте.

-mfloat-abi=hard

А что не так? Как ваш.

 

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...