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

Arduino для RTL8710.

Pilnikov

Active member
@Neov помогите забодать

C:\Program Files (x86)\Arduino\hardware\development\rtl87xx\cores\arduino/Arduino.h:66:17: error: 'class LOGUARTClass' has no member named 'rtl_printf'

#define printf rtl_printf

^
Z:\ardu\sketch\Main\wc_rt1\d_msg.ino:70:20: note: in expansion of macro 'printf'


ругается на DBG_OUT_PORT.printf("Invalid display type %u\n",disp);

Как присобачить внешний макрос к классу?

Я тут уже читал про printf для ртл - ов - мол проблемный он, а где читал - не помню
 

Neov

Member
лучше зорга спросите, я ардуину ковырял давно, еще на аврке, и понял что дурина мне не нравится.
но подозреваю, что вызываемый метод printf подменяется препроцессором на rtl_printf. Осторожней с define :)
ну либо добавьте в класс метод-клон rtl_printf :)
 

pvvx

Активный участник сообщества
Я тут уже читал про printf для ртл - ов - мол проблемный он, а где читал - не помню
Он не проблемный, а частью реализован в ROM-BIOS, используя назначенные при сборке ROM-BIOS области SRAM под буфера в фиксированных адресах.
Но у вас С++ и вообще другая версия компилятора и библиотеки GCC при сборке используют другие буфера для вашего кода, тем самым увеличивая потребление RAM (двойные области для процедур ROM-BIOS и проекта). Вот если совмещать эти области для уменьшения потребления RAM, то и возникают некоторые преодолимые сложности, что не совсем просто - в этом и вся проблемность для тех кто плохо это понимает.
Переключение на rtl_printf и есть переключение на использование части процедур в ROM-BIOS.
надеюсь @pvvx не накинется
А зачем (?) - эта система то не нужна и вписывается в самоуничтожение :) Для C++ на RTL-ы есть mbed. Там и библиотек поболее...
А Visual Studio и так прекрасно собирает проекты Arduino, но вот только записать в чип не может (надо вручную ковырять заливку и прошивку в установках Visual Studio).
 
Последнее редактирование:

Pilnikov

Active member
в чем тогда разница между
Код:
printf ("Hello");
и
Код:
Serial.printf ("Hello");
?
 

Pilnikov

Active member
Т.е. так
Код:
int LOGUARTClass::rtl_printf(const char *fmt, ...)
{
rtl_printf(fmt);
}
можно делать?
 

pvvx

Активный участник сообщества
Странные у вас желания –испортить всё. Для каждого применения всегда есть оптимальный подход. “На все случаи жизни” ничего не бывает.

Не забывайте, что есть ещё DiagPrintf – это прямо в ROM-BIOS, без заголовков в RAM.

Вообще в RTOS так не делают. Printf, rtl_printf, Serial.print[f] и прочие не имеют атомарности исполнения - это дело пользователя, окружить его семафорами или типа… Иначе, в многозадачке, в одной строке будут перемешаны разные буквы от разных потоков :) Но вам то всё равно – Arduino.
 

Pilnikov

Active member
немного цитат с ардуино.ру

Да и, если разобраться, многопоточность не такой уж и благо. Без него все гораздо предсказуемей/проще. Нет проблемы с блокировками, с тем конкрутным доступом и т.п. Вообщем без многопоточности скетч гораздо вероятней "либо работает, либо нет". А с многопоточностью "вроде работет, но это ничего не значит".

По памяти тоже: никогда не знаете сколько у вас ее будет. Когда GC соизволит запуститься (и сколько времени это займет).
public static void Main() {

OutputPort led = new OutputPort(Cpu.Pin.GPIO_Pin1, false); //PA1 on discovery board

while (true) {

led.Write(true);

Thread.Sleep(500);

led.Write(false);

Thread.Sleep(500); }

}

тут же сразу и многопоточность в чистом виде, поддерживаема кортексом на уровне ядра..
Взять вот так и целую Thread тормознуть.
На самом деле я уже говорил о своей позиции и точке зрения на все это, как на игрушку. Нет реальных задач под многопоточность.
В "больших" ПК до сих пор немного приложений в полной мере использующих многоядерность современных процессоров. А ОС тоже не способна сделать это за ПО
 

pvvx

Активный участник сообщества
На самом деле я уже говорил о своей позиции и точке зрения на все это, как на игрушку. Нет реальных задач под многопоточность.
А у меня есть. По этому Arduino мне не нуно.
В "больших" ПК до сих пор немного приложений в полной мере использующих многоядерность современных процессоров. А ОС тоже не способна сделать это за ПО
Многоядерность и многопотчность вещи разные. Если вы используете WiFi не по предназначению, то и получается "игрушка". Но это не у всех так... если не считать, что "вся жизнь - игра" :)
Причины вам уже описаны – WiFi SoC – это устройство, используемое когда нужен трафик более 100 килобайт в сек. UART это не прокачивает. Задачи Arduino ограничены десятком байт коммуникации в минуту и там вполне хватает BT и подобных беспроводных протоколов.
 
