void blow_stack(void) { volatile uint32_t *low, *high; unsigned char *area; b(); /* * Destroy the first and last 16 bytes of our stack... Hope it * does not cause problems :) */ area = (unsigned char *)_Thread_Executing->Start.Initial_stack.area; /* Look in the stack checker implementation for this magic offset */ low = (volatile uint32_t *) \ (area + sizeof(Heap_Block) - HEAP_BLOCK_HEADER_SIZE); high = (volatile uint32_t *) (area + _Thread_Executing->Start.Initial_stack.size - 16); low[0] = 0x11111111; low[1] = 0x22222222; low[2] = 0x33333333; low[3] = 0x44444444; high[0] = 0x55555555; high[1] = 0x66666666; high[2] = 0x77777777; high[3] = 0x88888888; rtems_stack_checker_report_usage(); }
static portCHAR *http_generate_platform_stats_page( void ) { portCHAR dynamic_text[ 128 ] = { 0 }; portCHAR headerRow[ 128 ]; rtems_interval elapsed_time = rtems_clock_get_ticks_since_boot() / rtems_clock_get_ticks_per_second(); uint32_t hours; uint32_t minutes; uint32_t seconds; hours = elapsed_time / 3600UL; elapsed_time -= hours * 3600UL; minutes = elapsed_time / 60; elapsed_time -= minutes * 60; seconds = elapsed_time; memset( DYNAMIC_PAGE_CONTENT, 0, sizeof( DYNAMIC_PAGE_CONTENT ) ); /* Update the hit count */ nPageHits++; strncat( DYNAMIC_PAGE_CONTENT, PAGE_HEADER_DYNAMIC, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); snprintf( dynamic_text, sizeof( dynamic_text ), "Page refresh count %d", (int) nPageHits ); strncat( DYNAMIC_PAGE_CONTENT, dynamic_text, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); snprintf( dynamic_text, sizeof( dynamic_text ), "<p>Number of Ethernet Packets (RX: %lu, TX %lu)", stm32f_ethernet_get_num_rx_msg(), stm32f_ethernet_get_num_tx_msg() ); strncat( DYNAMIC_PAGE_CONTENT, dynamic_text, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); snprintf( dynamic_text, sizeof( dynamic_text ), "<p>Uptime: %lu hours, %lu minutes, %lu second", hours, minutes, seconds); strncat( DYNAMIC_PAGE_CONTENT, dynamic_text, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); #ifdef REPORT_STACK_USAGE static uint32_t last_stack_report = 0; if(last_stack_report != minutes) { rtems_stack_checker_report_usage(); last_stack_report = minutes; } #endif snprintf( headerRow, sizeof( headerRow ), "<pre><br>%4s\t%16s\t%8s\t%10s\t%8s", "Name", "Task State", "Stk Addr", "Stk Sz", "rtems_id" ); strncat( (char *) DYNAMIC_PAGE_CONTENT, headerRow, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); strncat( (char *) DYNAMIC_PAGE_CONTENT, "<br>------------------------------------------------------------------------------<br>", sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); /* The list of tasks and their status */ osThreadList( (unsigned char *) ( DYNAMIC_PAGE_CONTENT + strlen( DYNAMIC_PAGE_CONTENT ) ) ); strncat( (char *) DYNAMIC_PAGE_CONTENT, "<br>--------------------------------------------------------------------------</pre></body></html>", sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); return (portCHAR *) DYNAMIC_PAGE_CONTENT; }