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

SDK 4.0a

pvvx

Активный участник сообщества
Если нужна переносимость, то вряд ли смогу лучше. Но зачем переносимость по адресам? Вроде бы адрес загрузки известен заранее. Ну пусть будет так, переносимость не вредит.
Нет там никаких потуг для переносимости адресов исполнения. Стоит загрузка значения регистра по адресу со смешением от PC. Константой в регистр произвольное значение не загрузить.
---------

Снимок1509.gifСнимок1510.gif Снимок1511.gif
Выявлено - мешают какие-то записи в flash. Т.е. без стирания всей Flash падает на протектед.
Калибровки можно сохранить перед очисткой (всю flash) и потом записать снова (выставив только галки на опциях "* data" и скормив ранее сохраненный FullFlash.bin).
Но, в базе у проданных модулей кривые настройки в "System data" (9-ый сектор, смешение в Flash 0x9000), и желательно загрузить более подходящие для SPIC к RTL00 из OTA_RTLDuino.bin в RtlDuino/development/rtl87xx/tools at master · pvvx/RtlDuino · GitHub. Там правда прописан пин переключения прошивок (основная/ОТА) на PC_1.
10-й сектор "Calibration data" содержит настройки WiFi и там есть ваш MAC.

А бяку надо чинить в исходниках SDK - нефиг ему грузить что попало из Flash в какой-то процедуре AT и сразу в рот :)

IAR у меня на оф. J-link сразу записал всё правильно. Не знаю с чем вы там боритесь...
 
Последнее редактирование:
Нет там никаких потуг для переносимости адресов исполнения. Стоит загрузка значения регистра по адресу со смешением от PC. Константой в регистр произвольное значение не загрузить.
Видимо все же все ради переносимости. Загрузкой значения не ограничиваются, к загруженному прибавляют РС, так переносимость по адресам получается.
По сути я сейчас борюсь с IARом. Получить от него код, который должен бы исполняться мне удалось только после выкидывания из image2.icf куска:
Код:
define block SHT$$PREINIT_ARRAY { preinit_array };
define block SHT$$INIT_ARRAY { init_array };
define block CPP_INIT with alignment = 8, fixed order {       
                                                block SHT$$PREINIT_ARRAY,
                                                block SHT$$INIT_ARRAY
                                                };
Тогда получается начало таблицы = конец таблицы = 0
У вас какая версия IARа смогла все правильно сгенерить?
 
У меня IAR 8.11.1 Видимо слишком новый, изменили поведение линкера. В опции --cpp_init_routine описание:
Код:
When using the IAR C/C++ compiler and the standard library, C++ dynamic initialization is handled automatically. In other cases you might need to use this option.
If any sections with the section type INIT_ARRAY or PREINIT_ARRAY are included in your application, the C++ dynamic initialization routine is considered to be needed. By default, this routine is named _ _iar_cstart_call_ctors and is called by the startup code in the standard library. Use this option if you are not using the standard library and require another routine to handle these section types.
Т.е. если есть PREINIT_ARRAY, то будет и вызов конструкторов. Только какой-то переменной, обозначающей конец таблицы, для стандартной _ _iar_cstart_call_ctors не создается, она заменяется на 0 и получается ерунда. Правда при выкидывании секций с init-ами _ _iar_cstart_call_ctors все равно создается, но уже не зависает, т.к. начало и конец таблицы становится 0. В общем, теперь у меня все запустилось в IAR-е:
Код:
===> Flash Init                                                                
                                                                               
===> Flash Init Done, vendor: MXIC                                             
                                                                               
===> Flash Write, start 0, addr 5, offset 0, count 14872, buf 10003c00         
clear signature                                                                
Write Binary....Done                                                           
                                                                               
<=== Flash Write Done 3a38                                                     
                                                                               
===> Flash Init                                                                
                                                                               
===> Flash Init Done, vendor: MXIC                                             
OTA addr is 50000                                                              
                                                                               
