复杂单片机项目,rtt-nano框架,5路串口,1路spi,2路iic,usb,tmr,adc,大量dma,导致中断服务函数包含了大量内容,比如串口中串口+dma+idle中断,比如串口的tdc中断负责定位发送完毕,比如几乎每个dma都有对应中断,iic中断,spi中断,比如systick中断,比如用tmr实现的微秒级延时+链表组成微秒级定时任务等等,大量的ISR代码导致默认的栈空间被快速占满,结果导致一个极其奇怪的问题:
使用seggerRTT搞定了rtt-nano的msh功能,然后,使用msh指令测试flashdb的tsdb的写入过程中,如果注释掉iic的ISR中断服务函数,就能正常测试;如果不注释保留,那么当反复多次测试写入、打印过程,或者是先执行list_thread指令再执行打印测试,mcu 就死机。删掉iic服务函数就不死机。
最终定位为栈空间不足,扩大16倍到64kB后问题解决。