From 5dee009face9d2fe0ecad4e25a5a0f6dc5d687be Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Thu, 8 Oct 2009 15:30:57 +0000 Subject: [PATCH] add http client code git-svn-id: https://rt-thread.googlecode.com/svn/trunk@77 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- bsp/stm32_radio/http.c | 406 ++++++++++++++++++++++++++++++++++++ bsp/stm32_radio/project.Opt | 282 +++++++++++++------------ bsp/stm32_radio/project.Uv2 | 5 +- 3 files changed, 552 insertions(+), 141 deletions(-) create mode 100644 bsp/stm32_radio/http.c diff --git a/bsp/stm32_radio/http.c b/bsp/stm32_radio/http.c new file mode 100644 index 000000000..b93fbf474 --- /dev/null +++ b/bsp/stm32_radio/http.c @@ -0,0 +1,406 @@ +/* + * http client for RT-Thread + */ +#include +#include + +#include +#include + +const char _http_get[] = "GET "; +const char _http_host[] = "Host: "; +const char _http_getend[] = " HTTP/1.0\r\n"; +const char _http_user_agent[] = "User-Agent: RT-Thread HTTP Agent\r\n"; +const char _http_endheader[] = "\r\n"; + +struct http_session +{ + char* host; + int port; + + char* user_agent; + int socket; + + /* size of http file */ + rt_size_t size; + rt_off_t position; +}; + +extern long int strtol(const char *nptr, char **endptr, int base); + +// +// This function will parse the Content-Length header line and return the file size +// +int http_parse_content_length(char *mime_buf) +{ + char *line; + + line = strstr(mime_buf, "CONTENT-LENGTH:"); + line += strlen("CONTENT-LENGTH:"); + + // Advance past any whitepace characters + while((*line == ' ') || (*line == '\t')) line++; + + return (int)strtol(line, RT_NULL, 10); +} + +// +// This function will parse the initial response header line and return 0 for a "200 OK", +// or return the error code in the event of an error (such as 404 - not found) +// +int http_is_error_header(char *mime_buf) +{ + char *line; + int i; + int code; + + line = strstr(mime_buf, "HTTP/1."); + line += strlen("HTTP/1."); + + // Advance past minor protocol version number + line++; + + // Advance past any whitespace characters + while((*line == ' ') || (*line == '\t')) line++; + + // Terminate string after status code + for(i = 0; ((line[i] != ' ') && (line[i] != '\t')); i++); + line[i] = '\0'; + + code = (int)strtol(line, RT_NULL, 10); + if( code == 200 ) + return 0; + else + return code; +} + +// +// When a request has been sent, we can expect mime headers to be +// before the data. We need to read exactly to the end of the headers +// and no more data. This readline reads a single char at a time. +// +int http_read_line( int socket, char * buffer, int size ) +{ + char * ptr = buffer; + int count = 0; + int rc; + + // Keep reading until we fill the buffer. + while ( count < size ) + { + rc = recv( socket, ptr, 1, 0 ); + + if ( rc <= 0 ) return rc; + + if ( (*ptr == '\n') ) break; + + // increment after check for cr. Don't want to count the cr. + count++; + ptr++; + } + + // Terminate string + *ptr = '\0'; + + // return how many bytes read. + return count; +} + +// +// Before we can connect we need to parse the server address and optional +// port from the url provided. the format of "url" as passed to this function +// is "//192.168.0.1:8080/blah.elf" where "192.168.0.1" can be either an IP +// or a domain name and ":8080" is the optional port to connect to, default +// port is 80. +// +// This function will return a filename string for use in GET +// requests, and fill the structure pointed to by *server with the +// correct values. +// +const char *http_resolve_address( struct sockaddr_in *server, const char * url, char *host_addr) +{ + unsigned char w,x,y,z; + const char *char_ptr; + char addr[128]; + char port[6] = "80"; /* default port of 80(HTTP) */ + int i = 0, rv; + int is_domain = 0; + + /* strip http: */ + char_ptr = strchr(url, ':'); + if (char_ptr != NULL) + { + url = char_ptr + 1; + } + + // URL must start with double forward slashes. + if((url[0] != '/') || (url[1] != '/' )) return(NULL); + + url += 2; + for(i = 0; ((url[i] != '\0') && (url[i] != '/')) && (i < 127); i++) + { + if((((addr[i] = url[i]) < '0') || (url[i] > '9')) && (url[i] != '.')) + { + if(url[i] == ':') + {// allow specification of port in URL like http://www.server.net:8080/ + for(w = 0; ((w + i + 1) < 127) && (w < 5) && (url[w + i + 1] != '/') && (url[w + i + 1] != '\0'); w++) + port[w] = url[w + i + 1]; + port[w] = '\0'; + + rt_kprintf("HTTP: using port %s for connection\n", port); + break; + } + else // it's a domain name if a non-numeric char is contained in the "server" part of the URL. + is_domain = 1; + } + } + addr[i] = '\0'; // overwrite last char copied(should be '/', '\0' or ':') with a '\0' + strcpy(host_addr, addr); + + if(is_domain) + { + // resolve the host name. + rv = dns_gethostbyname(addr, &server->sin_addr, RT_NULL, RT_NULL); + if(rv != 0) + { + rt_kprintf("HTTP: failed to resolve domain '%s'\n", addr); + return RT_NULL; + } + } + else + { + // turn '.' characters in ip string into null characters + for(i = 0, w = 0; i < 16; i++) + { + if(addr[i] == '.') + { + addr[i] = '\0'; + w++; + } + } + + if(w < 4) + { // w is used as a simple error check here + rt_kprintf("HTTP: invalid IP address '%s'\n", addr); + return RT_NULL; + } + + i = 0; + + // Extract individual ip number octets from string + w = (int)strtol(&addr[i],NULL, 10); + i += (strlen(&addr[i]) + 1); + + x = (int)strtol(&addr[i],NULL, 10); + i += (strlen(&addr[i]) + 1); + + y = (int)strtol(&addr[i],NULL, 10); + i += (strlen(&addr[i]) + 1); + + z = (int)strtol(&addr[i],NULL, 10); + i += (strlen(&addr[i]) + 1); + + IP4_ADDR( (struct ip_addr *)&(server->sin_addr) ,w,x,y,z ); + } + + i = (int) strtol(port, NULL, 10); // set the port + server->sin_port = htons(i); + + server->sin_family = AF_INET; + + char_ptr = url; + while(*char_ptr != '/') char_ptr++; + + return char_ptr; +} + +// +// This is the main HTTP client connect work. Makes the connection +// and handles the protocol and reads the return headers. Needs +// to leave the stream at the start of the real data. +// +static int http_connect(struct http_session* session, + struct sockaddr_in * server, char *host_addr, const char * url) +{ + int socket_handle; + int peer_handle; + int rc; + char mimeBuffer[100]; + + if((socket_handle = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP )) < 0) + { + rt_kprintf( "HTTP: SOCKET FAILED\n" ); + return -1; + } + + peer_handle = connect( socket_handle, (struct sockaddr *) server, sizeof(*server)); + if ( peer_handle < 0 ) + { + rt_kprintf( "HTTP: CONNECT FAILED %i\n", peer_handle ); + return -1; + } + + // Needs more error checking here..... + rc = send( peer_handle, _http_get, sizeof( _http_get ) - 1, 0 ); + rc = send( peer_handle, (void*) url, strlen( url ), 0 ); + rc = send( peer_handle, _http_getend, sizeof( _http_getend ) - 1, 0 ); + + rc = send( peer_handle, _http_host, sizeof( _http_host ) - 1, 0 ); + rc = send( peer_handle, host_addr, strlen( url ), 0 ); + rc = send( peer_handle, _http_endheader, sizeof( _http_endheader ) - 1, 0 ); // "\r\n" + + rc = send( peer_handle, _http_user_agent, sizeof( _http_user_agent ) - 1, 0 ); + rc = send( peer_handle, _http_endheader, sizeof( _http_endheader ) - 1, 0 ); + + // We now need to read the header information + while ( 1 ) + { + int i; + + // read a line from the header information. + rc = http_read_line( peer_handle, mimeBuffer, 100 ); + + rt_kprintf(">> %s", mimeBuffer); + + if ( rc < 0 ) return rc; + + // End of headers is a blank line. exit. + if ( rc == 0 ) break; + if ( (rc == 1) && (mimeBuffer[0] == '\r') ) break; + + // Convert mimeBuffer to upper case, so we can do string comps + for(i = 0; i < strlen(mimeBuffer); i++) + mimeBuffer[i] = toupper(mimeBuffer[i]); + + if(strstr(mimeBuffer, "HTTP/1.")) // First line of header, contains status code. Check for an error code + { + rc = http_is_error_header(mimeBuffer); + if(rc) + { + rt_kprintf("HTTP: status code = %d!\n", rc); + return -rc; + } + } + + if(strstr(mimeBuffer, "CONTENT-LENGTH:")) + { + session->size = http_parse_content_length(mimeBuffer); + rt_kprintf("size = %d\n", session->size); + } + } + + // We've sent the request, and read the headers. SockHandle is + // now at the start of the main data read for a file io read. + return peer_handle; +} + +struct http_session* http_session_open(char* url) +{ + int peer_handle = 0; + struct sockaddr_in server; + const char *get_name; + char host_addr[100]; + struct http_session* session; + + session = (struct http_session*) rt_malloc(sizeof(struct http_session*)); + if(session == RT_NULL) return RT_NULL; + + session->size = 0; + session->position = 0; + + /* Check valid IP address and URL */ + if((get_name = http_resolve_address(&server, url, host_addr)) == NULL) + { + rt_free(session); + return RT_NULL; + } + + // Now we connect and initiate the transfer by sending a + // request header to the server, and receiving the response header + if((peer_handle = http_connect(session, &server, host_addr, get_name)) < 0) + { + rt_kprintf("HTTP: failed to connect to '%s'!\n", host_addr); + rt_free(session); + return RT_NULL; + } + + // http connect returns valid socket. Save in handle list. + session->socket = peer_handle; + + /* open successfully */ + return session; +} + +rt_size_t http_session_read(struct http_session* session, rt_uint8_t *buffer, rt_size_t length) +{ + int bytesRead = 0; + int totalRead = 0; + int left = length; + + // Read until: there is an error, we've read "size" bytes or the remote + // side has closed the connection. + do + { + bytesRead = recv(session->socket, buffer + totalRead, left, 0); + if(bytesRead <= 0) break; + + left -= bytesRead; + totalRead += bytesRead; + } while(left); + + return totalRead; +} + +rt_off_t http_session_seek(struct http_session* session, rt_off_t offset, int mode) +{ + switch(mode) + { + case SEEK_SET: + session->position = offset; + break; + + case SEEK_CUR: + session->position += offset; + break; + + case SEEK_END: + session->position = session->size + offset; + break; + } + + return session->position; +} + +int http_session_close(struct http_session* session) +{ + lwip_close(session->socket); + rt_free(session); + + return 0; +} + +#include +void http_test(char* url) +{ + struct http_session* session; + rt_uint8_t buffer[80]; + rt_size_t length; + + session = http_session_open(url); + if (session == RT_NULL) + { + rt_kprintf("open http session failed\n"); + return; + } + + do + { + rt_memset(buffer, 0, sizeof(buffer)); + length = http_session_read(session, buffer, sizeof(buffer)); + + rt_kprintf(buffer); + } while (length > 0); + + http_session_close(session); +} +FINSH_FUNCTION_EXPORT(http_test, http client test); diff --git a/bsp/stm32_radio/project.Opt b/bsp/stm32_radio/project.Opt index 8bdd32681..dcbbf2fd1 100644 --- a/bsp/stm32_radio/project.Opt +++ b/bsp/stm32_radio/project.Opt @@ -15,155 +15,156 @@ GRPOPT 1,(Startup),1,0,0 GRPOPT 2,(Kernel),0,0,0 GRPOPT 3,(STM32),0,0,0 GRPOPT 4,(StdPeriph_Driver),0,0,0 -GRPOPT 5,(CMSIS),1,0,0 +GRPOPT 5,(CMSIS),0,0,0 GRPOPT 6,(finsh),0,0,0 GRPOPT 7,(Filesystem),0,0,0 GRPOPT 8,(LwIP),0,0,0 GRPOPT 9,(mp3),0,0,0 OPTFFF 1,1,1,0,0,0,0,0,<.\application.c> -OPTFFF 1,2,1,83886083,0,151,167,0,<.\board.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,8,4,0,0,183,1,0,0 } +OPTFFF 1,2,1,0,0,0,0,0,<.\board.c> OPTFFF 1,3,1,0,0,0,0,0,<.\startup.c> -OPTFFF 1,4,1,385875968,0,0,0,0,<.\stm32f10x_it.c> +OPTFFF 1,4,1,0,0,0,0,0,<.\stm32f10x_it.c> OPTFFF 1,5,5,0,0,0,0,0,<.\stm32f10x_conf.h> -OPTFFF 1,6,5,268435456,0,0,0,0,<.\rtconfig.h> -OPTFFF 1,7,1,822083584,0,0,0,0,<.\usart.c> +OPTFFF 1,6,5,0,0,0,0,0,<.\rtconfig.h> +OPTFFF 1,7,1,0,0,0,0,0,<.\usart.c> OPTFFF 1,8,1,0,0,0,0,0,<.\sdcard.c> OPTFFF 1,9,1,0,0,0,0,0,<.\rtc.c> OPTFFF 1,10,1,0,0,0,0,0,<.\mp3.c> -OPTFFF 1,11,1,939524096,0,0,0,0,<.\wm8753.c> +OPTFFF 1,11,1,0,0,0,0,0,<.\wm8753.c> OPTFFF 1,12,1,0,0,0,0,0,<.\wav.c> -OPTFFF 1,13,1,922746880,0,0,0,0,<.\dm9000.c> +OPTFFF 1,13,1,0,0,0,0,0,<.\dm9000.c> OPTFFF 1,14,1,0,0,0,0,0,<.\fsmc_nand.c> -OPTFFF 1,15,1,486539264,0,0,0,0,<.\fsmc_sram.c> +OPTFFF 1,15,1,0,0,0,0,0,<.\fsmc_sram.c> OPTFFF 1,16,1,0,0,0,0,0,<.\fmt0371\fmt0371.c> -OPTFFF 2,17,1,0,0,0,0,0,<..\..\src\clock.c> -OPTFFF 2,18,1,0,0,0,0,0,<..\..\src\idle.c> -OPTFFF 2,19,1,0,0,0,0,0,<..\..\src\ipc.c> -OPTFFF 2,20,1,0,0,0,0,0,<..\..\src\mempool.c> -OPTFFF 2,21,1,0,0,0,0,0,<..\..\src\mem.c> -OPTFFF 2,22,1,0,0,0,0,0,<..\..\src\object.c> -OPTFFF 2,23,1,0,0,0,0,0,<..\..\src\scheduler.c> -OPTFFF 2,24,1,0,0,0,0,0,<..\..\src\thread.c> -OPTFFF 2,25,1,0,0,0,0,0,<..\..\src\timer.c> -OPTFFF 2,26,1,0,0,0,0,0,<..\..\src\irq.c> -OPTFFF 2,27,1,0,0,0,0,0,<..\..\src\kservice.c> -OPTFFF 2,28,1,0,0,0,0,0,<..\..\src\device.c> -OPTFFF 2,29,1,0,0,0,0,0,<..\..\src\slab.c> -OPTFFF 3,30,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\stack.c> -OPTFFF 3,31,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\interrupt.c> -OPTFFF 3,32,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\cpu.c> -OPTFFF 3,33,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\serial.c> -OPTFFF 3,34,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\context_rvds.S> -OPTFFF 3,35,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\start_rvds.s> -OPTFFF 3,36,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault.c> -OPTFFF 3,37,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault_rvds.S> -OPTFFF 4,38,1,218103808,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c> -OPTFFF 4,39,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c> -OPTFFF 4,40,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c> -OPTFFF 4,41,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c> -OPTFFF 4,42,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c> -OPTFFF 4,43,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c> -OPTFFF 4,44,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c> -OPTFFF 4,45,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c> -OPTFFF 4,46,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c> -OPTFFF 4,47,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c> -OPTFFF 4,48,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c> -OPTFFF 4,49,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c> -OPTFFF 4,50,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c> -OPTFFF 4,51,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c> -OPTFFF 4,52,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c> -OPTFFF 4,53,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c> -OPTFFF 4,54,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c> -OPTFFF 4,55,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c> -OPTFFF 4,56,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c> -OPTFFF 4,57,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c> -OPTFFF 4,58,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c> -OPTFFF 4,59,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c> -OPTFFF 5,60,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\core_cm3.c> -OPTFFF 5,61,1,167772160,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\system_stm32f10x.c> -OPTFFF 6,62,1,0,0,0,0,0,<..\..\finsh\finsh_compiler.c> -OPTFFF 6,63,1,0,0,0,0,0,<..\..\finsh\finsh_error.c> -OPTFFF 6,64,1,0,0,0,0,0,<..\..\finsh\finsh_heap.c> -OPTFFF 6,65,1,0,0,0,0,0,<..\..\finsh\finsh_init.c> -OPTFFF 6,66,1,0,0,0,0,0,<..\..\finsh\finsh_node.c> -OPTFFF 6,67,1,0,0,0,0,0,<..\..\finsh\finsh_ops.c> -OPTFFF 6,68,1,0,0,0,0,0,<..\..\finsh\finsh_parser.c> -OPTFFF 6,69,1,0,0,0,0,0,<..\..\finsh\finsh_token.c> -OPTFFF 6,70,1,0,0,0,0,0,<..\..\finsh\finsh_var.c> -OPTFFF 6,71,1,0,0,0,0,0,<..\..\finsh\finsh_vm.c> -OPTFFF 6,72,1,0,0,0,0,0,<..\..\finsh\shell.c> -OPTFFF 6,73,1,0,0,0,0,0,<..\..\finsh\symbol.c> -OPTFFF 6,74,1,0,0,0,0,0,<..\..\finsh\cmd.c> -OPTFFF 7,75,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_init.c> -OPTFFF 7,76,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_fs.c> -OPTFFF 7,77,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_raw.c> -OPTFFF 7,78,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_util.c> -OPTFFF 7,79,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_cache.c> -OPTFFF 7,80,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_posix.c> -OPTFFF 7,81,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\efs.c> -OPTFFF 7,82,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\extract.c> -OPTFFF 7,83,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\partition.c> -OPTFFF 7,84,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\plibc.c> -OPTFFF 7,85,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\dir.c> -OPTFFF 7,86,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fat.c> -OPTFFF 7,87,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\file.c> -OPTFFF 7,88,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fs.c> -OPTFFF 7,89,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ls.c> -OPTFFF 7,90,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\time.c> -OPTFFF 7,91,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ui.c> -OPTFFF 8,92,1,0,0,0,0,0,<..\..\net\lwip\src\core\dhcp.c> -OPTFFF 8,93,1,0,0,0,0,0,<..\..\net\lwip\src\core\dns.c> -OPTFFF 8,94,1,0,0,0,0,0,<..\..\net\lwip\src\core\init.c> -OPTFFF 8,95,1,0,0,0,0,0,<..\..\net\lwip\src\core\netif.c> -OPTFFF 8,96,1,0,0,0,0,0,<..\..\net\lwip\src\core\pbuf.c> -OPTFFF 8,97,1,0,0,0,0,0,<..\..\net\lwip\src\core\raw.c> -OPTFFF 8,98,1,0,0,0,0,0,<..\..\net\lwip\src\core\stats.c> -OPTFFF 8,99,1,0,0,0,0,0,<..\..\net\lwip\src\core\sys.c> -OPTFFF 8,100,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp.c> -OPTFFF 8,101,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_in.c> -OPTFFF 8,102,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_out.c> -OPTFFF 8,103,1,0,0,0,0,0,<..\..\net\lwip\src\core\udp.c> -OPTFFF 8,104,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\autoip.c> -OPTFFF 8,105,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\icmp.c> -OPTFFF 8,106,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\igmp.c> -OPTFFF 8,107,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet.c> -OPTFFF 8,108,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet_chksum.c> -OPTFFF 8,109,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip.c> -OPTFFF 8,110,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_addr.c> -OPTFFF 8,111,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_frag.c> -OPTFFF 8,112,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_in.c> -OPTFFF 8,113,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_out.c> -OPTFFF 8,114,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_lib.c> -OPTFFF 8,115,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_msg.c> -OPTFFF 8,116,1,0,0,0,0,0,<..\..\net\lwip\src\api\err.c> -OPTFFF 8,117,1,0,0,0,0,0,<..\..\net\lwip\src\api\netbuf.c> -OPTFFF 8,118,1,0,0,0,0,0,<..\..\net\lwip\src\api\netdb.c> -OPTFFF 8,119,1,0,0,0,0,0,<..\..\net\lwip\src\api\netifapi.c> -OPTFFF 8,120,1,0,0,0,0,0,<..\..\net\lwip\src\api\tcpip.c> -OPTFFF 8,121,1,0,0,0,0,0,<..\..\net\lwip\src\netif\etharp.c> -OPTFFF 8,122,1,0,0,0,0,0,<..\..\net\lwip\src\netif\ethernetif.c> -OPTFFF 8,123,1,0,0,0,0,0,<..\..\net\lwip\src\netif\loopif.c> -OPTFFF 8,124,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch_init.c> -OPTFFF 8,125,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch.c> -OPTFFF 8,126,1,0,0,0,0,0,<..\..\net\lwip\src\api\sockets.c> -OPTFFF 8,127,1,0,0,0,0,0,<..\..\net\lwip\src\core\memp_tiny.c> -OPTFFF 9,128,1,0,0,0,0,0,<.\mp3\mp3dec.c> -OPTFFF 9,129,1,0,0,0,0,0,<.\mp3\mp3tabs.c> -OPTFFF 9,130,1,0,0,0,0,0,<.\mp3\real\bitstream.c> -OPTFFF 9,131,1,0,0,0,0,0,<.\mp3\real\buffers.c> -OPTFFF 9,132,1,0,0,0,0,0,<.\mp3\real\dct32.c> -OPTFFF 9,133,1,0,0,0,0,0,<.\mp3\real\dequant.c> -OPTFFF 9,134,1,0,0,0,0,0,<.\mp3\real\dqchan.c> -OPTFFF 9,135,1,0,0,0,0,0,<.\mp3\real\huffman.c> -OPTFFF 9,136,1,0,0,0,0,0,<.\mp3\real\hufftabs.c> -OPTFFF 9,137,1,0,0,0,0,0,<.\mp3\real\imdct.c> -OPTFFF 9,138,1,0,0,0,0,0,<.\mp3\real\scalfact.c> -OPTFFF 9,139,1,0,0,0,0,0,<.\mp3\real\stproc.c> -OPTFFF 9,140,1,16777216,0,0,0,0,<.\mp3\real\subband.c> -OPTFFF 9,141,1,0,0,0,0,0,<.\mp3\real\trigtabs.c> -OPTFFF 9,142,2,0,0,0,0,0,<.\mp3\real\arm\asmpoly_thumb2.s> -OPTFFF 9,143,2,0,0,0,0,0,<.\mp3\real\arm\asmmisc.s> +OPTFFF 1,17,1,150994944,0,0,0,0,<.\http.c> +OPTFFF 2,18,1,0,0,0,0,0,<..\..\src\clock.c> +OPTFFF 2,19,1,0,0,0,0,0,<..\..\src\idle.c> +OPTFFF 2,20,1,0,0,0,0,0,<..\..\src\ipc.c> +OPTFFF 2,21,1,0,0,0,0,0,<..\..\src\mempool.c> +OPTFFF 2,22,1,0,0,0,0,0,<..\..\src\mem.c> +OPTFFF 2,23,1,0,0,0,0,0,<..\..\src\object.c> +OPTFFF 2,24,1,0,0,0,0,0,<..\..\src\scheduler.c> +OPTFFF 2,25,1,0,0,0,0,0,<..\..\src\thread.c> +OPTFFF 2,26,1,0,0,0,0,0,<..\..\src\timer.c> +OPTFFF 2,27,1,0,0,0,0,0,<..\..\src\irq.c> +OPTFFF 2,28,1,0,0,0,0,0,<..\..\src\kservice.c> +OPTFFF 2,29,1,0,0,0,0,0,<..\..\src\device.c> +OPTFFF 2,30,1,0,0,0,0,0,<..\..\src\slab.c> +OPTFFF 3,31,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\stack.c> +OPTFFF 3,32,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\interrupt.c> +OPTFFF 3,33,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\cpu.c> +OPTFFF 3,34,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\serial.c> +OPTFFF 3,35,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\context_rvds.S> +OPTFFF 3,36,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\start_rvds.s> +OPTFFF 3,37,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault.c> +OPTFFF 3,38,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault_rvds.S> +OPTFFF 4,39,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c> +OPTFFF 4,40,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c> +OPTFFF 4,41,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c> +OPTFFF 4,42,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c> +OPTFFF 4,43,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c> +OPTFFF 4,44,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c> +OPTFFF 4,45,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c> +OPTFFF 4,46,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c> +OPTFFF 4,47,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c> +OPTFFF 4,48,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c> +OPTFFF 4,49,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c> +OPTFFF 4,50,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c> +OPTFFF 4,51,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c> +OPTFFF 4,52,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c> +OPTFFF 4,53,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c> +OPTFFF 4,54,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c> +OPTFFF 4,55,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c> +OPTFFF 4,56,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c> +OPTFFF 4,57,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c> +OPTFFF 4,58,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c> +OPTFFF 4,59,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c> +OPTFFF 4,60,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c> +OPTFFF 5,61,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\core_cm3.c> +OPTFFF 5,62,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\system_stm32f10x.c> +OPTFFF 6,63,1,0,0,0,0,0,<..\..\finsh\finsh_compiler.c> +OPTFFF 6,64,1,0,0,0,0,0,<..\..\finsh\finsh_error.c> +OPTFFF 6,65,1,0,0,0,0,0,<..\..\finsh\finsh_heap.c> +OPTFFF 6,66,1,0,0,0,0,0,<..\..\finsh\finsh_init.c> +OPTFFF 6,67,1,0,0,0,0,0,<..\..\finsh\finsh_node.c> +OPTFFF 6,68,1,0,0,0,0,0,<..\..\finsh\finsh_ops.c> +OPTFFF 6,69,1,0,0,0,0,0,<..\..\finsh\finsh_parser.c> +OPTFFF 6,70,1,0,0,0,0,0,<..\..\finsh\finsh_token.c> +OPTFFF 6,71,1,0,0,0,0,0,<..\..\finsh\finsh_var.c> +OPTFFF 6,72,1,0,0,0,0,0,<..\..\finsh\finsh_vm.c> +OPTFFF 6,73,1,0,0,0,0,0,<..\..\finsh\shell.c> +OPTFFF 6,74,1,0,0,0,0,0,<..\..\finsh\symbol.c> +OPTFFF 6,75,1,0,0,0,0,0,<..\..\finsh\cmd.c> +OPTFFF 7,76,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_init.c> +OPTFFF 7,77,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_fs.c> +OPTFFF 7,78,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_raw.c> +OPTFFF 7,79,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_util.c> +OPTFFF 7,80,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_cache.c> +OPTFFF 7,81,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_posix.c> +OPTFFF 7,82,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\efs.c> +OPTFFF 7,83,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\extract.c> +OPTFFF 7,84,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\partition.c> +OPTFFF 7,85,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\plibc.c> +OPTFFF 7,86,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\dir.c> +OPTFFF 7,87,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fat.c> +OPTFFF 7,88,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\file.c> +OPTFFF 7,89,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fs.c> +OPTFFF 7,90,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ls.c> +OPTFFF 7,91,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\time.c> +OPTFFF 7,92,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ui.c> +OPTFFF 8,93,1,0,0,0,0,0,<..\..\net\lwip\src\core\dhcp.c> +OPTFFF 8,94,1,0,0,0,0,0,<..\..\net\lwip\src\core\dns.c> +OPTFFF 8,95,1,0,0,0,0,0,<..\..\net\lwip\src\core\init.c> +OPTFFF 8,96,1,0,0,0,0,0,<..\..\net\lwip\src\core\netif.c> +OPTFFF 8,97,1,0,0,0,0,0,<..\..\net\lwip\src\core\pbuf.c> +OPTFFF 8,98,1,0,0,0,0,0,<..\..\net\lwip\src\core\raw.c> +OPTFFF 8,99,1,0,0,0,0,0,<..\..\net\lwip\src\core\stats.c> +OPTFFF 8,100,1,0,0,0,0,0,<..\..\net\lwip\src\core\sys.c> +OPTFFF 8,101,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp.c> +OPTFFF 8,102,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_in.c> +OPTFFF 8,103,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_out.c> +OPTFFF 8,104,1,0,0,0,0,0,<..\..\net\lwip\src\core\udp.c> +OPTFFF 8,105,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\autoip.c> +OPTFFF 8,106,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\icmp.c> +OPTFFF 8,107,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\igmp.c> +OPTFFF 8,108,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet.c> +OPTFFF 8,109,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet_chksum.c> +OPTFFF 8,110,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip.c> +OPTFFF 8,111,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_addr.c> +OPTFFF 8,112,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_frag.c> +OPTFFF 8,113,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_in.c> +OPTFFF 8,114,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_out.c> +OPTFFF 8,115,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_lib.c> +OPTFFF 8,116,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_msg.c> +OPTFFF 8,117,1,0,0,0,0,0,<..\..\net\lwip\src\api\err.c> +OPTFFF 8,118,1,0,0,0,0,0,<..\..\net\lwip\src\api\netbuf.c> +OPTFFF 8,119,1,0,0,0,0,0,<..\..\net\lwip\src\api\netdb.c> +OPTFFF 8,120,1,0,0,0,0,0,<..\..\net\lwip\src\api\netifapi.c> +OPTFFF 8,121,1,0,0,0,0,0,<..\..\net\lwip\src\api\tcpip.c> +OPTFFF 8,122,1,0,0,0,0,0,<..\..\net\lwip\src\netif\etharp.c> +OPTFFF 8,123,1,0,0,0,0,0,<..\..\net\lwip\src\netif\ethernetif.c> +OPTFFF 8,124,1,0,0,0,0,0,<..\..\net\lwip\src\netif\loopif.c> +OPTFFF 8,125,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch_init.c> +OPTFFF 8,126,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch.c> +OPTFFF 8,127,1,0,0,0,0,0,<..\..\net\lwip\src\api\sockets.c> +OPTFFF 8,128,1,0,0,0,0,0,<..\..\net\lwip\src\core\memp_tiny.c> +OPTFFF 9,129,1,0,0,0,0,0,<.\mp3\mp3dec.c> +OPTFFF 9,130,1,0,0,0,0,0,<.\mp3\mp3tabs.c> +OPTFFF 9,131,1,0,0,0,0,0,<.\mp3\real\bitstream.c> +OPTFFF 9,132,1,0,0,0,0,0,<.\mp3\real\buffers.c> +OPTFFF 9,133,1,0,0,0,0,0,<.\mp3\real\dct32.c> +OPTFFF 9,134,1,0,0,0,0,0,<.\mp3\real\dequant.c> +OPTFFF 9,135,1,0,0,0,0,0,<.\mp3\real\dqchan.c> +OPTFFF 9,136,1,0,0,0,0,0,<.\mp3\real\huffman.c> +OPTFFF 9,137,1,0,0,0,0,0,<.\mp3\real\hufftabs.c> +OPTFFF 9,138,1,0,0,0,0,0,<.\mp3\real\imdct.c> +OPTFFF 9,139,1,0,0,0,0,0,<.\mp3\real\scalfact.c> +OPTFFF 9,140,1,0,0,0,0,0,<.\mp3\real\stproc.c> +OPTFFF 9,141,1,0,0,0,0,0,<.\mp3\real\subband.c> +OPTFFF 9,142,1,0,0,0,0,0,<.\mp3\real\trigtabs.c> +OPTFFF 9,143,2,0,0,0,0,0,<.\mp3\real\arm\asmpoly_thumb2.s> +OPTFFF 9,144,2,0,0,0,0,0,<.\mp3\real\arm\asmmisc.s> TARGOPT 1, (RT-Thread STM32 Radio) @@ -175,11 +176,14 @@ TARGOPT 1, (RT-Thread STM32 Radio) OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 OPTXL 1,1,1,1,1,1,1,0,0 OPTFL 1,0,1 - OPTAX 0 + OPTAX 255 OPTDL (SARMCM3.DLL)()(DARMSTM.DLL)(-pSTM32F103ZE)(SARMCM3.DLL)()(TARMSTM.DLL)(-pSTM32F103ZE) - OPTDBG 48117,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() - OPTKEY 0,(JL2CM3)(-U11111117 -O718 -S0 -C0 -JU1 -JI127.0.0.1 -JP0 -N00("ARM CoreSight SW-DP") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO27 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000) - OPTDF 0x0 + OPTDBG 48118,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() + OPTKEY 0,(DLGTARM)((1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(124=-1,-1,-1,-1,0)(125=-1,-1,-1,-1,0)(126=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)) + OPTKEY 0,(ARMDBGFLAGS)() + OPTKEY 0,(DLGUARM)((105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)) + OPTKEY 0,(JL2CM3)(-U20090110 -O206 -S0 -C0 -JU1 -JI127.0.0.1 -JP0 -N00("ARM CoreSight SW-DP") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000) + OPTDF 0x80 OPTLE <> OPTLC <> EndOpt diff --git a/bsp/stm32_radio/project.Uv2 b/bsp/stm32_radio/project.Uv2 index fee821b03..46bf1f30b 100644 --- a/bsp/stm32_radio/project.Uv2 +++ b/bsp/stm32_radio/project.Uv2 @@ -29,6 +29,7 @@ File 1,1,<.\dm9000.c> File 1,1,<.\fsmc_nand.c> File 1,1,<.\fsmc_sram.c> File 1,1,<.\fmt0371\fmt0371.c> +File 1,1,<.\http.c> File 2,1,<..\..\src\clock.c> File 2,1,<..\..\src\idle.c> File 2,1,<..\..\src\ipc.c> @@ -189,7 +190,7 @@ Options 1,0,0 // Target 'RT-Thread STM32 Radio' GenLib=0 GenHex=0 Debug=1 - Browse=1 + Browse=0 LstDir (.\obj\) HexSel=1 MG32K=0 @@ -241,7 +242,7 @@ Options 1,0,0 // Target 'RT-Thread STM32 Radio' ADSLDIF () ADSLDDW () OPTDL (SARMCM3.DLL)()(DARMSTM.DLL)(-pSTM32F103ZE)(SARMCM3.DLL)()(TARMSTM.DLL)(-pSTM32F103ZE) - OPTDBG 48117,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() + OPTDBG 48118,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() FLASH1 { 1,0,0,0,1,0,0,0,5,16,0,0,0,0,0,0,0,0,0,0 } FLASH2 (Segger\JL2CM3.dll) FLASH3 ("" ())