pvvx
Активный участник сообщества
Это через gdb - в RtlDuino такого нет.получилось собрать OTA были проблемы с xcopy
...
(gdb)
Это через gdb - в RtlDuino такого нет.получилось собрать OTA были проблемы с xcopy
...
(gdb)
ваша сборка с GitHub так отработала из меню ArduinoЭто через gdb - в RtlDuino такого нет.
#include <WiFi.h>
#include <myAP.h>
#define webHTTP_OK "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n"
extern "C" {
#include "lwip/api.h"
}
void setup() {
Serial.begin(38400);
WiFi.begin(ssid,pass);
os_thread_create(web_thread, NULL, OS_PRIORITY_REALTIME, 2048);
}
void loop() {
//sys_info();
delay(10000);
}
void web_thread(const void *argument) {
int ret = ERR_OK;
int k=0;
struct netconn *pxNewConnection;
struct netconn *pxHTTPListener = NULL;
struct netbuf *pxRxBuffer = NULL;
unsigned portSHORT usLength;
int ret_recv = ERR_OK;
void *data;
char str[11];
pxHTTPListener = netconn_new( NETCONN_TCP );
//ip_set_option(pxHTTPListener->pcb.ip, SOF_REUSEADDR);
netconn_bind( pxHTTPListener, NULL, 80 );
netconn_listen( pxHTTPListener );
for( ;; ){
port_netconn_accept( pxHTTPListener , pxNewConnection, ret);
if( pxNewConnection != NULL && ret == ERR_OK){
port_netconn_recv( pxNewConnection , pxRxBuffer, ret_recv);
if( pxRxBuffer != NULL && ret_recv == ERR_OK)
{
netbuf_data( pxRxBuffer, &data, &usLength );
k++;
sprintf(str, "%d", k);
netconn_write( pxNewConnection, webHTTP_OK, ( u16_t ) strlen( webHTTP_OK ), NETCONN_COPY );
netconn_write( pxNewConnection, str, strlen(str), NETCONN_COPY );
}
netbuf_delete(pxRxBuffer);
netconn_close( pxNewConnection );
while( netconn_delete( pxNewConnection ) != ERR_OK )
{
vTaskDelay( 10 );
}
}
printf("\r\n%d,RAM heap\t%d bytes\r\n",k,xPortGetFreeHeapSize());
}
if(pxHTTPListener)
{
netconn_close(pxHTTPListener);
netconn_delete(pxHTTPListener);
pxHTTPListener = NULL;
}
os_thread_terminate( os_thread_get_id() );
}
Наберите в поиске сайта TIME_WAIT.@pvvx Может подскажете почему не освобождается память(или очень медленно освобождается).
Вроде все закрываю.
/* Get one byte from the 4-byte address */
#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0])
#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1])
#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2])
#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3])
/* These are cast to u16_t, with the intent that they are often arguments
* to printf using the U16_F format from cc.h. */
#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr))
#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr))
#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr))
#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr))
#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \
ip4_addr2_16(ipaddr), \
ip4_addr3_16(ipaddr), \
ip4_addr4_16(ipaddr)
#define IPSTR "%d.%d.%d.%d"
extern const char * const tcp_state_str[];
/*
static const char * const tcp_state_str[] = {
"CLOSED",
"LISTEN",
"SYN_SENT",
"SYN_RCVD",
"ESTABLISHED",
"FIN_WAIT_1",
"FIN_WAIT_2",
"CLOSE_WAIT",
"CLOSING",
"LAST_ACK",
"TIME_WAIT"
};
*/
/******************************************************************************
* FunctionName : debug
* Parameters :
* Returns :
*******************************************************************************/
void print_udp_pcb(void)
{
struct udp_pcb *pcb;
bool prt_none = true;
rtl_printf("UDP pcbs:\n");
for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
rtl_printf("flg:%02x\t" IPSTR ":%d\t" IPSTR ":%d\trecv:%p\n", pcb->flags, IP2STR(&pcb->local_ip), pcb->local_port, IP2STR(&pcb->remote_ip), pcb->remote_port, pcb->recv );
prt_none = false;
}
if(prt_none) rtl_printf("none\n");
}
/******************************************************************************
* FunctionName : debug
* Parameters :
* Returns :
*******************************************************************************/
void print_tcp_pcb(void)
{
struct tcp_pcb *pcb;
rtl_printf("Active PCB states:\n");
bool prt_none = true;
for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]);
prt_none = false;
}
if(prt_none) rtl_printf("none\n");
rtl_printf("Listen PCB states:\n");
prt_none = true;
for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) {
rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]);
prt_none = false;
}
if(prt_none) rtl_printf("none\n");
rtl_printf("TIME-WAIT PCB states:\n");
prt_none = true;
for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]);
prt_none = false;
}
if(prt_none) rtl_printf("none\n");
}
void fATLW(void *arg) // Info Lwip
{
#if DEBUG_AT_USER_LEVEL > 1
printf("ATLW: Lwip pcb Info\n");
#endif
print_udp_pcb();
print_tcp_pcb();
}
Подключите полный Jtag с соединением на reset модуля.Начал играться с rtl00. собрал пример плеера да прошил из RTL00Flasher.exe, теперь не могу подключится к модулю ни через ардуино ни через RTL00Flasher. сам модуль грузится по уарту, данные выдает. кое как удается запустить RTL00Flasher если попасть в момент подачи питания на модуль, если пожже то все не соеденяет.
upd
удалось прошить исходной прошивкой, Похоже у меня что то с питанием, если запитывать с стлинка- все норм, если только общая земля траблы
reset это CHIP-EN на vcc запаян уже ) B&T могли бы и обозвать его reset ,Подключите полный Jtag с соединением на reset модуля.
Ноги Jtag на модуле включаются/выключаются программно. Для частой откладки и работы с Jtag предпочтительнее иметь полное соединение с reset. Тогда программное включение/отключение Jtag вас не будет беспокоить.
По умолчанию он включен (включается в ROM-BIOS при старте). Исключение составляет случай, если вы записали отключение Jtag в eFuse. Тогда ROM-BIOS его не включит.reset это CHIP-EN на vcc запаян уже ) B&T могли бы и обозвать его reset ,
как софтово включить Jtag, что бы после выгрузки из ардуино он был активен?
void setup() {
Serial.begin(38400);
pinMode(14, OUTPUT);
digitalWrite(14, 0);
}
void loop() {
printf("set to 0");
digitalWrite(14, 0);
delay(10);
}
Это вход JTAG. Отключите HalPinCtrlRtl8195A(JTAG, 0, 0).что то с микроконтролерами не выходит,
простой пример
---
на выходе ge_0 3v3 , пробовал уже через gpio_init gpio_dir gpio_mode из sdk, тоже самое.
сжег порты? хотя уарт и жтак работает
extern u16 GPIOState[_PORT_MAX-1]; // побитно 16 бит для каждого порта (A..K), бит=номер задействованного пина в порту на периферию.
for (i = 0; i < _PORT_MAX; i++)
printf("Port %c state: 0x%04x\n", i + 'A', GPIOState[i]);
Машина уже умнее вас?пойду ка я учится на курсы швеи,
С чего у вас при старте включен UART2? Прописан другой загрузчик в модуле?c PA_2 еще не могу разобраться, такая же ситуация 3.3 в и все, в GPIOState А все 0
upd
HalPinCtrlRtl8195A(UART2, 0, 0); решил проблему,
и после отработки другого скетча внутренности чипа не сбрасываются...reset это CHIP-EN на vcc запаян уже
прошит V02_V16_05_10.zip из Прошивка с которой пришел модуль RTL00 V1.0С чего у вас при старте включен UART2? Прописан другой загрузчик в модуле?
Значит нет Reset. В прошивке AT включается UART2, а при загрузке в RAM стартовый код от Ameba заполняет таблицу GPIOState нулями...прошит V02_V16_05_10.zip из Прошивка с которой пришел модуль RTL00 V1.0
Модуль от B&T
сейчас из студии выгружаю свой скетч в RAM предварительно передернув питание, так как в моем скетче JTAG отключен
CLK CPU 166666666 Hz
RAM heap 43720 bytes
TCM heap 27928 bytes
MP3: Connec[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
t url: icecast.o[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
mr[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
oep.nl/3fm-sb-mp[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
3:80
FIFO: Allo[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x80
[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
c 1[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
6384 bytes at 0x[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
10[TIMR Inf]HalTimerIrq2To7Handle_Patch:TimerIrqStatus: 0x4
065af8
MP3: Connecting to server 145.58.53.150...
HTTP/1.0 200 OK
Server: Icecast 2.4.2
Date: Fri, 06 Jan 2017 03:44:07 GMT
Content-Type: audio/mpeg
Cache-Control: no-cache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
icy-br:96
ice-audio-info: bitrate=96
icy-br:96
icy-genre:Pop
icy-name:3FM Serious Radio
icy-pub:0
icy-url:http://www.3fm.nl
MP3: Skip HTTP head in 319 bytes
FIFO: Start Buffer fill 8284
I2S0: Alloc DMA buf 12288 bytes (4 x 384 samples 96 bits)
HEAP: Alloc 15560 failed!
MAD: Alloc 15546 bytes at 0x1fff3050
MAD: Decoder start.
MAD: Frame decode.
MAD: Frame error.
MAD: Dec err 0x0101 (lost synchronization)
MAD: Frame decode.
HEAP: Alloc 2576 failed!
HEAP: Alloc 4616 failed!
MAD: Frame error.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
MAD: Frame decode.
MAD: Frame error.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
MAD: Frame decode.
MAD: Frame synth.
MAD: Rate 48000, channels 2
I2S: Set Sample Rate 96000 (x1)
MAD: Frame decode.
MAD: Frame synth.
MAD: Frame decode.
MAD: Frame synth.
MAD: FramHEAe??P(?????(??hMAD: Frame synth.
MAD: Frame decode.
MAD: Frame synth.
...............
MAD: Frame decode.
MAD: Frame synth.
HEAPMAD: Frame decode.
MARTL8195A[HAL]: Hard Fault Error!!!!
RTL8195A[HAL]: R0 = 0x0
RTL8195A[HAL]: R1 = 0x40003014
RTL8195A[HAL]: R2 = 0x20
RTL8195A[HAL]: R3 = 0x40003000
RTL8195A[HAL]: R12 = 0x9
RTL8195A[HAL]: LR = 0x10032d9b
RTL8195A[HAL]: PC = 0x10032d94
RTL8195A[HAL]: PSR = 0x0
RTL8195A[HAL]: BFAR = 0xb
RTL8195A[HAL]: CFSR = 0x8200
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
Проект MP3 есть же отдельный - GitHub - pvvx/RTL00MP3: RTL00(RTL8710AF) Test MP3подскажите пожалуйста, как подружить два Ваших проекта. Arduino MP3 player. Либу ардуиновскую использовать не могу, так как хочу использовать i2s dac ALC5628. да и порты второго i2s заняты. вроде все поменял для вызова MP3 player . компилю MP3 player с помощью ардуино
в итоге
я его и использовал, просто исходники кинул в свой ардуиновский проектПроект MP3 есть же отдельный - GitHub - pvvx/RTL00MP3: RTL00(RTL8710AF) Test MP3
Он создавался для помощи kissste. Т.е. он не полноценный, а для теста. Там надо дописывать установки битрейта и варианты вывода. Кроме I2S на чипе есть и другие возможности - аппаратный PCM контроллер...да, нужно было изначально писать без ардуиновких улучшалок, привык к студии. сейчас хороший кусок завязан на ардуино