RT_thread overflow debug记录 问题:main/tshell stack overflow 对于main thread问题出现在rt_hw_stack_init由rt_thread_create和_thread_init调用。 看一下错误判定: 推测sp越界。看一下main thread创建时的参数列表:RT_MAIN_THREAD_STACK_SIZE2048, RT_MAIN_THREAD_PRIORITY10 这里可以看到分配的addr为thread->s...
}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...
问题四、遇到 `_rt_scheduler_stack_check` 也会停止输出 因为`_rt_scheduler_stack_check` 函数最后先关全局中断,然后进入 while 死循环。这个时候串口中断肯定也失效了。 > 应对之策:关全局中断前,先 flush 串口设备。让串口把 “stack overflow” 的提示信息输出完。 问题五、打断点后 `rt_kprintf` 输出不...
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...
{ 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" ...
千锋教育推出的RT-Thread精品课程包含系统移植、内核介绍、线程管理、时钟管理、线程同步、设备使用等RT-Thread核心内容,让想学习和使用实时操作系统的同学更加方便和快捷的学习到实时操作系统的操作和使用。 本章介绍 RT-Thread 内核基础,包括:内核简介、系统的启动流程及内核配置的部分内容,为后面的章节奠定基础。
线程控制块(结构体)rt_thread,使用了内核对象块,是重写的。 看来,还是不要直接改基础的内核控制块。 要改rt_object的结构体大小,其他对象派生的对象,都要注意下。 总结 通过打印rt_object等结构体的大小,了解了rt_object的基本构成。 基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器控制块...
thread: stack overflow 经过调试,发现是线程结构体引起的对齐问题。 看来,还是不要直接改基础的内核控制块。 要改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_...
4、通过RT-thread的内核互斥信号,防止多个线程同时操作同一个串口外设。 通过RT-thread的内核事件信号,实现中断通知线程完成串口发送或接收操作。 5、先做从机程序,在做主机程序,借助从机调主机程序代码。 6、本例使用的是STM32G070RB,串口1供 rt_kprintf()使用。