在线时间6 小时
UID1833847
ST金币22
蝴蝶豆0
注册时间2017-3-27
该用户从未签到
初级会员
- 最后登录
- 2020-2-22
|
楼主 |
发表于 2017-10-19 12:55:43
|
显示全部楼层
后来找到可能的原因了,想办法提高了复现率;
貌似是两个任务同时使用一个ADC的不同通道造成的,
当两个任务同时采样时,adc转化很快就完成了,在等待adc转化结束的while里面会一直等待,导致低于这个优先级的任务会一直堵死而高优先级的任务任然能运行;
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
res = ADC_GetConversionValue(ADC1);
后来在检测前后加上锁,就没有复现这个问题了:
LOCK_ADC();
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
res = ADC_GetConversionValue(ADC1);
UNLOCK_ADC(); |
|