• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Arduino для RTL8710.

pvvx

Активный участник сообщества
О! Благодарю за напоминание.

Что-то меня переглючило, что в обычных либах нужно соблюдать версию/инфраструктуру сборки, как в линуксовом ядре. А "нормальные" либы последний раз собирал в начале 90х, переписывая что-то на турбо-ассемблере :)
Чую, это всё Menta-ы с CoDeSys-ами виноваты... так и до ардуины головного мозга недалеко :)
При сборке своего добавляемого obj на SDK надо учесть только конфигурационные хидеры из Arduino в папочке hardware\development\rtl8???\system\sdk\project\rtl8710\inc\. Особенно lwipopts.h, если лепите SNTP
Но самый простой вариант, как уже написал: кинуть исходник в папку hardware\development\rtl87xx\cores\arduino\. Она его от туда подхватит и даже без проблем заменяет встретившиеся в *.a процедуры и данные с одинаковыми именами. В итог пойдет из cores\arduino...
После трасляции можно выудить obj этого файла и запихать в lib_xxx.a :)
Примерно так и были собраны имеющиеся lib_rtl8xxx.a, lib_lwip.a, ...
Исходники к вставленным и замененным файлам obj в rtlDunio находятся в RTL00MP3/RTL00_SDKV35a at master · pvvx/RTL00MP3 · GitHub

Arduino от Ameba, из которой взята основа rtlDuino, базируется на SDK3.5, а SDK4.0 имеет расхождение.