===> Flash Write, start b000, addr 3a38, offset 0, count 260352, buf 10003c00  
Write Binary....Done                                                           
signature 88167923                                                             
                                                                               
<=== Flash Write Done 4a90c                                                    
===== Enter Image 1.5 ====                                                     
Img2 Sign: RTKWin, InfaStart @ 0x10006051                                      
===== Enter Image 2 ====                                                       
#interface 0 is initialized                                                    
interface 1 is initialized                                                     
                                                                               
Initializing WIFI ...                                                          
Start LOG SERVICE MODE                                                         
                                                                               
#                                                                              
wext_set_pscan_channel():ioctl[SIOCDEVPRIVATE] error                           
WIFI initialized                                                               
                                                                               
init_thread(53), Available heap 0xd508                                         
#ATS?                                                                          
[ATS?]: _AT_SYSTEM_HELP_                                                       
[ATS?]: COMPILE TIME: 15.06.2017-11:09:45                                      
[ATS?]: SW VERSION: v.3.4.15.06.2017                                           
                                                                               
[MEM] After do cmd, available heap 59744                                       
                                                                               
                                                                               
#
 
Зарегистрировался на www.amebaiot.com файл нашел только по названию, там все на китайском. Собственно весь патч - это замена в SDK image2.icf на другой. Тем кто будет запускать SDK с IAR 8.11 (наверное с любым 8.хх) эту замену надо делать обязательно.
 
Продолжаю возиться с SDK, пытаюсь запустить сервер из примеров. Включил его так:
#define CONFIG_EXAMPLE_HTTPD 1
После этого пришлось опции для папки SDRAM изменить, в ней SSL, который мне пока не нужен, но оно в SDRAM направлялось, которой нет, пришлось сделать как у всех в SRAM.
После этого запускается, но вылетает :
#interface 0 is initialized
interface 1 is initialized

Initializing WIFI ...
Start LOG SERVICE MODE

#
[HTTPD] httpd_server_thread started
RTL8195A[HAL]: Hard Fault Error!!!!
RTL8195A[HAL]: R0 = 0x1
RTL8195A[HAL]: R1 = 0x100648b9
RTL8195A[HAL]: R2 = 0x0
RTL8195A[HAL]: R3 = 0x0
RTL8195A[HAL]: R12 = 0x1
RTL8195A[HAL]: LR = 0x10024a5b
RTL8195A[HAL]: PC = 0x4
RTL8195A[HAL]: PSR = 0x1000000
RTL8195A[HAL]: BFAR = 0x8
RTL8195A[HAL]: CFSR = 0x1
RTL8195A[HAL]: HFSR = 0x40000000
RTL8195A[HAL]: DFSR = 0x0
RTL8195A[HAL]: AFSR = 0x0
RTL8195A[HAL]: PriMask 0x0
RTL8195A[HAL]: BasePri 0x0
RTL8195A[HAL]: SVC priority: 0x00
RTL8195A[HAL]: PendSVC priority: 0xf0
RTL8195A[HAL]: Systick priority: 0xf0

Пошаговой отладкой выяснил, что что вылетает тут:

на следующем шаге оказываемся не на 0x10015858 а там:

почему такое происходит мне не понятно. Что может быть причиной?
 

pvvx

Активный участник сообщества
Продолжаю возиться с SDK, пытаюсь запустить сервер из примеров. Включил его так:
#define CONFIG_EXAMPLE_HTTPD 1
Вы данный пример вместе с "AT" пытаетесь запустить на RTL c 512к?
После изменения опций для SSL в SDRAM, в map остается:
mfl_code_to_length 0x30000000 0x14 Data Lc ssl_tls.o [2]
И в application.map:
30000000 D SDRAM$$Base
30000000 d mfl_code_to_length
30000014 D SDRAM$$Limit
30000014 D SDRBSS$$Base
30000014 d supported_init
30000018 d supported_ciphersuites
30000034 D SDRBSS$$Limit

+ файл sdram.bin не пустой, а содержит этот блок. При обращении к нему и будет " Hard Fault Error!"
 
