582M死机

使用2线仿真进行调试。 发现代码卡死在了 ADC读取中。

image.png


在论坛里面翻了翻帖子。 发现有人回复过,

https://www.wch.cn/bbs/thread-81569-1.html

原因是在中断里面使用ADC会与其他正在使用ADC的代码进行冲突。


我现在项目需要在中断里面采集adc。 有什么办法可以解决这个问题吗。


以前的项目也有在中断里面采集adc,没有使用蓝牙功能 , 没有出现过死机的情况,蓝牙会有影响的吗?



既然使用蓝牙功能,可以尝试写一个TMOS任务来管理ADC数据采集,验证是否可行。


我的应用场景是 

100us的中断,每200次中断,需要采集一次adc数据进行计算。

没法将adc采集放到tmos任务里面。


如果我一定需要在中断里面进行adc采集, 该如何避免死机呢?

温度校准那里是多久调用一次呢? 一次需要多久呢? 使用原子操作对中断的精度影响大吗。


1、在中断里置标志,达到一定的条件则开始执行该TMOS任务;

2、执行开始前关闭全局中断,结束后开全局中断;

3、温度校准是TMOS管理的,两分钟执行一次校准。



温度校准:

断点1:

    R8_ADC_CONVERT |= RB_ADC_START;

断点2:

    while(R8_ADC_CONVERT & RB_ADC_START);


中断中adc采集:

    R8_ADC_CONVERT = RB_ADC_START;

    while(R8_ADC_CONVERT & RB_ADC_START);


断点1时进入中断,不影响.


如果在断点2进入了中断,中断里面进行adc采集. 

RB_ADC_START 会在为1的状态下,再次设置为1.  应该没影响.

中断里面获取到的adc数据应该是温度校准的adc数据吧.

中断退出后,回到断点2,应该会再拿一次温度校准的adc数据.

这个过程,应该不会出现 卡死在 while中的情况呀.


我现在跑的项目 却是会卡死在while里面. 


请帮忙更详细分析一下  

"中断中使用ADC  与tmos中正进行的ADC采集产生冲突 导致死机"

是在哪一步出现了异常,导致 while无法结束.


顺便问下 .   32k 是使用的是内部RC

这2个校准的 如果不启用,对整个系统的稳定性和精度影响大吗



image.png



只有登录才能回复,可以选择微信账号登录