问题:main/tshell stack overflow 对于main thread问题出现在rt_hw_stack_init由rt_thread_create和_thread_init调用。 看一下错误判定: 推测sp越界。看一下main thread创建时的参数列表:RT_MAIN_THREAD_STACK_…
问题四、遇到 `_rt_scheduler_stack_check` 也会停止输出 因为`_rt_scheduler_stack_check` 函数最后先关全局中断,然后进入 while 死循环。这个时候串口中断肯定也失效了。 > 应对之策:关全局中断前,先 flush 串口设备。让串口把 “stack overflow” 的提示信息输出完。 问题五、打断点后 `rt_kprintf` 输出不...
}staticvoidserial_thread_entry(void*parameter){rt_err_tresult;rt_uint8_tc =0;rt_uint8_ti =0, rx_state = SERIAL2_STATE_WAIT_FRAME;rt_device_tserial2 = rt_device_find("uart2");structframe_msgmsg;while(1) {/* 使用信号量触发接收数据 */switch(rx_state) {caseSERIAL2_STATE_WAIT_FRAM...
main thread<1-4086>// <i>Default: 512/*设置main线程的大小*/#defineRT_MAIN_THREAD_STACK_SIZE256// </h>// <h>Debug Configuration// <c1>enable kernel debug configuration// <i>Default: enable kernel debug configuration//#define RT_DEBUG// </c>// <o>enable components initialization debug...
\ | / - RT - Thread Operating System / | \ 4.0.3 build Jan 16 2021 2006 - 2020 Copyright by rt-thread team thread: stack overflow 经过调试,发现是线程结构体引起的对齐问题。 看来,还是不要直接改基础的内核控制块。 要改rt_object的结构体大小,其他对象派生的对象,都要注意下。 总结 通过打印...
thread: stack overflow 经过调试,发现是线程结构体引起的对齐问题。 看来,还是不要直接改基础的内核控制块。 要改rt_object的结构体大小,其他对象派生的对象,都要注意下。 总结 通过打印rt_object等结构体的大小,了解了rt_object的基本构成。 基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器...
线程控制块(结构体)rt_thread,使用了内核对象块,是重写的。 看来,还是不要直接改基础的内核控制块。 要改rt_object的结构体大小,其他对象派生的对象,都要注意下。 总结 通过打印rt_object等结构体的大小,了解了rt_object的基本构成。 基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器控制块...
#ifdef RT_USING_OVERFLOW_CHECK _rt_scheduler_stack_check(to_thread);#endif if (rt_interrupt_...
rt_kprintf("thread:%s stack overflow\n", thread->name); #ifdef RT_USING_FINSH { extern long list_thread(void); list_thread(); } #endif level = rt_hw_interrupt_disable(); while (level); } else if ((rt_uint32_t)thread->sp <= ((rt_uint32_t)thread->stack_addr + 32)) { ...
{ void vApplicationStackOverflowHook(rt_thread_t xTask, signed char* pcTaskName) { while (1); } void vApplicationMallocFailedHook(rt_thread_t xTask, signed char* pcTaskName) { while (1); } void vApplicationIdleHook(void) { // Set task tag in order to have the "IdleTaskHook" ...