Последнее редактирование:

pvvx

Активный участник сообщества
Ameba кинули уже версию для GCC:
Снимок1521.gif

После скачивания SDK GCC, в каталоге sdk-ameba-v4.0b_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\GCC-RELEASE\ запустил mingw32-make.exe.
Получил их старую (с прошлого SDK) ошибку:
../../../component/soc/realtek/8195a/misc/iar_utility/common/tools/pick: cannot execute binary file

После исправления которой, всё успешно собралось (см. compile.txt).
Загрузка в модуль RTL00 c помощью ранее кинутых JLink-RunRAM.bat и правки где брать bin файл:
Код:
=========================================================

ROM Version: 0.3

Build ToolChain Version: gcc version 4.8.3 (Realtek ASDK-4.8.3p1 Build 2003)

=========================================================
Check boot type form eFuse
SPI Initial
Image1 length: 0x2018, Image Addr: 0x10000bc8
Image1 Validate OK, Going jump to Image1
===== Enter FLASH-Boot ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x11113
Selected Image 1.
Load Flash seg0: 0x0000b010 -> SRAM: 0x10006000, size: 254688
===== Enter SRAM-Boot 1 ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x20111157
Img Sign: RTKWin, Go @ 0x10006051
===== Enter Image 2 ====
#interface 0 is initialized
interface 1 is initialized

Initializing WIFI ...
Start LOG SERVICE MODE

#
RTL8195A[Driver]: set ssid [***********]
RTL8195A[Driver]: start auth to **:**:**:**:**:**
RTL8195A[Driver]: auth success, start assoc
RTL8195A[Driver]: association success(res=2)
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1
Interface 0 IP address : 192.168.1.122
WIFI initialized

init_thread(53), Available heap 0xd090
# ATS?
[ATS?]: _AT_SYSTEM_HELP_
[ATS?]: COMPILE TIME: 2017/06/20-16:03:41
[ATS?]: SW VERSION: v.3.4.20170620

[MEM] After do cmd, available heap 58600
#
Итого - для написания данного сообщения потребовалось больше времени, чем произвести сборку и запуск примера с нуля уже на модуле :).
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Внесенные исправления в application.mk:
Код:
#ifeq ($(findstring CYGWIN, $(OS)), CYGWIN) 
PICK = $(AMEBA_TOOLDIR)pick.exe
PAD  = $(AMEBA_TOOLDIR)padding.exe
CHKSUM = $(AMEBA_TOOLDIR)checksum.exe
#else
#PICK = $(AMEBA_TOOLDIR)pick
#PAD  = $(AMEBA_TOOLDIR)padding
#CHKSUM = $(AMEBA_TOOLDIR)checksum
#endif
В ранее кинутый project.zip, в файл RTL_RunRAM.JLinkScript:
loadbin application/Debug/bin/ram_2.bin 0x10006000
 

sharikov

Active member
Со свежим GCC не собирается - конфликт определения структуры timeval
Это настраивается в lwipopts.h который теперь не в проекте а в sdk.
Надо перепиливать.
 

pvvx

Активный участник сообщества
Со свежим GCC не собирается - конфликт определения структуры timeval
Это настраивается в lwipopts.h который теперь не в проекте а в sdk.
Надо перепиливать.
SDK 4.0 я уже "перепилил" под свою версию/сборку ещё недели назад. Счас проверяю - 99% уже пашет. Скидывать в открытый доступ пока не собираюсь (только избранным :) ).
Нужны были только сами бинарные либы собранные не в IAR, а для GCC.
Телепузикам предполагается использование стандартного SDK 4.0 от Амебы c DAP-Link, без поддержки пустых модулей и RTL871xAF/RTL8711AM. Пущай покупают Dev-Kit от Ameba c RTL8195AM. Иначе у них возникает слишком много хотелок :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
@sharikov - вопрос с ST+AP решился:
Снимок1525.gif
Качает на полную (MySDK4.0/RTOSDIR=freertos_v9.0.0)
Это пока единственная польза от SDK4.0, кроме увеличения размера кода :)

