打印
[STM32F1]

μcos任务切换,adc定时采集时间间隔变短,其他高优先

[复制链接]
840|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TinySnail|  楼主 | 2014-10-28 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 TinySnail 于 2014-10-28 09:10 编辑

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);
    }
}

当TIM3_Int_Init(155,719);定时为1.56ms时,dac先等待2秒,采样9次后成功进入Dac1_Init();正常。

同样其他条件下,当采样定时为156μs时
dac先等待200ms,程序到不了dac延时后面的任务执行了。也就是不能被dac抢占。dac延时之后的程序无法执行。
dac先等待40ms,同上
dac先等待20ms,则adc定时无采集,直接跑dac后面的程序。

为什么采样时间短到一定程度,就不能被高优先级的其他任务抢占了?
adc定时时间只能是156微秒了,怎么才能执行dac延时后面的程序?
沙发
TinySnail|  楼主 | 2014-10-28 09:30 | 只看该作者
本帖最后由 TinySnail 于 2014-10-28 09:31 编辑

我测试,定时200微秒,180微秒,dac延时200ms时都可以进入dac,就是前面采集次数不确定,十几次到60次不等
定时到170微秒采集一次adc时,就再进不去dac任务了。

使用特权

评论回复
板凳
mmuuss586| | 2014-10-29 20:38 | 只看该作者
不用系统,看是否客户;
可以的话,就要考虑提高各任务的效率了(比如写寄存器方式)

使用特权

评论回复
地板
airwill| | 2014-10-30 11:59 | 只看该作者
这应该是 OS 系统开销引起的。可能 OS 的两次任务切换所需要的时间已经超过 170微妙了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

12

帖子

0

粉丝