MCAL - ADC 内存溢出
1. 问题现象
我在日志打印中添加了运行时间,运行时间是按秒来计数的,在打印过程中发现运行时间的值突然异常。
2. 排查
在排查后发现,在执行了3次ADC中断后,该值发生了异常。ADC中断中会将数据写入ADC的结果缓存区。通过map文件可以发现runTime
刚好是在通道组0的结果缓存区后面。我这里配置的ADC通道组为通道数1、连续、线性、采样次数5,因此采样5次后就会停止。采样结果为uint16类型,2个字节,ADC触发3次后,刚好将数据写入runTime内存空间中,这时我发现我设置的内存仅为uint16 buffer[2] = {0}
,因此无法满足实际的空间需求导致内存溢出,破坏了其他数据。
3. 总结
在配置的时候如果修改了ADC的采样通道数、采样次数,切记一定要去检查内存中开辟的缓存区是否能够满足。
通道组缓存空间 = sizeof(uint16)* 采样通道数 * 采样次数