使用2线仿真进行调试。 发现代码卡死在了 ADC读取中。
在论坛里面翻了翻帖子。 发现有人回复过,
https://www.wch.cn/bbs/thread-81569-1.html
原因是在中断里面使用ADC会与其他正在使用ADC的代码进行冲突。
我现在项目需要在中断里面采集adc。 有什么办法可以解决这个问题吗。
以前的项目也有在中断里面采集adc,没有使用蓝牙功能 , 没有出现过死机的情况,蓝牙会有影响的吗?
使用2线仿真进行调试。 发现代码卡死在了 ADC读取中。
在论坛里面翻了翻帖子。 发现有人回复过,
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个校准的 如果不启用,对整个系统的稳定性和精度影响大吗