首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
最小的多线程框架
来源:本站整理  作者:佚名  2010-05-19 09:06:01



    case 0:  

 break;

  case 8://最高优先级

    //任务8

    break;

    case 7:

   //任务7

    break;

   ……

   case 2:

  //任务2 

    break;

  case 1:

    //任务1

   break;

   }

     }

}

六、程序编写方法

1、主函数

void main(void)

{

    InitialMCU();

    ActObjReadySet = 0;

    while(1){

    ActObjScheduler();

    }

}

2、中断函数

void ISR_Timer(void)

{

    TmrCtr ++;

    if(TmrCtr > 5){//40ms

      TmrCtr = 0;

   ActObjSet(8); //让定时执行的任务就绪

    }

}

void ISR_AD(void)

{

   _adf    = 0;

   ADValue = _adrh;

 ActObjSet(3);//让计算任务就绪

}

3、任务函数

 和其它函数没有区别

 void AlarmOut()

{

    if(AlarmOutctr > 0){

    AlarmOutctr --;

  PFD_OUT = !PFD_OUT;

   TmrStart(4,15);//1s

    }else{

   ConctrolStat = END_STAT;

    PFD_OUT = 0;

    }  

}

七、使用任务调度的优势

1、多个线程同时就绪时,高优先级先执行。

2、高优先级线程,最长等待时间是上一个正执行线程的完成时间

  3、因为主循环时间最长时是最长线程的执行时间,所以有些中断中执行的代码可以移到任务中。

  4、可以减少条件语句。

  5、使软件结构更合理,清晰。   

八、结语:

   本文介绍的方法在HOLTEK系列8位MCU和NXP的LPC900中有数十个项目的应用。并且在这基础上把switch改为函数指针,加上事件队列和事件延迟后,在LPC2000的ARM上成功应用。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:152,054.70000 毫秒