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

Eclipse demo project для RTL-00

pvvx

Активный участник сообщества
Адаптировал демо проект из SDK v.3.5a для Eclipse с настроенным GNU ARM Eclipse.
Вы так пока не разобрались, что это именно Demo, а не SDK? Отличие в том, что там в проект включена масса лишних файлов с примерами. Тот-же "AT" - это всего пример. В данной сборке и не полная версия для создания ядра к Arduino (зачем-то часть установок в *.h порезали и убрали куски из lib_*.a файлов).
 

Neov

Member
Вы так пока не разобрались, что это именно Demo, а не SDK? Отличие в том, что там в проект включена масса лишних файлов с примерами. Тот-же "AT" - это всего пример. В данной сборке и не полная версия для создания ядра к Arduino (зачем-то часть установок в *.h порезали и убрали куски из lib_*.a файлов).
Предлагаемый Eclipse проект почти полностью подражает сборке примеров из стандартного SDK. Никакой "отсебятины". Для быстрого и удобного ознакомления, сборки и отладки "по кнопке".
 

pvvx

Активный участник сообщества
Предлагаемый Eclipse проект почти полностью подражает сборке примеров из стандартного SDK. Никакой "отсебятины". Для быстрого и удобного ознакомления, сборки и отладки "по кнопке".
Теряется смысл подключения Eclipse. Для сборки стандартного проекта достаточно скачать SDK и набрать make в командной строке :) И там даже есть прошивка в модуль, но использующая программатор от платы Ameba.
Отлаживать готовый проект "AT" ? :)
Это запросто делается и без Eclipse : Сравнение RTL8710 и ESP8266
 
Последнее редактирование:

Neov

Member
Теряется смысл подключения Eclipse. Для сборки стандартного проекта достаточно скачать SDK и набрать make в командной строке :)
Это запросто делается и без Eclipse
Можно много чего делать без Eclipse, и если Вам это делать нравится - я не возражаю :)
Лично мне, я думаю и многим другим, будет приятней знакомиться с кодом, его структурой, а также программировать и отлаживать в Eclipse. При этом сохранив компоненты и примеры из официального SDK.
 

pvvx

Активный участник сообщества
Можно много чего делать без Eclipse, и если Вам это делать нравится - я не возражаю :)
Лично мне, я думаю и многим другим, будет приятней знакомиться с кодом, его структурой, а также программировать и отлаживать в Eclipse. При этом сохранив компоненты и примеры из официального SDK.
Это давно сделано и выложено с другим примером и SDK полностью настраивается и всё прошивается через J-Link/STLink...

Ещё не адаптировал только загрузку через J-Link/STLink для RTL8711AM данного SDK в RAM. Там существует беда – контроллер SDRAM включается и настраивается в коде первого загрузчика.
Вы уже починили это?
Прошивку в Flash для RTL8711AM в Arduino через J-Link/STLink тоже уже сделал, но пока не выкладывал новую версию.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Бога ради :)
у вас все сшивается собственными Makefile
у меня все средствами самого Eclipse :)
Не работает ваша последняя версия, требует отдельный комп с вашими установками:
Код:
10:02:04 **** Incremental Build of configuration Debug for project RTL00-Test1 ****
make all
Building file: ../rtl_sdk/component/common/utilities/tcptest.c
Invoking: Cross ARM C Compiler
arm-none-eabi-gcc .....вырезал..... "../rtl_sdk/component/common/utilities/tcptest.c"
In file included from ../rtl_sdk/component/common/utilities/tcptest.c:5:0:
E:\RTL87xx\tst\RTL00-Test1\rtl_sdk\component-inc\common\network\lwip\lwip_v1.4.1\src\include/lwip/sockets.h:313:8: error: redefinition of 'struct timeval'
struct timeval {
        ^
In file included from d:\mcu\gnu_tools_arm_embedded\5.4_2016q2\arm-none-eabi\include\sys\select.h:26:0,
                 from d:\mcu\gnu_tools_arm_embedded\5.4_2016q2\arm-none-eabi\include\sys\types.h:68,
                 from d:\mcu\gnu_tools_arm_embedded\5.4_2016q2\arm-none-eabi\include\stdio.h:48,
                 from E:\RTL87xx\tst\RTL00-Test1\rtl_sdk\component-inc\common\api/platform/platform_stdlib.h:27,
                 from E:\RTL87xx\tst\RTL00-Test1\rtl_sdk\component-inc\common\api\network\include/lwipopts.h:27,
                 from E:\RTL87xx\tst\RTL00-Test1\rtl_sdk\component-inc\common\network\lwip\lwip_v1.4.1\src\include/lwip/opt.h:45,
                 from E:\RTL87xx\tst\RTL00-Test1\rtl_sdk\component-inc\common\network\lwip\lwip_v1.4.1\src\include/lwip/sockets.h:37,
                 from ../rtl_sdk/component/common/utilities/tcptest.c:5:
d:\mcu\gnu_tools_arm_embedded\5.4_2016q2\arm-none-eabi\include\sys\_timeval.h:52:8: note: originally defined here
struct timeval {
        ^
make: *** [rtl_sdk/component/common/utilities/tcptest.o] Error 1

10:02:10 Build Finished (took 6s.407ms)
Причина - на компе установлен новый GCC, старый как и положено лежит в папочке sdk. Все остальные настройки по вашим описаниям. Что-то опять пропущено и не указано... :)
И самое главное - как прошить то пример в модуль?
 
Последнее редактирование:

sharikov

Active member
у вас все сшивается собственными Makefile
у меня все средствами самого Eclipse :)
Использовать встроенные средства Eclipse для сборки в случае кросс-компиляции - порочный путь. Раньше я так делал и отказался. Постоянные проблемы с конфигурированием плагина.
Чтобы кросс-проекты собиралось без проблем нужно использовать только external builder и makefile написанный ручками! Эклипс прекрасно умеет работать с makefile проектами.
Чайникам оставьте ардуину.
 

Neov

Member
Причина - на компе установлен новый GCC, старый как и положено лежит в папочке sdk. Все остальные настройки по вашим описаниям. Что-то опять пропущено и не указано... :)
В readme указано: Set up toolchain path to your "sdk_ameba_3.5a\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin"
И самое главное - как прошить то пример в модуль?
Сейчас он только собирает ELF и загружает его в RAM. В большинстве для запуска и отладки - достаточно. Добавить сборку бинарника - в планах.
Использовать встроенные средства Eclipse для сборки в случае кросс-компиляции - порочный путь. Раньше я так делал и отказался. Постоянные проблемы с конфигурированием плагина.
Особых сложностей и проблем конкретно для этого модуля - не встречал. С другими модулями возможно сложнее.
 

sharikov

Active member
Особых сложностей и проблем конкретно для этого модуля - не встречал. С другими модулями возможно сложнее.
Сложности не с модулем а с плагином. Разработчики его регулярно ломают и не чинят полгода, такая же ситуация при обновлении эклипса: обновили -> плагин перестал работать, фиксят через X месяцев а работать надо сейчас.
 

pvvx

Активный участник сообщества
В readme указано: Set up toolchain path to your "sdk_ameba_3.5a\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin"
Предлагаете перед каждым проектом менять комп? :)
Это не поможет, т.к. возникнут другие проблемы. У вас прописано все кое как, то "/", то "\" и либ не находится.
После длительных манипуляций над вашей конфигурацией что-то удается собрать, но это демка без итого. Там даже нет правильного выходного бинарника... :)
Лично мне, я думаю и многим другим, будет приятней знакомиться с кодом, его структурой, а также программировать и отлаживать в Eclipse. При этом сохранив компоненты и примеры из официального SDK.
Вот и я про то-же :) Меняете в paths.mk папку на другой SDK
SDK_PATH = ../sdk_ameba_v3.5a/
и транслируете. При этом новый проект не включает файлов из SDK вообще, а в окошках имеете все примеры :p
Если вам приспичило включить в проект папку из SDK, то делается это по другому, чем сделали вы:
Снимок15.gif Снимок12.gif Снимок13.gif
Есть и другие пути...
Через пол-года освоите, судя по темпам :)

Да, забыл... Для данного SDK, для его либ, требуется другой главный скрипт для линковщика с описанием начала и конца групп. Иначе у вас ваши obj заменяются obj из либ. И важна последовательность вписывания библиотек и obj. (в либах дубли и доп.атрибуты у функций, к примеру _WEAK)... Потом слепите раздельные либы, т.к., к примеру для LwIP и SSL не всегда требуется перекомпиляция при замене platform_autoconf.h или platform_opts.h...
И желательно поставить новый gcc - вылезут сотни варнингов, которые можно поправить в SDK :)
Сборщики бинарников и их исходники находятся тут: Arduino/postbuild_img2_arduino_windows.cpp at master · Ameba8195/Arduino · GitHub
И либы там более новые и полноценные... а не обгрызанный этими PADI IoT Stamp Resources – PINE64 SDK.
 
Последнее редактирование:

Neov

Member
Предлагаете перед каждым проектом менять комп? :)
Как Вы так все усложняете?
Открываете свойства проекта C/C++ Build -> Tools Paths -> Toolchain folder устанавливаете в C:\...ваш_путь...\sdk_ameba_3.5a\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin. Можете поменять комп, но не вижу необходимостию
Это не поможет, т.к. возникнут другие проблемы. У вас прописано все кое как, то "/", то "\" и либ не находится.
Есть такой грешок. Но поскольку у меня все прекрасно собирается не стал менять. Был бы рад подробностям: какая либа не нашлась из-за слешей?
Если вам приспичило включить в проект папку из SDK, то делается это по другому, чем сделали вы:

Есть и другие пути...
Через пол-года освоите, судя по темпам :)
Спасибо за справку, хоть я и знал про это :) В этом проекте я решил включить все исходники.
Для данного SDK, для его либ, требуется другой главный скрипт для линковщика с описанием начала и конца групп.
Скрипт линковщика взят из SDK, в нем доп. символы прописаны.
И важна последовательность вписывания библиотек и obj. (в либах дубли и доп.атрибуты у функций)...
Вы имеете в виду, что подача объектных модулей при линковке должна строго придерживаться определенному порядку?
 

pvvx

Активный участник сообщества
Как Вы так все усложняете?
Открываете свойства проекта C/C++ Build -> Tools Paths -> Toolchain folder устанавливаете в C:\...ваш_путь...\sdk_ameba_3.5a\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin. Можете поменять комп, но не вижу необходимостию
Значит данный пример только для вашего компа.
Он не меняется. Там общая галка на всё - заменить всё или добавить :p
Есть такой грешок. Но поскольку у меня все прекрасно собирается не стал менять. Был бы рад подробностям: какая либа не нашлась из-за слешей?
Все :)
Спасибо за справку, хоть я и знал про это :) В этом проекте я решил включить все исходники.
А пишите о сохранении исходных структур директорий :)
Скрипт линковщика взят из SDK, в нем доп. символы прописаны.
У вас один пример, который использует всего до 30% либ. Потыркаетесь, попишите и увидите :) Тем более скрипт не от reatek, а от PADI. :) Они там чего-то напатчили в SDK, чтобы впихнуть в RTL00 модуль - вы и пользуетесь. У Ameba части отличаются и уже дписаны и поправлены по мелочи... SDK 3.5 поулчилась после патчей описанных тут: Методы увеличения памяти для собственных приложений в sdk-ameba1-v3.4b3_without_NDA.
Вы имеете в виду, что подача объектных модулей при линковке должна строго придерживаться определенному порядку?
Да. Попробуйте поменять. Не даны -Wl,--start-group ... -Wl,--end-group
 
Последнее редактирование:

Neov

Member
Он не меняется. Там общая галка на всё - заменить всё или добавить :p
Не понимаю о чем речь. Просьба прислать скриншот в личку.
Спасибо за информацию
А пишите о сохранении исходных структур директорий :)
Начиная с крайней версии - уже не пишу :)
 

pvvx

Активный участник сообщества
Не понимаю о чем речь.
Снимок16.gif
Галки работают на всю группу и при переносе проекта бяда.
Начиная с крайней версии - уже не пишу :)
Ещё в скрипте линкера *.ld присутствуют KEEP(*(секции)), говорящие включать всегда коды этих секций. А если вы не используете в проекте функции из них, то они будут занимать место в RAM и потянут за собой другие коды. Плюс в либах очень много лишнего - десятки example, части из которых линкуются и занимают память. Чтобы это исключить для своего проекта приходится всё переписывать.
Правильнее было бы описать обязательные точки вхождения:
EXTERN(RAM_IMG2_VALID_PATTEN)
EXTERN(InfraStart)
EXTERN(gImage2EntryFun0)
чтобы линкер сам собрал связи, а не помещал в проект лишний хлам.
От последовательности предоставления линкеру библиотек и obj зависит дерево включаемых объектов... Кароче обращайтесь к документации на линкер gcc...
До этого я говорил об этом скрипте:
Снимок17.gif
Вроде там есть зависимость и в какой последовательности стоит описание инклуда директорий либ. По этому у вас и не находит инклуды для *.ld и вы их тащите в основную директорию проекта...

Т.е. к данному SDK другой подход - его необходимо модифицировать под свой проект и совершенству никогда не бывает предела...
Самый простой способ, чтобы не вписывать в проект ещё и прихоти Eclipse у меня и получается использовать makefile... Просто так быстрее и нет зависимости от оболочки и её версий.
 
Последнее редактирование:

Neov

Member
Если прорезюмировать, для модуля RTL-00 имеем:

SDK 3.5 :
  • библиотеки устарели и "обгрызаны", код богат "варнингами",
  • линкует неправильно, много лишнего
  • это SDK для другого модуля (PADI), а следовательно множество подводных камней
Ameba Arduino :
  • библиотеки свежее и богаче,
  • новая версия скрипта линковки, линкует правильно, но по-прежнему много лишнего
  • это не SDK, а Arduino, полностью совместимый с RTL-00

В итоге из вариантов работы с модулем:
  • Arduino + допил от pvvx
  • Слепить SDK из Arduino
  • Использовать UDK от pvvx
При этом нужно изучить до деталей скрипт линковки, исходники компонент SDK и оптимизировать для каждого проекта, а следовательно нужно запастись свободным временем. Т.е. качественного быстрого старта не будет?
 
Сверху Снизу