两个任务:想让adc任务用定时器触发采集一段时间后,跑dac任务。发现定时器到170微秒以内触发一次adc采集时,设置断点 Dac1_Init();将无法到达。175微秒以上都可以到达。
void adc_task(void *pdata)
{
InitAdc();
InitDma();
//TIM3_Int_Init(155,719);
TIM3_Int_Init(155,71);//156微秒采集一次
while(1)
{
OSTimeDlyHMSM(0,0,0,50);
}
}
void dac_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
OSTimeDlyHMSM(0,0,0,200);
//OS_ENTER_CRITICAL();
Dac1_Init();
Dac1_Set_Vol(0);
//OS_EXIT_CRITICAL();
while(1)
{
OSTimeDlyHMSM(0,0,0,10);
}
}
同样其他条件下,当采样时间为500微秒时,dac等待500ms,则有10次adc采集后进入dac任务。可以实现目标
同样其他条件下,当采样时间为200微秒时,dac等待500ms,则有66次adc采集后进入dac任务。可以实现目标
同样其他条件下,当采样时间为200微秒时,dac等待200ms,则有大概20次adc采集后进入dac任务。可以实现目标
同样其他条件下,当采样时间为180微秒时,dac等待200ms,则有大概20-60次adc采集后进入dac任务。可以实现目标,但次数似乎不可控
同样其他条件下,当采样时间为175微秒时,dac等待200ms,则有固定30次adc采集后进入dac任务。可以实现目标。
同样其他条件下,当采样时间为170微秒时,dac等待200ms,无法进入dac任务。设置断点 Dac1_Init();将无法到达。
为什么定时采样时间短到一定程度,就不能被高优先级的其他任务抢占了?
adc定时时间只能是156微秒了,怎么才能执行dac延时后面的程序?
|