UCOS与LWIP使用过程中遇到的问题(1)

硬件环境:F103ZET6,DM9000

软件环境:ucosii,lwip1.4.1

在开发mqtt应用的时候,遇到如下问题:

(1)程序进入 HardFault_Handler ,并且没有什么规律,有时候运行几小时,有时候运行数天才会进入,日志输出lwip的断言错误:Assertion "tcp_write: pbufs on queue => at least one queue non-empty" failed at line 329 in ..\LWIP\lwip-1.4.1\src\core\tcp_out.c

(2)调用过程如下:

UCOS与LWIP使用过程中遇到的问题(1)

 解决过程:

(一)查看堆栈

(1)通过Keil的Register Window查看MSP地址

UCOS与LWIP使用过程中遇到的问题(1)

 (2)打开Memory Window,查看内存

UCOS与LWIP使用过程中遇到的问题(1)

 按照网上查的资料,堆栈内的地址分别为(可能与CPU有关):R0,R1,R2,R3,R12,LR,PC 。在Disassembly中跳转到PC指向的地址,发现提示 OSStartHang 错误。

在网上查OSStartHang错误,都在说同一个问题,就是PendSVHandler中断与ucos中的OSPendSV冲突,检查自己的配置发现没有这个问题。

问题没有解决,继续找原因吧。

(二)怀疑堆栈空间不足

(1)在startup_stm32f10x_hd.s 文件中查看栈区大小为:Stack_Size      EQU     0x00000400

(2)在 .map文件中查看 __initial_sp                             0x2000e5e8   Data           0  startup_stm32f10x_hd.o(STACK)

(3)计算下栈底位置:0x2000e5e8 -  0x00000400 = 0x2000‭E1E8‬

(4)在Memory Window中查看 0x2000‭E1E8‬ ,发现还有很多未使用空间

(5)结果排除栈空间不足的问题

(三)在网上查资料,发现一篇文章,有点启发

UCOS与LWIP使用过程中遇到的问题(1)

 

貌似是因为TCP/IP 任务的优先级较高,在调用过程中出现了任务调度冲突了,自己尝试改一下 。

未完待续......