Разобрать все либы на obj по папочкам.bat :
Код:
for %%a in (*.a) do (
md %%a.o
cd %%a.o
arm-none-eabi-ar x ..\%%a
rem for %%o in (*.o) do arm-none-eabi-objdump -S %%o > %%o.asm
cd ..
)
Собрать либу из папочки lib_rtl8710:
Код:
del lib_rtl8710.a
arm-none-eabi-ar ru lib_rtl8710.a lib_rtl8710/*.o
В итоге, на создание вполне работающей новой версии Arduino для серии "B" потребовался всего один вечер. Бяда там была с SDK4.0 файлами на предмет их сборки транслятором С++ (gcc++) (выдавало много ошибок на хидеры). Ну переписал один файл - Serial для console, т.к. другой чип и ROM у него, да включил опции трансляции для Cortex M4 с FPU и добавил требуемые хвосты для C++ либ от gcc ... Я теперь в полном непонимании почему Arduino для ESP-32 делают не один человек и не один год (?) :) Даже выкладывать полученное страшно, т.к. проверка "сборки за вечер" на второй день показала работоспособность 80% базового функционала Arduino (остальную просто не делал - она мне пока не нужна).
 
Последнее редактирование:
  • Like
Реакции: A.V

A_D

Active member
"Надо сказать Ахалай-махалай! И обязательно - дунуть! Иначе ничего не получится!" © А.Акопян ;)
От 90% подобных проблем я избавился лет с 10 назад, перейдя на линукс. Только совсем по работе с виндой и приходится общаться, когда очередной тепло/водо/итп. пункт запускаю.

ЗЫ: с файлом разобрался - опять получилось (странно, да?)... Разве что найденный мной sntp.c оказался от какой-то совсем другой версии lwip и пока решил не его пилить, а вставить минимальную заглушку по аналогии.
ЗЫЫ: вот ещё б заставить себя настроить Qt Creator, чтобы и собирать/прошивать из него, а не только как редактор... Пока - лень, но рано или поздно займусь...
:D надо подсказать человеку же про волшебные слова.. а то так и замучается.
Ну а выбор ОС - как по мне дело вкуса... у меня и на Windows прекрасно работает, дело работоспособности инструментов то не от ОС в большинстве случаев зависит (имхо), а от рук использующего)
 

pvvx

Активный участник сообщества
:D надо подсказать человеку же про волшебные слова.. а то так и замучается.
Попробовав запустить rtlB-Duino в VS, пришлось скорректировать исходники tools-ов. Разобрал все выданные к SDK4.0 серии "B" Ameba тулзы, т.к. они, засранцы, не дали их исходников, но (!) полностью описали как и что они должны творить по их задумке в приложенных doc к SDK! Заменил, слепил по их аналогии. Не понравилось. :) Слепил на питоне вариант сборки бинарников из elf вообще не пользующийся GNU Tools ARM Embedded. Благо пример уже был из ESP8266/ESP-32 :) Кинут в тему rtltool для "B". Visual Studio 2015 сразу это сожрала и залила скетч в модуль... Использовал "плагин" vMicro. Так что если надо это обновленное безобразие - обращайтесь...
Теперь думаю - не сделать ли полную имулящку Arduino ESP-32 на RTL8710BN? Ну чтобы вообще ничего не писать далее, а вставлять исходники в Arduino от их "сообщества" :)


А для больных пользователей - "Ардуино поклонников" версия Arduino для серии "В" пока платная. Чтобы не расслаблялись и не болели :) Для разработчиков и обменивающихся информацией - бесплатная и в варианте с базовым функционалом доступна по просьбе.
Пользователям свои негодования выражать =AK= и Pilnikov. :) Уж очень устал от их навязчивой болезни "потребителей"...
 
Последнее редактирование:

pvvx

Активный участник сообщества
@A_D - Да и на счет "среды".
В вынь 10 есть WSL. Не пора-ли переводить всё на неё? VS с ней согласуется, Arduino - без проблем, т.к. она об этом и не знает. SDK для RTL все давно у меня собираются под WSL в Win10. Основная причина использования WSL - там работает много-поточная сборка (5 секунд сборка полного SDK4.0), а в Win-де, в mingw проблемы с много-поточностью - лепит ошибки файловая система... и в итоге сборка SDK в один поток происходит за 1 минуту.
Там ещё много интересных вещей - на на m.2 PCIE x4 (с трафиком 2.4Gbytes/sec запись-чтение) накопителе разница во времени трансляции пакета SDK3.5/4.0 с древним IDE диском (7..10 ms средний seek, 100 MB/сек) не наблюдается и составляет 10 сек :) А 5 сек - это типа RAM диск и львиная доля времени идет на сборку бинарников... С новой модификацией rtlimage.py ещё не замерял.
Тем более Arduino для серии "B", если переделать на WSL в вынь 10, то можно будет опубликовать - кинуть на git, но исключить установку gcc в WSL, чтобы "общество потребителей" не прошло :)
 
Последнее редактирование:

A_D

Active member
@pvvx WSL штука прикольная, но выходит не совсем переносимо с любого ПК на любой другой..только с win10 Fall Creators Update она доступна любым пользователям (в ранних версиях заморочки были) + гайд под это писать уже целый надо, как запустить всё это)) хотя с другой стороны автоматом отсеивается большинство людей не заинтересованных...
А с В серией.... я с пятницы не то, что примеры проектов не ковырял, даже не открывал, как с работы прийду, вообще желания и времени толком нету ковыряться в них(( Но блин очень хочется уже и на В серии склепать проект. На днях только по А серии посидел, поразбирался как USDK вынести за проект VS (о чем ранее писал) и частично получилось, но всё-равно пока не компилируемо...
Да, к слову.. тут на RDA возможно достану дев борду и чипы или даже доки\sdk, но это не точно пока) Правда по RAM памяти выглядит печально чип и правда, но интересен usb встроенный за такую цену (может как раз и сделать можно на них будет сниффер каналов wifi usbшный и их уже лепи их хоть на все каналы wifi к пк ;) ).
 

pvvx

Активный участник сообщества
@pvvx WSL штука прикольная, но выходит не совсем переносимо с любого ПК на любой другой..только с win10 Fall Creators Update она доступна любым пользователям (в ранних версиях заморочки были) + гайд под это писать уже целый надо, как запустить всё это)) хотя с другой стороны автоматом отсеивается большинство людей не заинтересованных...
Иначе смысл хобби в изучении нового пропадает.
Не надо ничего писать, как поставить gcc в WSL описано уже многократно... Под VS тоже описание есть, но там мне не понравилось, что она каждый файл при трансляции копирует в среду WSL. Т.е. вся производительность к чертям, ещё учитывая новогрядущие патчи на все процы по Meltdown и Spectre. Как их потом выковыривать из системы (это про Meltdown и Spectre)? - Кто допустил аппаратчиков-программистов к давно сложившейся системе разделения на программеров-ботаников и аппратчиков-слесарей? :mad: От них уже получили ограничения в бытовом хламе, теперь ещё... Не знали-бы и так бы и сидели, да всё летало бы...
Я вот туда и не лезу... хотя примерно этим и занят, но выбираю что попроще, для баловства...
Meltdown и Spectre - это как раз тот случай, когда не всю информацию можно давать и вообще где либо оглашать... Теперь параноики с манией преследования всё испортят.
 
Последнее редактирование:

A_D

Active member
Иначе смысл хобби в изучении нового пропадает.
Не надо ничего писать, как поставить gcc в WSL описано уже многократно...
Ну это надо подумать... я честно говоря не пробовал и не вижу пока сильных плюсов это решения.

Под VS тоже описание есть, но там мне не понравилось, что она каждый файл при трансляции копирует в среду WSL. Т.е. вся производительность к чертям,
Вот наверное по этой причине и не пойму, зачем столько заморочек) Не конкретно нюанс копирования файлов, а гонка за скорострельностью.. будет оно 4 или 10-15 сек компилироваться - особо разницы я не вижу..

ещё учитывая новогрядущие патчи на все процы по Meltdown и Spectre. Как их потом выковыривать из системы (это про Meltdown и Spectre)?
Уже вышли патчи, на той неделе вроде как... по идее, просто KB4056892 запрещаем к установке и всё) Правда для AMD там печалька (а у вас как я помню AMD как раз) и с убунтой тоже не оч..

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

pvvx

Активный участник сообщества
Вот наверное по этой причине и не пойму, зачем столько заморочек) Не конкретно нюанс копирования файлов, а гонка за скорострельностью.. будет оно 4 или 10-15 сек компилироваться - особо разницы я не вижу..
Сама суть в спортивном интересе выдавить максимум. :)
При до 5 сек на всё, вместе с заливкой в чип, отладка происходит быстрее. Повторная сборка идет быстрее, т.к. не надо пересобирать всё. Но были проблемы у генераторов бинарников - тоже исправил, слепил на питоне для обоих серий - RTL "A" и "B" (для "В" исправил мелкую ошибку . Теперь, как доберусь до rtlDunio и прочих старых проектов - встрою туда...
Уже вышли патчи, на той неделе вроде как... по идее, просто KB4056892 запрещаем к установке и всё) Правда для AMD там печалька (а у вас как я помню AMD как раз) и с убунтой тоже не оч..
Не поставятся - версия корп. Политика - прошедшие все проверки на обычных пользователях...
Есть такое... только шумиху про что то подымают, сразу начинается у всех подряд подгорание пятой точки и желание скорее как то это решить.. хотя баг это был аж 10 лет и ничего.. )
Дырки производители теперь заделывают кое как (за счет ухудшения и вообще урезания функционала для пользователей), иначе им поставлен ультиматум от данной группы "Google-харкеров" - полная публикация ошибки через месяц, если фирма не исправляет... Короче скоро доиграются до увеличения цены на всё Hard/Soft в десятки раз и размеров программ...или вообще каких глобальных запретов.
 
Последнее редактирование:

A_D

Active member
Сама суть в спортивном интересе выдавить максимум. :)
При до 5 сек на всё, вместе с заливкой в чип, отладка происходит быстрее. Повторная сборка идет быстрее, т.к. не надо пересобирать всё. Но были проблемы у генераторов бинарников - тоже исправил, слепил на питоне для обоих серий - RTL "A" и "B" (для "В" исправил мелкую ошибку . Теперь, как доберусь до rtlDunio и прочих старых проектов - встрою туда...
Мне бы столько времени и возможностей... ) мечты-мечты..постоянно не хватает ни на что по хобби времени(

Не поставятся - версия корп. Политика - прошедшие все проверки на обычных пользователях...
Тоже Enterprise зачастую ставлю, иногда ставлю еще LTSB версию, когда хочется совсем чистой ОС для экспериментов.
 

nkly

New member
Не получается вывести ШИМ частотой 1кГц с разрядностью 8 бит. В диапазоне от 0 до 255 происходит только 16 изменений ширины импульса. Для модуля RTL00 это предел? ШИМ контроллер тоже от 32кГц тактируется? И, возможно ли генерировать 4 ШИМ сигнала с такими параметрами?
---------
Разобрался, так и должно быть, минимальный тик таймера для ШИМ 61мкС.
 
Последнее редактирование:

Руснак

New member
Глупый вопрос
После прошивки примера ota_non_block всегда запускается OTA прошивальщик, если НЕ заземлен нужный пин. Мне кажется, логичнее было бы сделать наоборот - запускать прошивальщик только при заземлении пина. Подскажите, где надо поправить для нужного поведения, я пока еще нуб в этом чипе.
 

A_D

Active member
Глупый вопрос
После прошивки примера ota_non_block всегда запускается OTA прошивальщик, если НЕ заземлен нужный пин. Мне кажется, логичнее было бы сделать наоборот - запускать прошивальщик только при заземлении пина. Подскажите, где надо поправить для нужного поведения, я пока еще нуб в этом чипе.
А не наоборот? Какую кстати используете, офф., RAK или от pvvx ?

Код:
#if defined(BOARD_RTL8710)
#define RECOVER_PIN 9 // PC_1, if "0" (connect gnd) -> boot OTA
#elif defined(BOARD_RTL8711AM)
#define RECOVER_PIN 10 // PC_1, if "0" (connect gnd) -> boot OTA
#else
#define RECOVER_PIN 18 // PE_5?
#endif
 

Руснак

New member
А не наоборот? Какую кстати используете, офф., RAK или от pvvx ?

Код:
#if defined(BOARD_RTL8710)
#define RECOVER_PIN 9 // PC_1, if "0" (connect gnd) -> boot OTA
#elif defined(BOARD_RTL8711AM)
#define RECOVER_PIN 10 // PC_1, if "0" (connect gnd) -> boot OTA
#else
#define RECOVER_PIN 18 // PE_5?
#endif
Использую от pvvx, если пин НЕ подтянут к земле - грузится прошивальщик. Если думаете, что я ошибаюсь - попробую еще поэкспериментировать.
 

A_D

Active member
Использую от pvvx, если пин НЕ подтянут к земле - грузится прошивальщик. Если думаете, что я ошибаюсь - попробую еще поэкспериментировать.
я не использовал ардуино, странно просто, что не соответствует поведение описанию..
По выбору 1\0 - в файле OTA.cpp либы в функции:
Код:
int OTAClass::setRecoverPin(uint32_t pin1, uint32_t pin2) {
    uint8_t boot_pin1 = 0xFF;
    uint8_t boot_pin2 = 0xFF;
    uint32_t boot_pins = 0;
   
    if ( pin1 < TOTAL_GPIO_PIN_NUM ) {
        boot_pin1 = (g_APinDescription[pin1].pinname) & 0xFF;
        boot_pin1 |= 0x80; // <<< ---------------- Вот это указывает на уровень сигнала, можно сменить на 0x00
        OTA_PRINTF("Pin1: P%c_%d\r\n", ((boot_pin1>>4)&7)+'A', boot_pin1&0x0F);
    }

    if ( pin2 < TOTAL_GPIO_PIN_NUM ) {
        boot_pin2 = (g_APinDescription[pin2].pinname) & 0xFF;
        boot_pin2 |= 0x80; // <<< ---------------- Вот это указывает на уровень сигнала, можно сменить на 0x00
        OTA_PRINTF("Pin2: P%c_%d\r\n", ((boot_pin1>>4)&7)+'A', boot_pin1&0x0F);
    }

    if (boot_pin1 != 0xFF || boot_pin2 != 0xFF) {
        boot_pins = (boot_pin1 << 8) | boot_pin2;
        set_system_data(0x0008, boot_pins);
    }
}
Вроде бы так по памяти, не проверял
 

barakuda62

New member
Использую от pvvx, если пин НЕ подтянут к земле - грузится прошивальщик. Если думаете, что я ошибаюсь - попробую еще поэкспериментировать.
Если пин не подтянут к GND грузится прошивальщик, если пин подтянут грузится прошивка из раздела памяти boot OTA, логика правильная.
 

Руснак

New member
Если пин не подтянут к GND грузится прошивальщик, если пин подтянут грузится прошивка из раздела памяти boot OTA, логика правильная.
Но ведь логичнее было бы наоборот - прошивальщик должен грузиться при совершении действия (подтягивании пина).
Впрочем, неважно - это мои UI/UX заморочки.
 

barakuda62

New member
Но ведь логичнее было бы наоборот - прошивальщик должен грузиться при совершении действия (подтягивании пина).
Впрочем, неважно - это мои UI/UX заморочки.
Возможно !, как бы то ни было действие (перемычка) имеет место быть.
 
Сверху Снизу