Сборка Web-свалки с какими-то моими тестами на разных SDK (меняется только ссылка на каталог SDK):
Снимок1526.gif
SDK4.0 просит больше TCM после старта и естественно отхватывает её уже у обычной SRAM, т.к. все стеки RTOS и запросы TCM уже не лезут.
Надо дозачистить SDK4.0 от ненужных компонентов, а основные дубли (в основном уровня api WiFi я уже убрал)...
 
Последнее редактирование:
Моя проблема со странным поведением процессора решилась самопроизвольно, вроде бы делаю все так же, но теперь работает. Прошивка запускается, правда с ошибкой:
Код:
#                                                                             
wext_set_pscan_channel():ioctl[SIOCDEVPRIVATE] error                         
WIFI initialized
Причину такого сообщения не нашел. Но по ходу разбирательства я так и не понял как при этом настраивается модуль: как точка доступа (имя/пароль?), или сам подключается (но куда, имя/пароль?), или и то и другое? Где это настраивается?
 

pvvx

Активный участник сообщества
Причину такого сообщения не нашел. Но по ходу разбирательства я так и не понял как при этом настраивается модуль: как точка доступа (имя/пароль?), или сам подключается (но куда, имя/пароль?), или и то и другое? Где это настраивается?
SDK идет со стандартным примером "AT". AT командами и настраивается: в директории sdk-ameba-v4.0b_without_NDA_GCC_V1.0.0\doc "AN0075 Realtek Ameba-1 at command v2.0.pdf" или "AN0025 Realtek at command.pdf", в зависимости от опций в конфигах (main.h).
 
Спасибо за подсказку, запустить пример сервера из SDK удалось, хотя ошибку в логе при старте продолжает писать.
wext_set_pscan_channel():ioctl[SIOCDEVPRIVATE] error
Теперь сервер желательно развить до более удобного в использовании. В соседней теме указали на два примера серверов, от pvvx и от sharikov. Пытаюсь понять, смогу ли я ими воспользоваться без больших переделок? Настораживает то, что они сделаны под gcc (хотя перевод на IAR вряд ли сложен), и не понятно на базе какой SDK они собираются, т.е. должны ли собраться на SDK 4.0 без серьезных переделок?
 

pvvx

Активный участник сообщества
Спасибо за подсказку, запустить пример сервера из SDK удалось, хотя ошибку в логе при старте продолжает писать.
wext_set_pscan_channel():ioctl[SIOCDEVPRIVATE] error
Теперь сервер желательно развить до более удобного в использовании. В соседней теме указали на два примера серверов, от pvvx и от sharikov. Пытаюсь понять, смогу ли я ими воспользоваться без больших переделок? Настораживает то, что они сделаны под gcc (хотя перевод на IAR вряд ли сложен), и не понятно на базе какой SDK они собираются, т.е. должны ли собраться на SDK 4.0 без серьезных переделок?
В базовом SDK ужасный API для WiFi и он имеет массу дублирующих процедур загромождающих малую RAM RTL871xAF, по этому данные примеры сделаны на моей сборке SDK с другим, собственным, API управления WiFi c оптимизацией по ресурсам занимаемой RAM. Так-же оптимизировано ещё многое, чтобы базовые проекты лезли в RTL871xAF. Если скачаете web-свалку, то она уже на переходной солянке с добавками исходников основных частей, заменой RTOS на последнюю версию и имеет всё от SDK 4.0 (выкинуты примеры для "телепузиков" и документация "как мигать светодиодом через WiFi" и далее будет выкинуто всё, что позволяет запустить сборку путем скачивания и нажатия одной кнопки, дабы, как говорят "телепузики" увеличить порог какой-то "входимости").
 
Последнее редактирование:

Pilnikov

Active member
SDK для "телепузиков" - абсурд - ибо очень сложна для понимания
 
Сверху Снизу