KEIL5调试watch观察窗口异常:F5刷新时大多数参数数值一致,并且无改变

 

1.  故障发生时软件系统的基本情况:

      单片机STM32F103VC,需要运算处理大量数据,在调试运算程序时,需要加入2000长度的int数组。

程序采用RTX系统,60MH,异常发生时,用的是5个任务,看门狗,运算,ADC,DMA,DAC和串口,LCD和key,595数码管显示。

其中测试数据数组被加入运算任务中。调试仿真全速运行时,运算任务占比最多,任务栈占比8-46%。

      运算任务程序需要运算一段不规则波形(客户要求自适应模式)

2. 故障现象:

  调试时,发现串口输出数据和excel中记录的数据不一致。切换到仿真状态,单步调试,发现index1的数值在函数中任意断点始终是一个值,不发生改变,只有运行到另外断点时,才变为另一个值,而在改变后的断点也始终是这个特定值。

而watch1窗口除UPnum之外,所有的值都是相同数值。

在断点284处,按F5,数值始终是4,(正常应该从1到n-1).

在284前端用printf输出index1到串口,上位机串口窗口显示的index1数值正常。即从1到n-1变化。

RTX调试串口未产生任务栈溢出提示

如图:

    

     

 

3.解决办法:

                   1   把发生故障所在的函数中的大多数局部变量变为全局变量。

                   2 缩小测试用数据量到100.

                   3 保存测试用数据的数组长度缩小到200.

              在这种情况下,仿真测试正常(index1从1到n-1变化),故障消失。

4.  总结:

              以上故障终究是由于加入内存的数据量过大,而且局部变量过多,栈空间不够造成的。

              采取方案:

                   尽可能减少局部变量

                   减少数据量(数据量可以减少到1/2)

                    

         

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值