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...
/* 线程 1 的对象和运行时用到的栈 */staticstructrt_threadthread1;staticrt_uint8_tthread1_stack[512];/* 线程 1 入口 */voidthread1_entry(void*parameter){inti;while(1){for(i=0;i<10;i++){rt_kprintf("%d\n",i);/* 延时 100ms */rt_thread_mdelay(100);}}}/* 线程 2 入口 */vo...
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_scheduler_stack_check` 也会停止输出 因为`_rt_scheduler_stack_check` 函数最后先关全局中断,然后进入 while 死循环。这个时候串口中断肯定也失效了。 > 应对之策:关全局中断前,先 flush 串口设备。让串口把 “stack overflow” 的提示信息输出完。 问题五、打断点后 `rt_kprintf` 输出不...
{ 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" ...
2.这样是不是意味着thread的stack一直被占用? 嗯,是的. 3.帧的长度与帧的超时判定 帧与帧之间的间隔不能小于10个 OStick ,我这边 OStick=1ms . 上面代码中存在几个问题 (2023.05.04): ① 数据过快. stack overflow. ② 单帧超过buffer大小 (UART2_RB_BUFSZ) ...
学习RT-Thread,除了基础的应用,应该花点时间,研究下底层内核的实现方法。 RT-Thread内核,整体代码量不大,很适合研究,后期,打算在这个基础上,开发一些软件包。 之前了解了一点数据结构的知识,主要为结构体、链表。不过感觉没有真正的使用起来。 程序= 数据结构+算法。
thread: stack overflow 经过调试,发现是线程结构体引起的对齐问题。 看来,还是不要直接改基础的内核控制块。 要改rt_object的结构体大小,其他对象派生的对象,都要注意下。 总结 通过打印rt_object等结构体的大小,了解了rt_object的基本构成。 基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器...
/* Check for stack overflow, if configured. */ taskFIRST_CHECK_FOR_STACK_OVERFLOW();taskSECOND_...
cubeMx配置串口4 1、GPIO配置为上拉模式。输出高电平 2、使用DMA传输中断接收通信包 3、注意开串口4的中断,应用串口空闲中断实现不定长通信包接收。 4、通过RT-thread的内核互斥信号,防止多个线程同时操作同一个串口外设。 通过RT-thread的内核事件信号,实现中断通知线程