Последнее редактирование:

Pilnikov

Active member
Одна задачка у меня есть - я слукавил немного, не диодом поморгать, а пищалкой попищать "бумера" в фоне
 

Pilnikov

Active member
@pvvx, у вас отношения к СОКам как будто к чипам из роутеров и задачи почему-то вы видите в основном те-же что и решают роутеры (утрировано все конечно, но по простому) но тут еще и ножки, гпио которые, есть - т.е. диодиком поморгать сам бог велел.
 

pvvx

Активный участник сообщества
@pvvx, у вас отношения к СОКам как будто к чипам из роутеров и задачи почему-то вы видите в основном те-же что и решают роутеры (утрировано все конечно, но по простому) но тут еще и ножки, гпио которые, есть - т.е. диодиком поморгать сам бог велел.
Дык мигает же. Проблем то нет.
А роутеры и есть первый эшелон, где были затребованы WiFi SoC в быту.
Хотите что-то большее, например задействовать ресурсы данного WiFi SoC на более 5% - отказывайтесь от Arduino или ждите когда на вашу задачу кто даст готовое решение "без шагу в сторону".

В rtlDuino вложены примеры и либы. Они работают - пользуйтесь. Зачем тогда лезете в printf/rtl_printf ? Вы же явно указали, что у вас позиция пользователя, а тут разбирают и вопросы разработки самой Arduino. Вам то зачем они и что хотите от них (?) - всё равно какого-либо решения от вас не видно в этом плане.
Или вы пытаетесь описать стандарт для Arduino для разработчиков? Но тогда вам надо освоить среды, в которых пишутся либы и ядро для Arduino, чтобы потом вышел пример скетча “делай как я” повторяя его пользователями с видео на ютубе и ни шагу в сторону, т.к. это принесет неоднозначности и кучи вопросов у пользователей Arduino. И кто их будет решать, разбираться в том, что каждый пользователь нагородил и писать ему личный пример “скетча” для решения его вопроса?
 
Последнее редактирование:

Pilnikov

Active member
Скетч использует 349348 байт (93%) памяти устройства. Всего доступно 372736 байт.
А вы говорите
;)
На самом деле есть ресурсоемкие задачи - тот же мп3 или прорисовка цветного экрана, но для них существуют специализированные чипы, которые гораздо дешевле CPU (SoC) общего применения с теми же возможностями, по крайней мере в производстве.
 

pvvx

Активный участник сообщества
Скетч использует 349348 байт (93%) памяти устройства. Всего доступно 372736 байт.
А вы говорите

;)
Именно - 5% от аппаратных возможностей. Остальное занято никчемным кодом для упрощения и привода в рамки Arduino.
На самом деле есть ресурсоемкие задачи - тот же мп3 или прорисовка цветного экрана, но для них существуют специализированные чипы, которые гораздо дешевле CPU (SoC) общего применения с теми же возможностями, по крайней мере в производстве.
А кто вам сказал, что надо MP3 делать на данном чипе?
Тут, на основе MP3 создан тест производительности чипа для сравнения с ESP8266. Код то взят от ESP8266 и дополнен, что и показало большие возможности внутренних специализированных встроенных контролеров данного WiFi SoC... Т.е. в отличии от мигания светодиодом, получили использование уже двух встроенных специализированных контроллеров в данных SoC (wifi + i2s + DMA).

Для пользователя-кухонного игрунчика в Arduino с потребностями на али-экспрес данное решение просто дешевле, чем припаивать внешний чип, а показатели итого – одинаковы.

Прорисовка цветного экрана на RTL тоже делается с помощью внутренних специализированных встроенных контролеров в данный чип. Посмотрите примеры - они уже готовы и работают. Если надо больший экран - берете RTL8711AM.
SoC и есть сборка специализированных встроенных контролеров в один чип, а вы тянете к MCU c тупым CPU и их подходам. Это время давно прошло, а производители выпускают разнообразные SoC для частных решений нестандартных задач, когда итого с разработкой выходит дешевле, чем оптовый заказ тысяч чипов специализированного назначения.
По этому споры, какой тип CPU круче, давно канули в лето и остались уделом только старых-пер..ов, неспособных освоить другой… А решающее значение в SoC имеет встроенные контроллеры, а не "ногодрыг" и обучение в нем никому не нужно на современном этапе :)
 
Последнее редактирование:
Сверху Снизу