sasamy 0 2 октября, 2023 Опубликовано 2 октября, 2023 (изменено) · Жалоба On 10/2/2023 at 1:59 PM, repstosw said: А как вы переключали ABI ? Я правил в оверлее все дефайны касающиеся WINDOWED/CALL0. я имел ввиду налету переключается через параметры gcc -mabi=call0, по умолчнию в конфиге из оверлея windowed - оверлей я не трогал On 10/2/2023 at 1:59 PM, repstosw said: Есть ли способ заставить ct-ng не качать и устанавливать каждый раз всё барахло, а сохранять и устанавливать на локальной машине? конечно, .ct-ng menuconfig Paths and misc options ---> (${HOME}/src) Local tarballs directory [*] Save new tarballs Я сразу взял их конфиг от одноядерного варианта ./ct-ng xtensa-esp32s2-elf через меню поменял Tuple's vendor string и оверлей указал от нашего процессора. Собрал полученным кросскомпилятором freertos - она работает но Linux падает по неизвестной причине, не стал разбираться, со старым компилятором не было такого On 10/2/2023 at 1:59 PM, repstosw said: Есть ли способ собрать crosstool-ng в винде с помощью minGW32 ? наверно есть но мне это без надобности поэтому не пробовал. Прикрепил конфиг с которым собирал t113_espressif.config Изменено 2 октября, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 2 октября, 2023 Опубликовано 2 октября, 2023 (изменено) · Жалоба 3 hours ago, repstosw said: У меня Линукс виснет во время билда почему-то. Просто курсор мыши исчезает и даже на Ctrl+Alt+Del не реагирует. Только из розетки выключать. Отключил GUI: Ctrl+Alt+F1. Удалось построить xtensa-esp32s3-elf для ABI=call0 по умолчанию. В общем не всё так просто с этим Floating Point. Во-1, без включения сопроцессора, любая fpu-инструкция приводит к исключению 0 "Illegal Instruction". Нужно его включить (бит 1 регистр cpenable): movi a0,2 //bit 1 - Floating Point (coprocessor #1) wsr.cpenable a0 rsync /* wait for WSR to CPENABLE to complete before accessing FP coproc state */ movi a0,0 wur.fcr a0 /* clear FCR (default rounding mode, round-nearest) */ wur.fsr a0 /* clear FSR */ Во-2, почему-то не все инструкции проходят. Та, что закомментирована - вызывает исключение: wfr f1, a4 sub.s f0, f3, f1 wfr f2, a2 // mov.s f4, f1 //приводит к Double Exception madd.s f4, f2, f3 add.s f0, f0, f2 rfr a2, f4 Либо опкоды у esp32 отличаются от HiFi4, либо что-то пошло не так... Изменено 2 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 октября, 2023 Опубликовано 3 октября, 2023 (изменено) · Жалоба Очень странный VFPU у этого HiFi4 DSP. Не работает, согласно Xtensa® Instruction Set Architecture (ISA) Reference Manual. Сделал небольшую функцию. Результат печатаю через printf: //ASM: .align 4 .global Test Test: movi a13,1 movi a14,2 movi a15,3 wfr f0,a13 //f0=1 wfr f1,a14 //f1=2 wfr f2,a15 //f2=3 add.s f0,f0,f1 //f0=f0+f1=1+2=3 madd.s f0,f1,f2 //f0=f0+(f1*f2)=3+(2*3)=9 rfr a2,f0 //return value ret //C: extern u32 Test(void); int main(void) { printf("%d\n",Test()); while(1); //... MADD.S не работает как надо. Вместо 9 возвращает 3. Умножение между f1 и f2 не происходит. Неужели китайцы и здесь намудрили? (так же как и с интерливом адресов в DRAM). Допустим, что у него нет VFPU. Тогда все инструкции должны приводить к исключению "Illegal Instruction". А это наблюдается только у некоторых инструкций. Кроме того, при выключенном бите сопроцессора (он же - и Boolean coprocessor) в регистре cpenable, при выполнении любой инструкции VFPU возникает исключение "coprocessor #1 disabled". Тоесть делаю вывод - оно как бы есть, но какое-то не такое, как в мануале... Изменено 3 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 октября, 2023 Опубликовано 3 октября, 2023 · Жалоба 1 hour ago, repstosw said: MADD.S не работает как надо. С madd разобрался. Проблема была здесь: movi a13,1 movi a14,2 movi a15,3 Нужно грузить числа в представлении floating point. Не доглядел. Сделал передачу float в аргументах: Test: wfr f0,a2 //0.5 wfr f1,a3 //1.7 add.s f0,f0,f1 //2.2 madd.s f0,f0,f1 //5.94 rfr a2,f0 ret extern float Test(float p1,float p2); int main(void) { printf("%f\n",Test(0.5F,1.7F)); while(1); //... Теперь всё корректно. Осталось разобраться, почему некоторые инструкции вываливаются в "illegal instruction". Например, mov.s f4,f1. Вполне безобидный код. Сравнил опкод по мануалу и то, что сделал тулчейн: одинаково - 0xFA4100. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 3 октября, 2023 Опубликовано 3 октября, 2023 · Жалоба On 10/2/2023 at 5:40 PM, repstosw said: Удалось построить xtensa-esp32s3-elf On 10/2/2023 at 5:40 PM, repstosw said: Во-1, без включения сопроцессора, любая fpu-инструкция приводит к исключению 0 "Illegal Instruction". правильно я понял вы собрали компилятор в crosstool-ng с оверлеем от esp32s3, а не дописывали всё что касается fpu в оверлей от t113 (binutils/bfd/xtensa-modules.c) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 октября, 2023 Опубликовано 3 октября, 2023 (изменено) · Жалоба 1 hour ago, sasamy said: правильно я понял вы собрали компилятор в crosstool-ng с оверлеем от esp32s3, а не дописывали всё что касается fpu в оверлей от t113 (binutils/bfd/xtensa-modules.c) ? Да. Собрал чистый вариант для esp32-s3. Очевидно, что для T113-s3 HiFi4 DSP запрещены некоторые инструкции с floating point, которые разрешены для ESP32-s3. И некоторые регистры не доступны, например ATOMCTL - при его чтении возникает всё то же исключение - illegal instruction. И для HiFi4 DSP - VFPU как опция. Так что может что-то и урезали. Нету внятной доки именно на ядро HiFi4. Какие именно инструкции разрешены? И что оставили от него китайцы ? Вот список инструкций, которые в T113-s3 HiFi4 завершаются аварийно: mov.s f*, f* lsi f*, a*, const trunc.s a*, f*, const Инструкции которые работают: wfr f*,a* add.s f*,f*,f* madd.s f*,f*,f* rfr a*,f* По крайней мере - результат их вычислений корректен. Пробовал строить свои проекты xtensa-esp32s3-elf - если не использовать плавучку, то на HiFi4 они сохраняют работоспособность. Правда, встроенные дефайны компилятора в этом случае лучше не использовать 1 hour ago, sasamy said: а не дописывали всё что касается fpu в оверлей от t113 (binutils/bfd/xtensa-modules.c) ? Там слишком многое придётся переносить. И не факт, что часть из этого заработает с T113-s3 HiFi4 DSP. Изменено 3 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 3 октября, 2023 Опубликовано 3 октября, 2023 · Жалоба On 10/3/2023 at 11:18 AM, repstosw said: Нету внятной доки именно на ядро HiFi4. HIFI4 это маркетинговое название расширений DSP для работы со звуком, ядро LX7, причём у esp32 нет этого расширения. On 10/3/2023 at 11:18 AM, repstosw said: Так что может что-то и урезали. если так, рулетка с FPU выглядит малопривлекательно - неизвестно когда выстрелит, собственно мне изначально не нужен FPU, так что совсем нет желания вслепую разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 октября, 2023 Опубликовано 3 октября, 2023 (изменено) · Жалоба 3 hours ago, sasamy said: ядро LX7, причём у esp32 нет этого расширения. А в доках на ядро LX7 сказано, какие инструкции VFPU - mandatory, а какие - нет? 3 hours ago, sasamy said: если так, рулетка с FPU выглядит малопривлекательно - неизвестно когда выстрелит, Согласен. Без чёткой инфы - занятие становится похожим на реверс. 3 hours ago, sasamy said: мне изначально не нужен FPU, А мне очень нужен 🙂 Все кодеки которые использую - в основном работают на floating point. Ещё со времён STM32 🤣 Обнаружил ещё одну особенность: чтение из памяти DSP IRAM - только порциями по 4 байта. Если делать чтение по 2- или 1- байт, то результат непредсказуем. По этой причине иногда подвисал сишный стартап (на месте копирования данных из LMA в VMA - секция .data). Секция .rodata таже должна быть скопирована из LMA в VMA в сишном стартапе, чтобы избежать жесткого контроля чтения переменных const по 4 байта. Конечно, данные можно хранить в DSP DRAM, но тогда размер бинарника вырастет до 64 КБ+, так как будет большая дырка ))) Если код находится в DDR, то ограничение снимается. И если включено кеширование IRAM, то тоже. Изменено 3 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 3 октября, 2023 Опубликовано 3 октября, 2023 · Жалоба On 10/3/2023 at 2:59 PM, repstosw said: А в доках на ядро LX7 сказано, какие инструкции VFPU - mandatory, а какие - нет? я не видел такого, сам fpu опциональное расширение. Смотрел оверлеи от imx, mtk, lx7hifi4 https://github.com/thesofproject/xtensa-overlay они все очень похожи на t113 и не похожи на esp32 - у них даже регистры fpu не описаны. On 10/3/2023 at 2:59 PM, repstosw said: Если код находится в DDR, то ограничение снимается. freertos так и линкуется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 3 октября, 2023 Опубликовано 3 октября, 2023 · Жалоба 1 hour ago, repstosw said: размер бинарника вырастет Считаю это не имеющим значения в нашем случае. Грузит его хост, у которого скажем так не большие ограничения. А расходовать dsp iram чтобы средствами dsp копировать в dsp dram это слегка того... мягко говоря оверинжениринг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 октября, 2023 Опубликовано 3 октября, 2023 · Жалоба 17 minutes ago, GenaSPB said: А расходовать dsp iram чтобы средствами dsp копировать в dsp dram это слегка того... мягко говоря оверинжениринг. Это были эксперименты, чтобы увидеть специфику. Не более. Считаю нецелесообразным использовать DSP IRAM и DRAM, так как для моих задач их не хватает. Последний проект, который я перенёс на этот ДСП - занимает чуть более 228 кБ кода и требует для нормальной работы 4 МБ памяти. Тут только исполнение кода в DDR. Без вариантов. 47 minutes ago, sasamy said: я не видел такого, сам fpu опциональное расширение. Смотрел оверлеи от imx, mtk, lx7hifi4 Читаю сейчас архив hifi4_ss_spfpu_7 - от Cadence. Там есть файлик install.exe который требует путь к тулчейну. Я его указываю, но ничего не происходит - инсталлятор тихо сворачивается. Что с этим делать и что это такое - непонятно. Путь к тулчейну как я понимаю - вот этот? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 3 октября, 2023 Опубликовано 3 октября, 2023 (изменено) · Жалоба 2 minutes ago, repstosw said: требует путь к тулчейну Левые или правые слеши пробовали? Может не bin а выше? Изменено 3 октября, 2023 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 октября, 2023 Опубликовано 3 октября, 2023 (изменено) · Жалоба 8 hours ago, GenaSPB said: Левые или правые слеши пробовали? Может не bin а выше? Всё пробовал. Ничего не помогло. Однако, нашёл китайскую доку с описанием и картинками как надо делать: https://forums.100ask.net/uploads/short-url/jbjVnuCu0HrS6asoVNXB1DKfnBa.pdf Пишут: "Свяжитесь с Allwinner, для получения DSP лицензии". Так что пускай китайцы дурака не включают, что они ничего не знают. Установил я этот package через эксплорер и накачал семплов. Но работать всёравно не даст - в задачах висит много копий c-lang (компилятор) и начинает бомбить кучей всплывающих окон о том, что нужна лицензия. Причём этих окон 4 штуки наклонировалось. Даже открытие файла проекта сопровождается появлением этих окон. Слишком назойливый и агрессивный ход. Сами семплы не особо порадовали - вершки абстракции. Как калокуб под STM32. Не увидел железа. Очевидно и не увижу. Так как скорее всего спрятано в проприетарные либы. Расчитано на дураков, которые хотят по-быстрому въехать и рубить бабло, не изучая при этом архитектуру ядра. Не мой путь. Изменено 3 октября, 2023 пользователем repstosw 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 6 октября, 2023 Опубликовано 6 октября, 2023 (изменено) · Жалоба ❗В обработчиках прерываний, кроме сохранения-восстановления регистров a0 .. a15, нужно также сохранять-восстанавливать вот эти регистры: lbeg, lend, lcount, sar, acclo, acchi, m0 .. m3 . Пока их не добавил, прерывания нарушали работу софтового кодека для сжатия-разжатия звука. Для полного счастья ещё надо добавить регистры: aed0 .. aed15 . В ассемблерном листинге моей программы они тоже встречаются, но я пока не нашёл ассемблерных инструкций для load/store этих регистров. А какие регистры сохраняет FreeRTOS в обработчиках прерываний для HiFi4 DSP? Изменено 6 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 6 октября, 2023 Опубликовано 6 октября, 2023 · Жалоба On 10/6/2023 at 11:32 AM, repstosw said: А какие регистры сохраняет FreeRTOS в обработчиках прерываний для HiFi4 DSP? https://github.com/YuzukiHD/FreeRTOS-HIFI4-DSP/blob/164696d952116d20100daefd7a475d2ede828eb0/kernel/portable/xtensa_context.S#L61 On 10/6/2023 at 11:32 AM, repstosw said: acclo, acchi, m0 .. m3 для этих есть отдельный макрос, в коде не видел чтобы он использовался https://github.com/YuzukiHD/FreeRTOS-HIFI4-DSP/blob/164696d952116d20100daefd7a475d2ede828eb0/kernel/portable/xtos-internal.h#L157 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться