Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 17 of 17

Thread: T4.1 Data Access Violation Crash

  1. #1
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833

    T4.1 Data Access Violation Crash

    I'm currently working on rebuilding NativeEthernet from scratch so that it's fully non-blocking for better performance, while working on the TCP Server code I'm running into an annoying crash I can't figure out. The only thing consistent is the type of crash that is reported, Data Access Violation, though I can't be sure why it's happening.

    The new library is a little bit more complex in that you don't have to manually poll the server for connected clients or keep track of them yourself. All of the connected clients and their socket buffers are allocated from FNET's heap memory and linked by a pointer list to the server, I've kept careful track of what's allocated and deallocated to make sure it's not running out of memory and FNET has functions to check it's memory so I know that whenever this crash happens the memory is not full. It also doesn't have to do with any cache memory because it happens no matter where I allocate FNET's stack(DTCM, DMAMEM, or EXTMEM) and it doesn't take any longer to happen when I give it more memory.

    I use Apache Benchmark to stress test the Server and the crash will happen after a random number of clients each time, sometimes less than 2,000 clients, sometimes not until over 20,000 connections have been made.


    This CrashReport comes from this code: "if (client_list->object)"
    Code:
    CrashReport:
      A problem occurred at (system time) 18:57:44
      Code was executing from address 0x992
      CFSR: 82
    	(DACCVIOL) Data Access Violation
    	(MMARVALID) Accessed Address: 0xDF08C8F7          //The accessed address always changes between crashes
      Temperature inside the chip was 59.68 įC
      Startup CPU clock speed is 600MHz
      Reboot was caused by auto reboot after fault or bad interrupt detected
    This CrashReport comes from this code: "switch (tcp_ptr->tcp_state)"
    Code:
    CrashReport:
      A problem occurred at (system time) 19:0:1
      Code was executing from address 0x5F4
      CFSR: 82
    	(DACCVIOL) Data Access Violation
    	(MMARVALID) Accessed Address: 0xF43F0F60          //The accessed address always changes between crashes
      Temperature inside the chip was 59.68 įC
      Startup CPU clock speed is 600MHz
      Reboot was caused by auto reboot after fault or bad interrupt detected
    I'll try to explain the short pieces or code to understand more what's happening in them and after.
    client_list is the pointer list of connected clients, object is a pointer that points to a specific clients object.
    After passing the if check the object is then passed to a function that will give it the name tcp_ptr, tcp_state is just a normal uint32_t.

    So object and tcp_ptr should reference the same object when it gets passed to the function, object is assigned in the Client class constructor and then added to the list if the Client was successfully created, everything in the list has a valid address before even being added because all the pointers and mallocs have been checked before the Client was made with placement new. I also know there is nothing wrong with the way Clients are added and removed to the pointer list since it's just a copy of what FNET uses to allocate it's own pointer lists used throughout the whole library.

    Does anyone have any insight on how these pointers could be pointing to wrong addresses despite there being numerous checks in place and the fact that it happens in 1 out of thousands of iterations of the same code?

  2. #2
    Senior Member
    Join Date
    May 2015
    Location
    USA
    Posts
    1,085
    > 1 out of thousands of iterations of the same code?

    Could be a race condition.

    You need a debugger. Is TeensyDebug good enough?

  3. #3
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    I’ve never used it before so I don’t know what it’s capable of, my knowledge of debugging only includes the serial monitor.

  4. #4
    Senior Member
    Join Date
    Apr 2014
    Location
    Germany
    Posts
    9,443
    Accessed Address: 0xDF08C8F
    switch (tcp_ptr->tcp_state)
    looks like tcp_ptr is somehow wrong, sometimes.

  5. #5
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    Quote Originally Posted by Frank B View Post
    looks like tcp_ptr is somehow wrong, sometimes.
    That's the confusing part, it gets past multiple null pointer checks after allocating the socket memory and the client object, none of them fail and the pointers are set to null when created so it's not like the client failed to create and there are wild pointers left. Not to mention that all of them are being created equally through the exact same code yet they don't all crash like this.

  6. #6
    Senior Member
    Join Date
    Apr 2014
    Location
    Germany
    Posts
    9,443
    Perhaps it gets overwritten by a buffer overflow (array index out of bounds) I'd take a look at the mapfile and look for arrays that are near.

  7. #7
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    I wouldn't rule it out, but the current code doesn't have any arrays near it or anything that should overflow as far as I can tell.

    I'm not really sure what I should be looking for in the map file.

    Here's more of the relevant code.

    Here's where the Clients are made and added to the list:
    Code:
                  uint8_t* new_client_memory = (uint8_t*) _fnet_malloc_netbuf(sizeof(EthernetClient));
                  if(!new_client_memory){
                    while(1){
                      Serial.println("Failed to allocate client!");
                      delay(1000);
                    }
                  }
                  EthernetClient* new_client = new (new_client_memory) EthernetClient(accepted_socket);
                  new_client->client_memory = new_client_memory;
                  new_client->init(server_ptr->socket_recv_size, server_ptr->socket_send_size);
                  object_queue_add(&server_ptr->client_list, &(new_client->client_id));
    Here's where the list is looped through and processed:
    Code:
          object_chain_t *client_list = NULL;
          EthernetClient *client = NULL;
          
          client_list = server_ptr->client_list;
          
          if(client_list == 0)
          {
    //        Serial.println("Client List empty!");
          }
          else
          {
    //        Serial.println("Handle Client chain!");
            client = (EthernetClient*) client_list->object;
            client->tcp_client_poll(client);
            if(client->tcp_state == EthernetClient::TCP_STATE_DISABLED){
              //Deallocate Clients
              object_queue_del(&server_ptr->client_list, &(client->client_id));
              client->~EthernetClient();
              if(client->client_memory){
                _fnet_free_netbuf(client->client_memory);
              }
              fnet_socket_listen(server_ptr->tcp_socket, ++server_ptr->backlog);
            }
            
            while(client_list->next_chain)
            {
              client_list = client_list->next_chain;
              if(client_list->object){                                                      //Here's where the crash happens sometimes
                client = (EthernetClient*) client_list->object;
                client->tcp_client_poll(client);
                if(client->tcp_state == EthernetClient::TCP_STATE_DISABLED){
                  //Deallocate Clients
                  object_queue_del(&server_ptr->client_list, &(client->client_id));
                  client->~EthernetClient();
                  if(client->client_memory){
                    _fnet_free_netbuf(client->client_memory);
                  }
                  fnet_socket_listen(server_ptr->tcp_socket, ++server_ptr->backlog);
                }
              }
              else{
                object_queue_del(&server_ptr->client_list, client_list);
              }
            }
    //        Serial.println("Handle Client chain done!");
          }
    Here's the beginning of the client process function:
    Code:
    void EthernetClient::tcp_client_poll(EthernetClient *client){
      if(client == NULL) return;
    
      EthernetClient* tcp_ptr = client;
      
      switch (tcp_ptr->tcp_state) {                                                    //Here's where the crash happens sometimes

  8. #8
    Senior Member
    Join Date
    Apr 2014
    Location
    Germany
    Posts
    9,443
    The ordering of variables in memory is pretty random. The problematic code (if there is any) does not need to be in the near of the switch.. it can be anywhere.
    Can you post the *.sym file? Its in the temp directory where Arduino builds the hex file.

  9. #9
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    Here you go.
    Code:
    /var/folders/6c/mywk2cdx4k919xpqt544vnbh0000gq/T/arduino_build_302604/WebServerNonBlocking.ino.elf:     file format elf32-littlearm
    
    SYMBOL TABLE:
    60000000 l    d  .text.headers	00000000 .text.headers
    60001400 l    d  .text.code	00000000 .text.code
    600027e4 l    d  .text.progmem	00000000 .text.progmem
    00000000 l    d  .text.itcm	00000000 .text.itcm
    0000f420 l    d  .fini	00000000 .fini
    0000f424 l    d  .ARM.exidx	00000000 .ARM.exidx
    20000000 l    d  .data	00000000 .data
    20002618 l    d  NonCacheable	00000000 NonCacheable
    2000ef38 l    d  .bss	00000000 .bss
    20200000 l    d  .bss.dma	00000000 .bss.dma
    70000000 l    d  .bss.extram	00000000 .bss.extram
    60020c28 l    d  .text.csf	00000000 .text.csf
    00000000 l    d  .ARM.attributes	00000000 .ARM.attributes
    00000000 l    d  .comment	00000000 .comment
    00000000 l    d  .debug_info	00000000 .debug_info
    00000000 l    d  .debug_abbrev	00000000 .debug_abbrev
    00000000 l    d  .debug_line	00000000 .debug_line
    00000000 l    d  .debug_frame	00000000 .debug_frame
    00000000 l    d  .debug_str	00000000 .debug_str
    00000000 l    d  .debug_loc	00000000 .debug_loc
    00000000 l    d  .debug_aranges	00000000 .debug_aranges
    00000000 l    d  .debug_ranges	00000000 .debug_ranges
    00000000 l    df *ABS*	00000000 bootdata.c
    00000000 l    df *ABS*	00000000 startup.c
    00000000 l    df *ABS*	00000000 T4_PowerButton.cpp
    20050844 l     O .bss	00000004 __user_power_button_callback
    00000000 l    df *ABS*	00000000 tempmon.c
    20050858 l     O .bss	00000004 s_hotTemp
    2005085c l     O .bss	00000004 s_hot_ROOM
    20050860 l     O .bss	00000004 s_roomC_hotC
    20050864 l     O .bss	00000004 s_hotCount
    00000000 l    df *ABS*	00000000 usb.c
    00009594 l     F .text.itcm	00000070 schedule_transfer
    00009604 l     F .text.itcm	00000036 run_callbacks
    0000963c l     F .text.itcm	000000a0 endpoint0_transmit.constprop.1
    2005086c l     O .bss	00000004 endpointN_notify_mask
    20050870 l     O .bss	00000001 sof_usage
    2005087c l     O .bss	00000004 endpoint0_notify_mask
    20050880 l     O .bss	00000001 usb_reboot_timer
    20050888 l     O .bss	00000008 endpoint0_setupdata
    20050890 l     O .bss	00000008 reply_buffer
    20050898 l     O .bss	00000008 endpoint0_buffer
    00000000 l    df *ABS*	00000000 CrashReport.cpp
    60002094 l     F .text.code	00000044 cleardata(arm_fault_info_struct*) [clone .constprop.1]
    600020d8 l     F .text.code	00000044 isvalid(arm_fault_info_struct const*) [clone .part.0] [clone .constprop.2]
    00000000 l    df *ABS*	00000000 analog.c
    20050e11 l     O .bss	00000001 calibrating
    00000000 l    df *ABS*	00000000 /Applications/Teensyduino1.54.app/Contents/Java/hardware/tools/arm/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/fpv5-d16/crti.o
    00000000 l    df *ABS*	00000000 /Applications/Teensyduino1.54.app/Contents/Java/hardware/tools/arm/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/fpv5-d16/crtn.o
    00000000 l    df *ABS*	00000000 crtstuff.c
    00000020 l     F .text.itcm	00000000 __do_global_dtors_aux
    2000ef38 l       .bss	00000000 completed.8605
    00000044 l     F .text.itcm	00000000 frame_dummy
    2000ef3c l       .bss	00000000 object.8610
    600027b0 l     O .text.code	00000000 __frame_dummy_init_array_entry
    00000000 l    df *ABS*	00000000 WebServerNonBlocking.ino.cpp
    000004bc l     F .text.itcm	00000068 _GLOBAL__sub_I_testSocket1
    2000efb8 l     O .bss	00000200 setup::tcp_buf1
    2000f1bc l     O .bss	00040000 setup::stack_mem
    00000000 l    df *ABS*	00000000 NativeDns.cpp
    000005c8 l     F .text.itcm	00000020 _GLOBAL__sub_I__ZN9DNSClient11nullAddressE
    2004f1c4 l     O .bss	00000008 INADDR_NONE
    00000000 l    df *ABS*	00000000 NativeEthernetThreads.cpp
    00001158 l     F .text.itcm	00000018 _GLOBAL__sub_I__ZN13EthernetClass10_fnet_pollE
    20000250 l     O .data	00000008 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)::timer_api
    2004f1d8 l     O .bss	00000006 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)::teensy_mac
    2000046c l     O .data	00000010 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)::teensy_mutex_api
    2004f1e4 l     O .bss	00000010 EthernetClass::startDHCP(void (*)(), void (*)(), unsigned long, unsigned char)::dhcp_params
    00000000 l    df *ABS*	00000000 HardwareSerial1.cpp
    0000a70c l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial1
    20050a94 l     O .bss	00000040 tx_buffer1
    200010a8 l     O .data	00000064 UART6_Hardware
    20050ad4 l     O .bss	00000040 rx_buffer1
    00000000 l    df *ABS*	00000000 HardwareSerial2.cpp
    0000a730 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial2
    20050b14 l     O .bss	00000028 tx_buffer2
    200016f8 l     O .data	00000064 UART4_Hardware
    20050b3c l     O .bss	00000040 rx_buffer2
    00000000 l    df *ABS*	00000000 HardwareSerial3.cpp
    0000a754 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial3
    20050b7c l     O .bss	00000028 tx_buffer3
    2000181c l     O .data	00000064 UART2_Hardware
    20050ba4 l     O .bss	00000040 rx_buffer3
    00000000 l    df *ABS*	00000000 HardwareSerial4.cpp
    0000a778 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial4
    20001880 l     O .data	00000064 UART3_Hardware
    20050be4 l     O .bss	00000028 tx_buffer4
    20050c0c l     O .bss	00000040 rx_buffer4
    00000000 l    df *ABS*	00000000 HardwareSerial5.cpp
    0000a79c l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial5
    20050c4c l     O .bss	00000028 tx_buffer5
    20001944 l     O .data	00000064 UART8_Hardware
    20050c74 l     O .bss	00000040 rx_buffer5
    00000000 l    df *ABS*	00000000 HardwareSerial6.cpp
    0000a7c0 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial6
    20050cb4 l     O .bss	00000028 tx_buffer6
    20001a08 l     O .data	00000064 UART1_Hardware
    20050cdc l     O .bss	00000040 rx_buffer6
    00000000 l    df *ABS*	00000000 HardwareSerial7.cpp
    0000a7e4 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial7
    20001acc l     O .data	00000064 UART7_Hardware
    20050d1c l     O .bss	00000028 tx_buffer7
    20050d44 l     O .bss	00000040 rx_buffer7
    00000000 l    df *ABS*	00000000 HardwareSerial8.cpp
    0000a808 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial8
    20050d84 l     O .bss	00000028 tx_buffer8
    20001b90 l     O .data	00000064 UART5_Hardware
    20050dac l     O .bss	00000040 rx_buffer8
    00000000 l    df *ABS*	00000000 usb_inst.cpp
    0000abac l     F .text.itcm	00000018 _GLOBAL__sub_I_Serial
    00000000 l    df *ABS*	00000000 usb_desc.c
    600028b0 l     O .text.progmem	0000000a qualifier_descriptor
    20001668 l     O .data	00000012 device_descriptor
    00000000 l    df *ABS*	00000000 serialEvent1.cpp
    00000000 l    df *ABS*	00000000 serialEvent2.cpp
    00000000 l    df *ABS*	00000000 serialEvent3.cpp
    00000000 l    df *ABS*	00000000 serialEvent4.cpp
    00000000 l    df *ABS*	00000000 serialEvent5.cpp
    00000000 l    df *ABS*	00000000 serialEvent6.cpp
    00000000 l    df *ABS*	00000000 serialEvent7.cpp
    00000000 l    df *ABS*	00000000 serialEvent8.cpp
    00000000 l    df *ABS*	00000000 serialEvent.cpp
    00000000 l    df *ABS*	00000000 NativeEthernetClient.cpp
    00000000 l    df *ABS*	00000000 NativeEthernetServer.cpp
    00000000 l    df *ABS*	00000000 object_chain.c
    00000000 l    df *ABS*	00000000 fnet_cpu.c
    00000000 l    df *ABS*	00000000 fnet_mimxrt_eth.c
    000011b8 l     F .text.itcm	00000004 fnet_mimxrt_eth_phy_init
    000011bc l     F .text.itcm	00000180 fnet_mimxrt_eth_init
    20001410 l     O .data	0000011c fnet_mimxrt_eth0_if
    00000000 l    df *ABS*	00000000 fnet_mimxrt_isr.c
    00000000 l    df *ABS*	00000000 fnet_mimxrt_isr_inst.c
    00000000 l    df *ABS*	00000000 fnet_fec.c
    000013c8 l     F .text.itcm	00000042 _fnet_fec_get_hw_addr
    0000140c l     F .text.itcm	00000026 _fnet_fec_get_statistics
    00001434 l     F .text.itcm	0000001e fnet_fec_isr_handler_top
    00001454 l     F .text.itcm	00000064 _fnet_fec_phy_read
    000014b8 l     F .text.itcm	00000064 _fnet_fec_phy_write
    0000151c l     F .text.itcm	00000080 _fnet_fec_set_hw_addr
    0000159c l     F .text.itcm	00000028 _fnet_fec_release
    000015c4 l     F .text.itcm	000001b4 _fnet_fec_init
    00001814 l     F .text.itcm	00000026 fnet_fec_isr_handler_bottom
    00001778 l     F .text.itcm	0000009a _fnet_fec_input
    00000000 l    df *ABS*	00000000 fnet_service.c
    2004f1f8 l     O .bss	00000300 fnet_poll_if
    2004f4f8 l     O .bss	00000004 fnet_service_mutex
    00000000 l    df *ABS*	00000000 fnet_dhcp.c
    00000000 l    df *ABS*	00000000 fnet_dhcp_cln.c
    00001b38 l     F .text.itcm	000001c6 _fnet_dhcp_cln_parse_options
    00001d00 l     F .text.itcm	000000e8 _fnet_dhcp_cln_receive_message
    00001de8 l     F .text.itcm	00000218 _fnet_dhcp_cln_send_message
    00002000 l     F .text.itcm	0000011e _fnet_dhcp_cln_set_state
    00002120 l     F .text.itcm	00000056 _fnet_dhcp_cln_apply_params
    00002178 l     F .text.itcm	00000018 fnet_dhcp_cln_release.part.1
    00002190 l     F .text.itcm	00000204 _fnet_dhcp_cln_poll
    200015bc l     O .data	00000006 fnet_dhcp_cln_parameter_request_list
    2004f4fc l     O .bss	000002cc fnet_dhcp_cln_if_list
    00000000 l    df *ABS*	00000000 fnet_link.c
    00002530 l     F .text.itcm	00000022 _fnet_link_poll
    2004f7c8 l     O .bss	00000018 fnet_link_if_list
    00000000 l    df *ABS*	00000000 fnet_arp.c
    000025ac l     F .text.itcm	00000004 _fnet_arp_ip4_addr_conflict
    000025b0 l     F .text.itcm	00000044 _fnet_arp_timer
    000025f4 l     F .text.itcm	000000ce _fnet_arp_add_entry.isra.0
    00000000 l    df *ABS*	00000000 fnet_checksum.c
    00002a8c l     F .text.itcm	000000e8 _fnet_checksum32_low
    00002b74 l     F .text.itcm	0000005c _fnet_checksum32_nb
    00000000 l    df *ABS*	00000000 fnet_diginet.c
    2004f7e0 l     O .bss	00000008 diginet_queue
    2004f7ec l     O .bss	00000004 diginet_event
    00000000 l    df *ABS*	00000000 fnet_error.c
    2004f7f0 l     O .bss	00000001 FNET_ERR_NUMBER
    00000000 l    df *ABS*	00000000 fnet_eth.c
    2004f7f4 l     O .bss	00000004 fnet_eth_number
    00000000 l    df *ABS*	00000000 fnet_icmp4.c
    000030f0 l     F .text.itcm	0000005e _fnet_icmp4_output
    00003150 l     F .text.itcm	0000008a _fnet_icmp4_notify_protocol
    000031dc l     F .text.itcm	00000120 _fnet_icmp4_input
    00000000 l    df *ABS*	00000000 fnet_ip.c
    00000000 l    df *ABS*	00000000 fnet_ip4.c
    00003514 l     F .text.itcm	00000060 _fnet_ip4_frag_list_free.part.1
    00003574 l     F .text.itcm	00000038 _fnet_ip4_timer
    000037fc l     F .text.itcm	00000482 _fnet_ip4_input_low
    00003c80 l     F .text.itcm	00000074 _fnet_ip4_netif_output
    2004f7f8 l     O .bss	00000002 ip_id.9939
    2004f7fc l     O .bss	00000008 ip_queue
    2004f804 l     O .bss	00000004 ip_timer_ptr
    2004f808 l     O .bss	00000004 ip_frag_list_head
    2004f80c l     O .bss	00000004 ip_event
    00000000 l    df *ABS*	00000000 fnet_isr.c
    2004f810 l     O .bss	00000004 fnet_locked
    2004f814 l     O .bss	00000004 fnet_isr_table
    200015e8 l     O .data	00000004 fnet_event_desc_last
    00000000 l    df *ABS*	00000000 fnet_mempool.c
    00000000 l    df *ABS*	00000000 fnet_netbuf.c
    000045e8 l     F .text.itcm	000000b2 _fnet_netbuf_trim.part.0
    2004f818 l     O .bss	00000004 fnet_mempool_main
    00000000 l    df *ABS*	00000000 fnet_netif.c
    2004f81c l     O .bss	00000004 fnet_netif_callback_ip4_addr_conflict
    00000000 l    df *ABS*	00000000 fnet_prot.c
    200004d0 l     O .data	00000010 fnet_prot_if_list
    00000000 l    df *ABS*	00000000 fnet_raw.c
    000051bc l     F .text.itcm	00000018 _fnet_raw_attach
    000051d4 l     F .text.itcm	00000030 _fnet_raw_shutdown
    00005204 l     F .text.itcm	000000f6 _fnet_raw_snd
    000052fc l     F .text.itcm	00000062 _fnet_raw_rcv
    00005360 l     F .text.itcm	00000034 _fnet_raw_connect
    00005394 l     F .text.itcm	0000001c _fnet_raw_detach
    000053b0 l     F .text.itcm	0000001c _fnet_raw_release
    200004e0 l     O .data	0000002c fnet_raw_socket_api
    00000000 l    df *ABS*	00000000 fnet_socket.c
    00005554 l     F .text.itcm	00000044 _fnet_socket_desc_alloc
    00005598 l     F .text.itcm	00000024 fnet_socket_addr_are_equal.part.1
    000055bc l     F .text.itcm	00000014 _fnet_socket_addr_copy.part.3
    20001610 l     O .data	00000002 fnet_port_last
    2004f820 l     O .bss	00001000 fnet_socket_desc
    00000000 l    df *ABS*	00000000 fnet_stack.c
    20050820 l     O .bss	00000004 _fnet_mutex_api
    20050828 l     O .bss	00000004 fnet_stack_mutex
    00000000 l    df *ABS*	00000000 fnet_stdlib.c
    2005082c l     O .bss	00000004 fnet_rand_seed
    00000000 l    df *ABS*	00000000 fnet_tcp.c
    0000664c l     F .text.itcm	00000058 _fnet_tcp_set_synopt
    000066a4 l     F .text.itcm	00000080 _fnet_tcp_init_connection
    00006724 l     F .text.itcm	00000028 _fnet_tcp_del_cb
    0000674c l     F .text.itcm	00000080 _fnet_tcp_getsockopt
    000067cc l     F .text.itcm	00000034 _fnet_tcp_accept
    00006800 l     F .text.itcm	0000005c _fnet_tcp_attach
    0000685c l     F .text.itcm	000000e0 _fnet_tcp_find_socket
    0000693c l     F .text.itcm	0000005a _fnet_tcp_process_fin.isra.0
    00006998 l     F .text.itcm	00000090 _fnet_tcp_get_opt.isra.4
    00006a28 l     F .text.itcm	00000090 _fnet_tcp_close_socket
    00006ab8 l     F .text.itcm	000000a2 _fnet_tcp_setsockopt
    00006b5c l     F .text.itcm	00000078 _fnet_tcp_control_input
    00006bd4 l     F .text.itcm	00000068 _fnet_tcp_init
    00007188 l     F .text.itcm	00000034 _fnet_tcp_fasttimo
    0000873c l     F .text.itcm	0000005c _fnet_tcp_slowtimo
    00006c3c l     F .text.itcm	0000019c _fnet_tcp_send_seg.constprop.13
    00006dd8 l     F .text.itcm	0000015e _fnet_tcp_send_dataseg.constprop.12
    00006f38 l     F .text.itcm	0000009a _fnet_tcp_send_rst.isra.5
    00006fd4 l     F .text.itcm	0000012a _fnet_tcp_send_headseg
    00007100 l     F .text.itcm	00000070 _fnet_tcp_send_ack
    00007170 l     F .text.itcm	00000018 _fnet_tcp_fasttimosk
    000071bc l     F .text.itcm	000000be _fnet_tcp_rcv
    0000727c l     F .text.itcm	00000150 _fnet_tcp_send_anydata
    000073cc l     F .text.itcm	00000062 _fnet_tcp_shutdown
    00007430 l     F .text.itcm	0000050e _fnet_tcp_dataprocess
    00007940 l     F .text.itcm	00000164 _fnet_tcp_snd
    00007aa4 l     F .text.itcm	000000b8 _fnet_tcp_connect
    00007b5c l     F .text.itcm	000006e0 _fnet_tcp_input
    0000823c l     F .text.itcm	0000007a _fnet_tcp_send_rstsk
    000082b8 l     F .text.itcm	00000048 _fnet_tcp_abort_socket
    00008300 l     F .text.itcm	0000005c _fnet_tcp_listen
    0000835c l     F .text.itcm	00000060 _fnet_tcp_drain
    000083bc l     F .text.itcm	000000d8 _fnet_tcp_close
    00008494 l     F .text.itcm	000002a6 _fnet_tcp_slowtimosk
    00008798 l     F .text.itcm	00000050 _fnet_tcp_release
    20050830 l     O .bss	00000004 fnet_tcp_fasttimer
    2000050c l     O .data	0000002c fnet_tcp_socket_api
    20050834 l     O .bss	00000004 _fnet_tcp_initial_seq_number
    20050838 l     O .bss	00000004 fnet_tcp_slowtimer
    00000000 l    df *ABS*	00000000 fnet_timer.c
    20050840 l     O .bss	00000004 _fnet_timer_head
    00000000 l    df *ABS*	00000000 fnet_udp.c
    000088fc l     F .text.itcm	00000026 _fnet_udp_attach
    00008924 l     F .text.itcm	00000030 _fnet_udp_shutdown
    00008954 l     F .text.itcm	00000196 _fnet_udp_snd
    00008aec l     F .text.itcm	00000060 _fnet_udp_rcv
    00008b4c l     F .text.itcm	0000002a _fnet_udp_connect
    00008b78 l     F .text.itcm	0000001c _fnet_udp_detach
    00008b94 l     F .text.itcm	0000001c _fnet_udp_release
    00008bb0 l     F .text.itcm	000001e4 _fnet_udp_input
    00008d94 l     F .text.itcm	00000094 _fnet_udp_control_input
    20000538 l     O .data	0000002c fnet_udp_socket_api
    00000000 l    df *ABS*	00000000 memcpy-armv7m.S.o
    00000000 l    df *ABS*	00000000 clockspeed.c
    00000000 l    df *ABS*	00000000 delay.c
    00000000 l    df *ABS*	00000000 usb_serial.c
    00009eec l     F .text.itcm	0000006c rx_queue_transfer
    00009f58 l     F .text.itcm	000000b4 rx_event
    0000a00c l     F .text.itcm	00000098 usb_serial_flush_callback
    0000a0a4 l     F .text.itcm	0000017c usb_serial_write.part.1
    200508a4 l     O .bss	00000010 rx_index
    200508b4 l     O .bss	00000002 tx_packet_size
    200508b6 l     O .bss	00000001 tx_noautoflush
    200508b7 l     O .bss	00000001 tx_head
    200508c0 l     O .bss	00000100 rx_transfer
    200509c0 l     O .bss	00000001 rx_tail
    200509c4 l     O .bss	00000009 rx_list
    200509ce l     O .bss	00000002 rx_packet_size
    20200060 l     O .bss.dma	00001000 rx_buffer
    20201060 l     O .bss.dma	00002000 txbuffer
    200509d0 l     O .bss	00000010 rx_count
    200509e0 l     O .bss	00000004 rx_available
    200509e4 l     O .bss	00000001 rx_head
    200509e5 l     O .bss	00000001 transmit_previous_timeout
    200509e6 l     O .bss	00000002 tx_available
    20050a00 l     O .bss	00000080 tx_transfer
    00000000 l    df *ABS*	00000000 EventResponder.cpp
    00000000 l    df *ABS*	00000000 IPAddress.cpp
    00000000 l    df *ABS*	00000000 IntervalTimer.cpp
    20050e00 l     O .bss	00000010 funct_table
    00000000 l    df *ABS*	00000000 Print.cpp
    00000000 l    df *ABS*	00000000 main.cpp
    00000000 l    df *ABS*	00000000 new.cpp
    00000000 l    df *ABS*	00000000 yield.cpp
    20050e10 l     O .bss	00000001 yield::running
    00000000 l    df *ABS*	00000000 nonstd.c
    00000000 l    df *ABS*	00000000 pwm.c
    00000000 l    df *ABS*	00000000 rtc.c
    00000000 l    df *ABS*	00000000 sm_pool.c
    00000000 l    df *ABS*	00000000 HardwareSerial.cpp
    00000000 l    df *ABS*	00000000 atexit_arm.cc
    00000000 l    df *ABS*	00000000 _aeabi_uldivmod.o
    00000000 l    df *ABS*	00000000 libgcc2.c
    00000000 l    df *ABS*	00000000 _dvmd_tls.o
    00000000 l    df *ABS*	00000000 mallocr.c
    00000000 l    df *ABS*	00000000 cxa_atexit.c
    00000000 l    df *ABS*	00000000 errno.c
    00000000 l    df *ABS*	00000000 init.c
    00000000 l    df *ABS*	00000000 malloc.c
    00000000 l    df *ABS*	00000000 mallocr.c
    00000000 l    df *ABS*	00000000 mbtowc_r.c
    00000000 l    df *ABS*	00000000 memmove.c
    00000000 l    df *ABS*	00000000 memset.c
    00000000 l    df *ABS*	00000000 mlock.c
    00000000 l    df *ABS*	00000000 mallocr.c
    00000000 l    df *ABS*	00000000 sbrkr.c
    00000000 l    df *ABS*	00000000 lib_a-strlen.o
    00000000 l    df *ABS*	00000000 vfprintf.c
    20001194 l     O .data	00000010 zeroes.7258
    200011e0 l     O .data	00000010 blanks.7257
    00000000 l    df *ABS*	00000000 vdprintf.c
    00000000 l    df *ABS*	00000000 wctomb_r.c
    00000000 l    df *ABS*	00000000 writer.c
    00000000 l    df *ABS*	00000000 __atexit.c
    00000000 l    df *ABS*	00000000 dtoa.c
    0000dba0 l     F .text.itcm	00000128 quorem
    00000000 l    df *ABS*	00000000 mallocr.c
    00000000 l    df *ABS*	00000000 localeconv.c
    00000000 l    df *ABS*	00000000 lib_a-memchr.o
    00000000 l    df *ABS*	00000000 mprec.c
    200013f8 l     O .data	0000000c p05.6087
    00000000 l    df *ABS*	00000000 vfprintf.c
    00000000 l    df *ABS*	00000000 vasnprintf.c
    00000000 l    df *ABS*	00000000 impure.c
    20001c70 l     O .data	00000428 impure_data
    00000000 l    df *ABS*	00000000 locale.c
    00000000 l    df *ABS*	00000000 ctype_.c
    00000000 l    df *ABS*	00000000 reent.c
    00000000 l    df *ABS*	00000000 
    00000000 l       *UND*	00000000 __fini_array_end
    00000000 l       *UND*	00000000 __bss_start__
    00000000 l       *UND*	00000000 __bss_end__
    00000000 l       *UND*	00000000 software_init_hook
    00000000 l       *UND*	00000000 __fini_array_start
    00000000 l       *UND*	00000000 hardware_init_hook
    00000000 l       *UND*	00000000 __libc_fini
    00000000 l       *UND*	00000000 __stack
    0000f408 l     F .text.itcm	00000008 ___init_veneer
    0000f410 l     F .text.itcm	00000008 ___Z11flexRamInfov_veneer
    0000f418 l     F .text.itcm	00000008 ___ZNK16CrashReportClass7printToER5Print_veneer
    60002710 l     F .text.code	00000008 ___ZN5Print5writeEPKc_veneer
    60002718 l     F .text.code	00000008 __usb_serial_write_veneer
    60002720 l     F .text.code	00000008 ____libc_init_array_veneer
    60002728 l     F .text.code	00000008 __usb_init_serialnumber_veneer
    60002730 l     F .text.code	00000008 __main_veneer
    60002738 l     F .text.code	00000008 ___ZN5Print7printlnEmi_veneer
    60002740 l     F .text.code	00000008 __set_arm_clock_veneer
    60002748 l     F .text.code	00000008 ___ZN5Print6printfEPKcz_veneer
    60002750 l     F .text.code	00000008 __pwm_init_veneer
    60002758 l     F .text.code	00000008 __memset_veneer
    60002760 l     F .text.code	00000008 __sm_set_pool_veneer
    60002768 l     F .text.code	00000008 __delay_veneer
    60002770 l     F .text.code	00000008 ___ZN5Print11printNumberEmhh_veneer
    60002778 l     F .text.code	00000008 __free_veneer
    60002780 l     F .text.code	00000008 __malloc_veneer
    60002788 l     F .text.code	00000008 __startup_late_hook_veneer
    60002790 l     F .text.code	00000008 ___ZN5Print7printlnEv_veneer
    60002798 l     F .text.code	00000008 ___ZN5Print10printFloatEdh_veneer
    600027a0 l     F .text.code	00000008 ___ZN5Print7printlnEPKc_veneer
    600027a8 l     F .text.code	00000008 __startup_early_hook_veneer
    00000e2c g     F .text.itcm	00000028 EthernetClass::initLinkStatus(void (*)(bool))
    0000a45c g     F .text.itcm	0000000c usb_serial_available
    20050e6c g     O .bss	00000004 focus_channel_section_read
    00002df4 g     F .text.itcm	00000014 _fnet_eth_release
    000000c8 g     F .text.itcm	00000002 handleTCPReceive(EthernetServer*)
    00000c1c  w    F .text.itcm	0000000c IntervalTimer::~IntervalTimer()
    20000000  w    O .data	00000020 vtable for EthernetServer
    00004fa8 g     F .text.itcm	00000052 _fnet_netif_is_connected
    00009500 g     F .text.itcm	00000002 startup_default_late_hook
    0000abc4  w    F .text.itcm	000000f0 yield
    00003648 g     F .text.itcm	0000000e _fnet_ip4_will_fragment
    20050874 g     O .bss	00000004 usb_timer1_callback
    00006458 g     F .text.itcm	00000018 _fnet_mutex_lock
    600027fc g     O .text.progmem	00000018 usb_string_manufacturer_name_default
    60001a6c g     F .text.code	000003bc configure_external_ram
    00001a38 g     F .text.itcm	00000048 fnet_service_poll
    00006158 g     F .text.itcm	0000003a _fnet_socket_buffer_append_record
    00004b08 g     F .text.itcm	0000001c _fnet_heap_init
    00005644 g     F .text.itcm	00000084 _fnet_socket_conflict
    0000a6ec  w    F .text.itcm	00000002 HardwareSerial::~HardwareSerial()
    600028c0 g     O .text.progmem	00000001 _serialEvent7_default
    000032fc g     F .text.itcm	0000011c _fnet_icmp4_error
    0000a8e0 g     F .text.itcm	00000020 Print::println()
    0000252c g     F .text.itcm	00000004 fnet_dhcp_cln_get_state
    0000882c g     F .text.itcm	00000050 _fnet_timer_poll
    0000ab60  w    F .text.itcm	00000002 serialEvent5()
    00000ef4 g     F .text.itcm	00000012 EthernetClass::stopDHCP()
    00002e40 g     F .text.itcm	00000098 _fnet_eth_output_ip4
    0000bfd0 g     F .text.itcm	00000002 __malloc_unlock
    200019a8 g     O .data	00000060 Serial5
    00004da4 g     F .text.itcm	00000018 fnet_netif_set_ip4_dns
    600026ac g     F .text.code	00000058 analog_init
    00002480 g     F .text.itcm	00000034 fnet_dhcp_cln_get_by_netif
    0000da50 g     F .text.itcm	0000004a _vdprintf_r
    00003794 g     F .text.itcm	00000068 _fnet_ip4_addr_is_broadcast
    00004b24 g     F .text.itcm	00000010 _fnet_free
    20001660 g     O .data	00000004 F_CPU_ACTUAL
    0000ab70  w    F .text.itcm	00000002 usb_serial_class::~usb_serial_class()
    00001b08 g     F .text.itcm	0000000c fnet_service_mutex_unlock
    0000be68 g     F .text.itcm	000000c6 memmove
    000035ac g     F .text.itcm	00000058 _fnet_ip4_init
    00004eb4 g     F .text.itcm	000000bc _fnet_netif_init
    00000c18 g     F .text.itcm	00000002 EthernetClass::timer_delay(unsigned long)
    0000b1c0 g     F .text.itcm	0000007a HardwareSerial::peek()
    00005904 g     F .text.itcm	0000007c fnet_socket_listen
    0000ec80 g     F .text.itcm	0000004c _Balloc
    0000f42c g       .ARM.exidx	00000000 __exidx_end
    20050a90 g     O .bss	00000001 EventResponder::runningFromYield
    00001adc g     F .text.itcm	00000020 _fnet_service_init
    00009538 g     F .text.itcm	0000005c tempmonGetTemp
    2000047c g     O .data	00000008 fnet_fec_eth_api
    0000a8b4 g     F .text.itcm	0000002c Print::write(unsigned char const*, unsigned int)
    0000b850 g     F .text.itcm	0000000c __errno
    2000efb4 g     O .bss	00000004 poll_timer
    20050824 g     O .bss	00000001 _fnet_is_enabled
    60001000 g     O .text.headers	00000020 ImageVectorTable
    00004d8c g     F .text.itcm	00000018 fnet_netif_set_ip4_gateway
    20050a80 g     O .bss	00000004 EventResponder::firstInterrupt
    00009e90 g     F .text.itcm	00000004 usb_transfer_status
    0000a724 g     F .text.itcm	0000000c IRQHandler_Serial2
    0000b03c g     F .text.itcm	00000090 sm_set_pool
    00002ed8 g     F .text.itcm	00000044 _fnet_eth_multicast_leave_ip4
    20001698 g     O .data	00000060 Serial1
    0000ab8c  w    F .text.itcm	00000008 usb_serial_class::write(unsigned char const*, unsigned int)
    00002724 g     F .text.itcm	00000016 _fnet_arp_release
    2005328c g     O .bss	00000004 errno
    0000f428 g       .text.itcm	00000000 _etext
    2000ef38 g       .bss	00000000 _sbss
    20050f10 g     O .bss	00000004 fnet_netif_list
    0000a6ec  w    F .text.itcm	00000002 HardwareSerial::~HardwareSerial()
    000062b4 g     F .text.itcm	00000020 fnet_socket_addr_is_multicast
    0000ab64  w    F .text.itcm	00000002 serialEvent6()
    0000b0ec g     F .text.itcm	00000026 HardwareSerial::available()
    600028c4 g       *ABS*	00000000 _stextload
    000003dc g     F .text.itcm	000000e0 loop
    0000a7b4 g     F .text.itcm	0000000c IRQHandler_Serial6
    00009d48 g     F .text.itcm	00000064 usb_config_rx
    00002ca8 g     F .text.itcm	000000b4 _fnet_eth_input
    0000ab50  w    F .text.itcm	00000002 serialEvent1()
    00003f7c g     F .text.itcm	00000066 _fnet_ip4_getsockopt
    0000a820 g     F .text.itcm	00000036 IPAddress::printTo(Print&) const
    0000b350 g     F .text.itcm	00000004 HardwareSerial::write(unsigned char)
    20002618 g     O NonCacheable	0000c91e fnet_fec0_buf
    20050a84 g     O .bss	00000004 EventResponder::lastInterrupt
    00008e48 g     F .text.itcm	00000134 memcpy
    00004b34 g     F .text.itcm	00000004 _fnet_free_netbuf
    00000c0c g     F .text.itcm	0000000c EthernetClass::timer_get_ms()
    0000c4e0 g     F .text.itcm	00001570 _svfprintf_r
    20050850 g     O .bss	00000004 systick_millis_count
    20001638 g     O .data	00000024 fnet_udp_prot_if
    00004bb0 g     F .text.itcm	00000004 _fnet_malloc_max_netbuf
    0000b4cc g     F .text.itcm	00000000 .hidden __aeabi_uldivmod
    000027b8 g     F .text.itcm	0000014c _fnet_arp_input
    200508a0 g     O .bss	00000001 usb_configuration
    2004f7e8 g     O .bss	00000001 diginet_console_type
    00001348 g     F .text.itcm	00000080 fnet_cpu_isr_install
    0000afec g     F .text.itcm	00000050 sm_align_pool
    60000000 g     O .text.headers	00000200 FlexSPI_NOR_Config
    00002554 g     F .text.itcm	00000058 fnet_link_init
    0000ab54  w    F .text.itcm	00000002 serialEvent2()
    20050f14 g     O .bss	00000004 fnet_netif_default
    200004c8 g     O .data	00000006 fnet_eth_null_addr
    600027fc  w    O .text.progmem	00000018 usb_string_manufacturer_name
    00004b38 g     F .text.itcm	00000010 _fnet_malloc
    00001a80 g     F .text.itcm	00000044 fnet_service_register
    000000dc g     F .text.itcm	0000007c handleLinkStatus(bool)
    0000b8ac g     F .text.itcm	00000010 malloc
    00004bc0 g     F .text.itcm	00000028 _fnet_netif_drain
    20001308 g     O .data	000000c8 __mprec_tens
    60001fa8 g     F .text.code	000000ec usb_init
    00000758  w    F .text.itcm	0000002c EthernetClient::~EthernetClient()
    000065d4 g     F .text.itcm	00000010 fnet_memset_zero
    00005858 g     F .text.itcm	0000005c fnet_socket_close
    20050e40 g     O .bss	00000004 __malloc_top_pad
    20050f18 g     O .bss	00000004 systick_safe_read
    0000370c g     F .text.itcm	00000018 _fnet_ip4_release
    00004de0 g     F .text.itcm	00000016 fnet_netif_get_ip4_addr_type
    aaaaaaaf g       *ABS*	00000000 _flexram_bank_config
    20001404 g     O .data	00000000 .hidden __dso_handle
    00004b4c g     F .text.itcm	00000020 _fnet_malloc_zero
    0000ebb8 g     F .text.itcm	0000001c _localeconv_r
    00005c58 g     F .text.itcm	00000110 fnet_socket_setopt
    600028bf g     O .text.progmem	00000001 _serialEvent6_default
    0000edfc g     F .text.itcm	00000012 __i2b
    20000000 g       .data	00000000 _sdata
    60002864 g     O .text.progmem	0000004b usb_config_descriptor_480
    0000b4fc g     F .text.itcm	000002e2 .hidden __udivmoddi4
    0000c3b4 g     F .text.itcm	00000024 _sbrk_r
    00005f7c g     F .text.itcm	000000c8 fnet_socket
    000064c0 g     F .text.itcm	00000102 fnet_memcpy
    60001400 g     F .text.code	00000278 ResetHandler
    00001170 g     F .text.itcm	00000016 object_queue_add
    0000a4dc g     F .text.itcm	00000020 usb_serial_getchar
    000040bc g     F .text.itcm	0000004c _fnet_isr_handler
    20053280 g     O .bss	00000008 usb_cdc_line_coding
    00004c68 g     F .text.itcm	00000030 fnet_netif_is_initialized
    00001b14 g     F .text.itcm	00000024 _fnet_dhcp_add_option
    20050a88 g     O .bss	00000004 EventResponder::lastYield
    60001690 g     F .text.code	00000040 __int_power_button()
    0000a62c  w    F .text.itcm	0000001c Print::write(char const*)
    000062e8 g     F .text.itcm	00000016 fnet_socket_addr_is_unspecified
    60001730 g     F .text.code	00000014 arm_reset()
    20051000 g     O .bss	00000010 extmem_smalloc_pool
    20001614 g     O .data	00000024 fnet_tcp_prot_if
    20050e3c g     O .bss	00000004 __malloc_max_sbrked_mem
    00003cf4 g     F .text.itcm	00000280 _fnet_ip4_output
    00004ad0 g     F .text.itcm	00000036 _fnet_netbuf_queue_del
    200004c0 g     O .data	00000006 fnet_eth_broadcast
    00006488 g     F .text.itcm	0000001c _fnet_stack_mutex_lock
    0000a9c8 g     F .text.itcm	00000174 Print::printFloat(double, unsigned char)
    0000429c g     F .text.itcm	00000014 fnet_isr_init
    0000080c g     F .text.itcm	000003e8 EthernetServer::tcp_poll(void*)
    60021000 g     O .text.csf	00000c00 hab_csf
    00005d68 g     F .text.itcm	000001bc fnet_socket_getopt
    20280000 g       .text.csf	00000000 _heap_end
    00004490 g     F .text.itcm	00000098 _fnet_netbuf_new
    0000f424 g       .ARM.exidx	00000000 __exidx_start
    70000000 g       .bss.extram	00000000 _extram_end
    00004ba4 g     F .text.itcm	0000000c _fnet_malloc_max
    00004dd4 g     F .text.itcm	0000000c _fnet_netif_get_default
    20050a8c g     O .bss	00000004 EventResponder::firstYield
    20001184 g     O .data	00000004 _global_impure_ptr
    000047f0 g     F .text.itcm	00000044 _fnet_netbuf_free_chain
    000024b4 g     F .text.itcm	00000028 fnet_dhcp_cln_get_options
    0000bfd4 g     F .text.itcm	000003de _realloc_r
    0000b85c g     F .text.itcm	00000050 __libc_init_array
    00004920 g     F .text.itcm	0000015e _fnet_netbuf_cut_center
    00004d6c g     F .text.itcm	0000001e fnet_netif_set_ip4_addr
    200013d0 g     O .data	00000028 __mprec_bigtens
    00004e14 g     F .text.itcm	00000030 _fnet_netif_get_hw_addr
    00003604 g     F .text.itcm	00000044 _fnet_ip4_route
    0000ab74  w    F .text.itcm	00000004 usb_serial_class::clear()
    00009504 g     F .text.itcm	00000030 _sbrk
    60011cf0 g       *ABS*	00000000 _sdataload
    0000f090 g     F .text.itcm	00000042 __mcmp
    60001794 g     F .text.code	000001f4 flexRamInfo()
    20050e70 g     O .bss	00000004 channel_strip_master_section_right_read
    00003694 g     F .text.itcm	00000034 _fnet_ip4_input
    20001664 g     O .data	00000004 __brkval
    200509e8 g     O .bss	00000001 usb_cdc_line_rtsdtr
    200015ec g     O .data	00000024 fnet_raw_prot_if
    60002704 g     F .text.code	00000000 _init
    0000a220 g     F .text.itcm	00000002 usb_serial_reset
    000041e4 g     F .text.itcm	00000010 fnet_isr_lock
    600016d0 g     F .text.code	00000060 set_arm_power_button_callback(void (*)())
    20000484 g     O .data	00000038 fnet_fec_api
    0000a7fc g     F .text.itcm	0000000c IRQHandler_Serial8
    60002818 g     O .text.progmem	0000004b usb_config_descriptor_12
    60001744 g     F .text.code	00000050 progInfo()
    000043f0 g     F .text.itcm	00000042 _fnet_mempool_free_mem_status
    20050e74 g     O .bss	00000004 meter_display_section_read
    000056c8 g     F .text.itcm	000000f8 _fnet_socket_lookup
    200532c0 g       .bss	00000000 _ebss
    200017bc g     O .data	00000060 Serial3
    00004108 g     F .text.itcm	00000044 _fnet_isr_vector_init
    0000561c g     F .text.itcm	00000028 _fnet_socket_list_del
    00004be8 g     F .text.itcm	00000030 _fnet_netif_get_by_sockaddr
    000042f8 g     F .text.itcm	0000007c _fnet_mempool_free
    00005980 g     F .text.itcm	00000108 fnet_socket_accept
    0000b0cc g     F .text.itcm	00000020 HardwareSerial::availableForWrite()
    00004c98 g     F .text.itcm	000000d4 _fnet_netif_set_ip4_addr
    00008820 g     F .text.itcm	0000000c fnet_timer_get_ms
    0000ed60 g     F .text.itcm	00000040 __hi0bits
    00001188 g     F .text.itcm	00000024 object_queue_del
    60002688 g     F .text.code	00000002 CrashReportClass::clear()
    20203060 g       .bss.dma	00000000 _heap_start
    00000bf4  w    F .text.itcm	00000010 EthernetClass::link_callback(void*, fnet_bool_t, void*)
    0000623c g     F .text.itcm	00000078 _fnet_socket_buffer_read_address
    00006618 g     F .text.itcm	00000024 fnet_rand
    00005104 g     F .text.itcm	0000003c _fnet_prot_release
    2004f1d4 g     O .bss	00000004 EthernetClass::_handleNoDHCP
    000058b4 g     F .text.itcm	00000050 fnet_socket_shutdown
    00002bf0 g     F .text.itcm	0000002e _fnet_checksum_pseudo_netbuf_start
    20001694 g     O .data	00000004 CrashReport
    00000002 g       *ABS*	00000000 _itcm_block_count
    0000b27c g     F .text.itcm	000000d2 HardwareSerial::write9bit(unsigned long)
    00005c44 g     F .text.itcm	00000012 fnet_socket_recv
    2000ef54 g     O .bss	0000005c testSocket1
    20052000 g     O .bss	00000020 endpoint0_transfer_data
    0000ab4c g     F .text.itcm	00000004 operator delete(void*, unsigned int)
    0000ad04 g     F .text.itcm	000002b8 pwm_init
    00002904 g     F .text.itcm	000000a4 _fnet_arp_send_request
    00005060 g     F .text.itcm	00000010 _fnet_netif_signal_ip4_addr_conflict
    0000b1a4 g     F .text.itcm	0000001a HardwareSerial::flush()
    00002f1c g     F .text.itcm	00000044 _fnet_eth_multicast_join_ip4
    60001e28 g     F .text.code	00000064 usb_pll_start
    0000ef40 g     F .text.itcm	000000a0 __pow5mult
    20000814 g     O .data	0000000c vtable for CrashReportClass
    000042b0 g     F .text.itcm	0000003e _fnet_mempool_init
    000055d0 g     F .text.itcm	00000014 _fnet_socket_init
    000029a8 g     F .text.itcm	0000009c _fnet_arp_resolve
    00001928 g     F .text.itcm	00000094 fnet_fec_multicast_join
    00003418 g     F .text.itcm	0000004c _fnet_ip_queue_append
    00000000  w      *UND*	00000000 __deregister_frame_info
    20052020 g     O .bss	00000020 endpoint0_transfer_ack
    20053288 g     O .bss	00000004 usb_cdc_line_rtsdtr_millis
    00009e44 g     F .text.itcm	00000028 usb_transmit
    0000a648  w    F .text.itcm	00000024 Print::println(char const*)
    00004ab8 g     F .text.itcm	00000016 _fnet_netbuf_queue_add
    000045b4 g     F .text.itcm	00000034 _fnet_netbuf_free
    0000a6cc g     F .text.itcm	00000020 systick_isr
    00006300 g     F .text.itcm	0000000c fnet_socket_addr_are_equal
    0000642c g     F .text.itcm	0000000e fnet_poll
    00006340 g     F .text.itcm	000000ec fnet_init
    00002fb8 g     F .text.itcm	0000003a _fnet_eth_is_connected
    20001c58 g     O .data	00000010 Serial
    0000a6f0 g     F .text.itcm	0000000c IRQHandler_Serial1
    0000581c g     F .text.itcm	0000003c _fnet_socket_copy
    00005070 g     F .text.itcm	00000014 fnet_netif_get_scope_id
    20001158 g     O .data	0000002c vtable for HardwareSerial
    000036c8 g     F .text.itcm	00000044 _fnet_ip4_drain
    0000ab94  w    F .text.itcm	00000006 usb_serial_class::write(unsigned char)
    00008e28 g     F .text.itcm	00000020 startup_early_hook
    0000a418 g     F .text.itcm	00000044 usb_serial_peekchar
    0000a748 g     F .text.itcm	0000000c IRQHandler_Serial3
    00000754  w    F .text.itcm	00000004 EthernetClient::peek()
    0000ebe0 g     F .text.itcm	00000000 memchr
    00005140 g     F .text.itcm	00000044 _fnet_prot_find
    00008f7c g     F .text.itcm	000002c4 set_arm_clock
    20050848 g     O .bss	00000004 systick_cycle_count
    2000167c g     O .data	00000016 usb_string_serial_number_default
    0000e9e8 g     F .text.itcm	000001d0 _free_r
    00004e44 g     F .text.itcm	00000020 fnet_netif_get_hw_addr
    20050e78 g     O .bss	00000006 diginet_rx_address
    0000133c g     F .text.itcm	0000000c fnet_cpu_isr
    0000ab84  w    F .text.itcm	00000004 usb_serial_class::flush()
    00002394 g     F .text.itcm	000000dc fnet_dhcp_cln_init
    2004f1bc g     O .bss	00000004 ServiceLooped
    20001408 g     O .data	00000008 EthernetClass::_fnet_poll
    00000c04 g     F .text.itcm	00000004 EthernetClass::teensy_mutex_init(void**)
    0000a790 g     F .text.itcm	0000000c IRQHandler_Serial5
    20002614 g     O .data	00000004 __malloc_sbrk_base
    0000ab7c  w    F .text.itcm	00000004 usb_serial_class::read()
    0000469c g     F .text.itcm	00000154 _fnet_netbuf_copy
    00004434 g     F .text.itcm	0000005a _fnet_mempool_malloc_max
    00006318 g     F .text.itcm	00000026 _fnet_socket_addr_route
    0000efe0 g     F .text.itcm	000000ae __lshift
    00009e14 g     F .text.itcm	0000002e usb_prepare_transfer
    00009370 g     F .text.itcm	00000190 unused_interrupt_vector
    0000f2a4 g     F .text.itcm	00000100 __ssprint_r
    20050868 g     O .bss	00000004 usb_timer0_callback
    60001e8c g     F .text.code	0000011c tempmon_init
    20050e80 g     O .bss	00000006 diginet_host_address
    0000ab5c  w    F .text.itcm	00000002 serialEvent4()
    0000f3a4 g     F .text.itcm	0000005e _vasnprintf_r
    0000b4bc  w    F .text.itcm	00000002 serialEvent()
    2000110c g     O .data	0000000c vtable for IPAddress
    000055fc g     F .text.itcm	00000020 _fnet_socket_list_add
    0000dafc g     F .text.itcm	000000a4 __register_exitproc
    00002c20 g     F .text.itcm	0000002e _fnet_checksum_pseudo_netbuf_end
    000007d8  w    F .text.itcm	00000034 EthernetClient::~EthernetClient()
    00003724 g     F .text.itcm	0000005c _fnet_ip4_multicast_join
    0000a468 g     F .text.itcm	00000074 usb_serial_flush_input
    00000750  w    F .text.itcm	00000004 EthernetClient::read()
    600028bd g     O .text.progmem	00000001 _serialEvent4_default
    0000ee10 g     F .text.itcm	00000130 __multiply
    0000a4fc g     F .text.itcm	0000002c usb_serial_putchar
    00000025 g       *ABS*	00000000 _teensy_model_identifier
    0000a6fc  w    F .text.itcm	0000000e HardwareSerial::~HardwareSerial()
    20050e44 g     O .bss	00000028 __malloc_current_mallinfo
    0000f1e8 g     F .text.itcm	000000ba __d2b
    200004bc g     O .data	00000004 fnet_dhcp_magic_cookie
    20050e14 g     O .bss	00000020 HardwareSerial::s_serials_with_serial_events
    00000758  w    F .text.itcm	0000002c EthernetClient::~EthernetClient()
    2004f1cc g     O .bss	00000008 DNSClient::nullAddress
    000096dc g     F .text.itcm	0000066c usb_isr
    0000b844 g     F .text.itcm	0000000c __cxa_atexit
    00002bd0 g     F .text.itcm	0000001e _fnet_checksum_netbuf
    00004df8 g     F .text.itcm	0000001a fnet_netif_set_ip4_addr_type
    00006470 g     F .text.itcm	00000018 _fnet_mutex_unlock
    600028bc g     O .text.progmem	00000001 _serialEvent3_default
    20001128  w    O .data	00000030 vtable for usb_serial_class
    00004548 g     F .text.itcm	0000006a _fnet_netbuf_to_buf
    20001a6c g     O .data	00000060 Serial6
    20050e88 g     O .bss	00000004 surround_panner_section_read
    00002a60 g     F .text.itcm	0000002a _fnet_arp_drain
    00002f8c g     F .text.itcm	0000002a _fnet_eth_phy_write
    2005084c g     O .bss	00000004 scale_cpu_cycles_to_microseconds
    000000cc  w    F .text.itcm	0000000e EthernetServer::~EthernetServer()
    0000b7e0  w    F .text.itcm	00000002 .hidden __aeabi_ldiv0
    0000ab6c  w    F .text.itcm	00000002 serialEvent8()
    00005f24 g     F .text.itcm	00000026 _fnet_socket_buffer_release
    600028ba g     O .text.progmem	00000001 _serialEvent1_default
    20001588 g     O .data	00000034 fnet_fec0_if
    20002208 g     O .data	00000408 __malloc_av_
    0000a58c g     F .text.itcm	000000a0 usb_serial_flush_output
    60001678 g     F .text.code	00000018 arm_power_down()
    0000bfcc g     F .text.itcm	00000002 __malloc_lock
    00004a80 g     F .text.itcm	00000038 _fnet_netbuf_concat
    20051400 g     O .bss	000002c0 _VectorsRam
    00005b58 g     F .text.itcm	00000012 fnet_socket_send
    000050a8 g     F .text.itcm	0000005c _fnet_prot_init
    0000b7e4 g     F .text.itcm	0000005e _calloc_r
    00005034 g     F .text.itcm	0000002c _fnet_netif_release_all
    00004528 g     F .text.itcm	00000020 _fnet_netbuf_from_buf
    00002c9c g     F .text.itcm	0000000c fnet_error_set
    20001c68 g     O .data	00000001 yield_active_check_flags
    20050878 g     O .bss	00000001 usb_high_speed
    00000084  w    F .text.itcm	00000002 EthernetServer::~EthernetServer()
    000057c0 g     F .text.itcm	0000005c _fnet_socket_get_uniqueport
    0000bf30 g     F .text.itcm	0000009a memset
    00002e0c g     F .text.itcm	00000032 _fnet_eth_change_addr_notify
    0000ab3c g     F .text.itcm	00000010 main
    20050e98 g     O .bss	00000078 fnet_ip4_multicast_list
    0000183c g     F .text.itcm	000000ec fnet_fec_output
    20050e38 g     O .bss	00000004 __malloc_max_total_mem
    00000088  w    F .text.itcm	0000003e EthernetServer::write(unsigned char)
    00002dd0 g     F .text.itcm	00000024 _fnet_eth_init
    00002e08 g     F .text.itcm	00000004 _fnet_eth_drain
    20200000 g     O .bss.dma	0000004b usb_descriptor_buffer
    2004f1c0 g     O .bss	00000004 EthernetLooped
    00009e94 g     F .text.itcm	00000058 usb_init_serialnumber
    600027e4 g       .text.code	00000000 __init_array_end
    0000dcc8 g     F .text.itcm	00000c84 _dtoa_r
    0000b8cc g     F .text.itcm	00000570 _malloc_r
    20050e34 g     O .bss	00000001 HardwareSerial::s_count_serials_with_serial_events
    0000dab4 g     F .text.itcm	0000001a __ascii_wctomb
    000053cc g     F .text.itcm	00000188 _fnet_raw_input
    2000f1b8 g     O .bss	00000004 seconds
    20050e8c g     O .bss	00000004 channel_strip_master_section_left_read
    2000152c g     O .data	0000005c fnet_cpu_eth0_if
    0000930c g     F .text.itcm	00000064 micros
    00003658 g     F .text.itcm	0000003a _fnet_ip4_set_socket_addr
    000062d4 g     F .text.itcm	00000012 _fnet_socket_addr_is_broadcast
    00003fe4 g     F .text.itcm	000000d6 _fnet_ip4_setsockopt
    00000ca4 g     F .text.itcm	00000034 EthernetClass::setIP(IPAddress, IPAddress)
    0000e94c g     F .text.itcm	0000009c _malloc_trim_r
    60002814 g     O .text.progmem	00000004 string0
    0000a528 g     F .text.itcm	00000018 usb_serial_write
    20050e90 g     O .bss	00000004 timecode_section_read
    00004918 g     F .text.itcm	00000008 _fnet_netbuf_trim
    00009500  w    F .text.itcm	00000002 startup_late_hook
    00008804 g     F .text.itcm	0000001c _fnet_timer_release
    0000ab80  w    F .text.itcm	00000004 usb_serial_class::available()
    600028c2 g     O .text.progmem	00000001 _serialEvent_default
    0000887c g     F .text.itcm	00000012 fnet_timer_poll
    20053000 g     O .bss	00000280 endpoint_queue_head
    600027e4  w    O .text.progmem	00000016 usb_string_product_name
    000061f0 g     F .text.itcm	0000004a _fnet_socket_buffer_read_record
    00009240 g     F .text.itcm	000000cc delay
    00002470 g     F .text.itcm	0000000e fnet_dhcp_cln_release
    0000414c g     F .text.itcm	0000003c fnet_event_init
    0000f420 g     F .fini	00000000 _fini
    00006044 g     F .text.itcm	00000114 fnet_socket_bind
    00003464 g     F .text.itcm	00000034 _fnet_ip_queue_read
    60001020 g     O .text.headers	0000000c BootData
    00000c28 g     F .text.itcm	00000002 EthernetClass::teensy_mutex_lock(void**)
    00005a88 g     F .text.itcm	000000d0 fnet_socket_sendto
    0000a910 g     F .text.itcm	0000001e Print::printf(char const*, ...)
    0000a9b0 g     F .text.itcm	00000016 Print::print(long)
    00009534 g     F .text.itcm	00000004 Panic_Temp_isr
    00004f70 g     F .text.itcm	00000020 fnet_netif_init
    00008890 g     F .text.itcm	00000040 _fnet_timer_new
    00002ff4 g     F .text.itcm	000000fc _fnet_eth_phy_init
    0000dad0 g     F .text.itcm	0000002c _write_r
    00000d04 g     F .text.itcm	00000128 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)
    00002c90 g     F .text.itcm	0000000c fnet_error_get
    20002098 g     O .data	00000004 _impure_ptr
    00002d5c g     F .text.itcm	00000074 _fnet_eth_output
    000024dc g     F .text.itcm	00000020 fnet_dhcp_cln_set_callback_updated
    00000c30 g     F .text.itcm	0000002e EthernetClass::setIP(IPAddress, IPAddress, IPAddress, IPAddress)
    0000663c g     F .text.itcm	00000010 fnet_srand
    0000a858 g     F .text.itcm	0000005c IntervalTimer::end()
    00002f60 g     F .text.itcm	0000002a _fnet_eth_phy_read
    00006194 g     F .text.itcm	0000005c _fnet_socket_buffer_append_address
    600027b0 g       .text.code	00000000 __preinit_array_end
    6000211c g     F .text.code	0000056c CrashReportClass::printTo(Print&) const
    0000be3c g     F .text.itcm	0000002a __ascii_mbtowc
    00000c2c g     F .text.itcm	00000002 EthernetClass::teensy_mutex_release(void**)
    0000b354 g     F .text.itcm	00000166 HardwareSerial::IRQHandler()
    00000524 g     F .text.itcm	000000a4 setup
    200007a8 g     O .data	0000006c usb_descriptor_list
    2004f1de g     O .bss	00000001 EthernetClass::dhcp_retransmission_count
    0000ab70  w    F .text.itcm	00000002 usb_serial_class::~usb_serial_class()
    00000080  w    F .text.itcm	00000002 Print::flush()
    000088d0 g     F .text.itcm	0000002c _fnet_timer_free
    000011b4 g     F .text.itcm	00000004 fnet_htonl
    00004b6c g     F .text.itcm	0000001c fnet_free_mem_status
    00004248 g     F .text.itcm	00000054 fnet_event_raise
    00004e64 g     F .text.itcm	0000004e _fnet_netif_set_hw_addr
    20070000 g       .text.csf	00000000 _estack
    0000a540 g     F .text.itcm	0000004c usb_serial_write_buffer_free
    2000efb0 g     O .bss	00000004 loopCounter
    000005e8 g     F .text.itcm	00000124 EthernetClient::tcp_client_poll(EthernetClient*)
    0000ab68  w    F .text.itcm	00000002 serialEvent7()
    00000784  w    F .text.itcm	00000052 EthernetClient::write(unsigned char const*, unsigned int)
    600028c1 g     O .text.progmem	00000001 _serialEvent8_default
    000011ac g     F .text.itcm	00000006 fnet_htons
    0000a224 g     F .text.itcm	00000108 usb_serial_configure
    0000a900  w    F .text.itcm	0000000e _write
    20002618 g       .data	00000000 _edata
    000055e4 g     F .text.itcm	00000018 _fnet_socket_set_error
    0000630c g     F .text.itcm	0000000a _fnet_socket_addr_copy
    2004f1e0 g     O .bss	00000004 EthernetClass::_handleLinkStatus
    20001bf4 g     O .data	00000060 Serial8
    20050854 g     O .bss	00000001 external_psram_size
    00004c18 g     F .text.itcm	00000050 _fnet_netif_release
    00004ffc g     F .text.itcm	00000018 fnet_netif_is_connected
    00000158  w    F .text.itcm	00000052 EthernetServer::write(unsigned char const*, unsigned int)
    0000ab88  w    F .text.itcm	00000004 usb_serial_class::availableForWrite()
    0000b23c g     F .text.itcm	00000040 nvic_execution_priority()
    000064a4 g     F .text.itcm	0000001c _fnet_stack_mutex_unlock
    0000acb4 g     F .text.itcm	0000004e ultoa
    00002778 g     F .text.itcm	00000040 fnet_arp_get_mac
    00002c50 g     F .text.itcm	00000040 _fnet_diginet_input
    000026c4 g     F .text.itcm	00000060 _fnet_arp_init
    0000a76c g     F .text.itcm	0000000c IRQHandler_Serial4
    0000643c g     F .text.itcm	0000001c _fnet_mutex_init
    000065e4 g     F .text.itcm	00000032 fnet_memcmp
    00001ac4 g     F .text.itcm	00000018 fnet_service_unregister
    0000a684 g     F .text.itcm	00000044 EventResponder::runFromInterrupt()
    20002610 g     O .data	00000004 __malloc_trim_threshold
    0000ab78  w    F .text.itcm	00000004 usb_serial_class::peek()
    000002d8 g     F .text.itcm	00000104 handleDHCPConnected()
    000041f4 g     F .text.itcm	00000054 fnet_isr_unlock
    00005014 g     F .text.itcm	00000020 fnet_netif_set_callback_on_ip4_addr_conflict
    0000f0d4 g     F .text.itcm	00000114 __mdiff
    00003498 g     F .text.itcm	00000040 _fnet_ip_setsockopt
    2004f1f4 g     O .bss	00000004 EthernetClass::_handleDHCPConnected
    0000b114 g     F .text.itcm	00000090 HardwareSerial::read()
    00000c60 g     F .text.itcm	00000044 EthernetClass::setIP(IPAddress, IPAddress, IPAddress)
    00005084 g     F .text.itcm	00000024 _fnet_netif_get_by_scope_id
    00000e54 g     F .text.itcm	000000a0 EthernetClass::startDHCP(void (*)(), void (*)(), unsigned long, unsigned char)
    00000710  w    F .text.itcm	0000003e EthernetClient::write(unsigned char)
    0000a66c  w    F .text.itcm	00000018 Print::println(unsigned long, int)
    00004f90 g     F .text.itcm	0000000c _fnet_netif_join_ip4_multicast
    600028bb g     O .text.progmem	00000001 _serialEvent2_default
    00004374 g     F .text.itcm	0000007c _fnet_mempool_malloc
    200018e4 g     O .data	00000060 Serial4
    200011f0 g     O .data	00000101 _ctype_
    00005184 g     F .text.itcm	00000038 _fnet_prot_drain
    000065c4 g     F .text.itcm	0000000e fnet_memset
    00000cd8 g     F .text.itcm	0000002c EthernetClass::setIP(IPAddress)
    00000c08 g     F .text.itcm	00000002 EthernetClass::teensy_mutex_unlock(void**)
    600027b0 g       .text.code	00000000 __init_array_start
    0000b7e0  w    F .text.itcm	00000002 .hidden __aeabi_idiv0
    6000268c g     F .text.code	00000020 CrashReportClass::operator bool()
    2000165c g     O .data	00000004 F_BUS_ACTUAL
    00002a44 g     F .text.itcm	0000001a fnet_arp_send_request
    0000ab9c  w    F .text.itcm	0000000e usb_serial_class::~usb_serial_class()
    000042f0 g     F .text.itcm	00000006 _fnet_mempool_release
    000024fc g     F .text.itcm	00000020 fnet_dhcp_cln_set_callback_discover
    00000000 g       .text.itcm	00000000 _stext
    000019bc g     F .text.itcm	0000007c fnet_fec_multicast_leave
    20001c54 g     O .data	00000004 IntervalTimer::nvic_priorites
    0000c400 g     F .text.itcm	000000dc strlen
    00001afc g     F .text.itcm	0000000c fnet_service_mutex_lock
    20001b30 g     O .data	00000060 Serial7
    00004834 g     F .text.itcm	000000e4 _fnet_netbuf_pullup
    000087e8 g     F .text.itcm	0000001c _fnet_timer_init
    2000017c  w    O .data	0000002c vtable for EthernetClient
    00005b6c g     F .text.itcm	000000d8 fnet_socket_recvfrom
    00004dbc g     F .text.itcm	00000018 fnet_netif_get_default
    00000c1c  w    F .text.itcm	0000000c IntervalTimer::~IntervalTimer()
    600027e4 g     O .text.progmem	00000016 usb_string_product_name_default
    0000da9c g     F .text.itcm	00000018 vdprintf
    000001ac g     F .text.itcm	0000012c handleNoDHCP()
    00000084  w    F .text.itcm	00000002 EthernetServer::~EthernetServer()
    200015c4 g     O .data	00000024 fnet_icmp4_prot_if
    60001988 g     F .text.code	000000e4 configure_cache
    0000251c g     F .text.itcm	00000010 fnet_dhcp_cln_set_response_timeout
    0000273c g     F .text.itcm	0000003c _fnet_arp_lookup
    2005083c g     O .bss	00000004 _fnet_timer_api
    00003f74 g     F .text.itcm	00000006 _fnet_ip4_maximum_packet
    00004bb4 g     F .text.itcm	0000000c _fnet_mem_release
    00000000  w      *UND*	00000000 _Jv_RegisterClasses
    600027b0 g       .text.code	00000000 __preinit_array_start
    00009e6c g     F .text.itcm	00000024 usb_receive
    00003780 g     F .text.itcm	00000012 _fnet_ip4_multicast_leave_entry
    20050e94 g     O .bss	00000004 soft_keys_section_read
    0000eda0 g     F .text.itcm	0000005a __lo0bits
    00004188 g     F .text.itcm	0000005c fnet_isr_unregister
    000152dc g       *ABS*	00000000 _flashimagelen
    00004b48 g     F .text.itcm	00000004 _fnet_malloc_netbuf
    600028be g     O .text.progmem	00000001 _serialEvent5_default
    0000ab58  w    F .text.itcm	00000002 serialEvent3()
    0000b4c0 g     F .text.itcm	0000000a __aeabi_atexit
    00004b88 g     F .text.itcm	0000001c fnet_malloc_max
    00000000  w      *UND*	00000000 __register_frame_info
    0000afbc g     F .text.itcm	00000030 rtc_get
    0000070c  w    F .text.itcm	00000004 EthernetClient::available()
    70000000 g       .bss.extram	00000000 _extram_start
    0000a6c8 g     F .text.itcm	00000004 pendablesrvreq_isr
    0000007c  w    F .text.itcm	00000004 Print::availableForWrite()
    2000209c g     O .data	0000016c __global_locale
    000034d8 g     F .text.itcm	0000003a _fnet_ip_getsockopt
    00005f4c g     F .text.itcm	00000030 _fnet_socket_release
    0000a7d8 g     F .text.itcm	0000000c IRQHandler_Serial7
    0000a32c g     F .text.itcm	000000ec usb_serial_read
    0000a930 g     F .text.itcm	0000007e Print::printNumber(unsigned long, unsigned char, unsigned char)
    00004f9c g     F .text.itcm	0000000c _fnet_netif_leave_ip4_multicast
    00009dac g     F .text.itcm	00000068 usb_config_tx
    00000f08 g     F .text.itcm	00000250 EthernetClass::dhcp_cln_callback_updated(void*, void*, void*)
    0000b8bc g     F .text.itcm	00000010 free
    0000ece0 g     F .text.itcm	00000080 __multadd
    0000eccc g     F .text.itcm	00000012 _Bfree
    2000175c g     O .data	00000060 Serial2
    2000167c  w    O .data	00000016 usb_string_serial_number

  10. #10
    Senior Member
    Join Date
    Apr 2014
    Location
    Germany
    Posts
    9,443
    hm, there is no tcp_ptr mentioned :-(

  11. #11
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    It's a variable in this function here
    Code:
    000005e8 g     F .text.itcm	00000124 EthernetClient::tcp_client_poll(EthernetClient*)
    
    void EthernetClient::tcp_client_poll(EthernetClient *client){
      if(client == NULL) return;
    
      EthernetClient* tcp_ptr = client;

  12. #12
    Senior Member
    Join Date
    Apr 2014
    Location
    Germany
    Posts
    9,443
    Quote Originally Posted by vjmuzik View Post
    It's a variable in this function here
    Oh.. it's on the stack, then.. difficult.. yes, in this case the map does not help.

    Is "client" valid in any case? Sorry, I don't think I can help much..

  13. #13
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    It should be valid, it's at least valid thousands of times besides the one that causes the crash.

  14. #14
    Senior Member
    Join Date
    Apr 2014
    Location
    Germany
    Posts
    9,443
    Could be an issue with an interrupt, too..

  15. #15
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    I think you might've been right, it hasn't crashed yet after more than 100,000 successful connections, this has been giving me a headache all day and it's about the only thing I haven't tried to do to fix this. I'll do more testing tomorrow though it does appear to be solved so far, I'll have to remember to try turning interrupts off and on next time I run into random issues like this. Outside of benchmarking I don't expect to see a Teensy server ever serve that many clients in such a short time so I'm happy to be past this issue and continue scratching my head over other problems.

  16. #16
    Senior Member
    Join Date
    May 2015
    Location
    USA
    Posts
    1,085
    The compiler can sometimes help. See my comments here:

    https://forum.pjrc.com/threads/67377-Firmware-quality

    If it's a rare but random problem, I wouldn't ignore the issue.

    Be careful with disabling interrupts - various code relies on them. And lots of teensy code turns them back on.

    In #7, I see use of "new" without checking that it succeeded.
    Last edited by jonr; 08-18-2021 at 02:56 PM.

  17. #17
    Senior Member vjmuzik's Avatar
    Join Date
    Apr 2017
    Posts
    833
    I wrapped the function in noInterrupts()/interrupts() so itís not completely disabled, I at least know not to do that.

    There is no check on the new since it will never fail there, itís a placement new operator so itís using preallocated memory. Youíll notice right above it that that is where the memory is allocated and checked for validity, right now I have it that if it fails itíll just lock up so I can definitively see it.
    Code:
                  uint8_t* new_client_memory = (uint8_t*) _fnet_malloc_netbuf(sizeof(EthernetClient));
                  if(!new_client_memory){
                    while(1){
                      Serial.println("Failed to allocate client!");
                      delay(1000);
                    }
                  }
                  EthernetClient* new_client = new (new_client_memory) EthernetClient(accepted_socket);

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •