Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7723025
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2012-05-31 16:12:41


点击(此处)折叠或打开

  1. /**
  2.  *     uCOS_51 for MCS-51
  3.  *     时间管理
  4.  * OSTimeDlyHMSM(); 当前任务的运行延时并让出CPU
  5.  * OSTimeDlyResume(INT8U prio); 在其他任务中调用此函数取消延时,任务进入就绪状态
  6.  * 2012-5-31 lzy
  7.  */

  8. #include "..\ucos_51\ucos-ii\inc\includes.h"

  9. // 任务优先级别定义
  10. #define APPSTARTPRIO     TASK_START_PRIO
  11. #define POWERLEDPRIO     OS_LOWEST_PRIO - 2        // 定义灯为最低优先级别 【空闲任务】

  12. sbit WorkLedCtrl=P3^4;    // 灯引脚定义


  13. // 栈定义
  14. OS_STK AppStartStk[TASK_STK_SIZE];
  15. OS_STK PowerLedStk[TASK_STK_SIZE];

  16. // 任务声明
  17. void AppStart(void *ppdata) REENTRANT;
  18. void PowerLed(void *ppdata) REENTRANT;        // 工作指示灯任务

  19. int main()
  20. {
  21.     InitSystem();     // 系统初始化

  22.     OSTaskCreate(AppStart, (void *)0, AppStartStk, APPSTARTPRIO);

  23.     
  24.     OSStart(); // 启动多任务管理

  25.     return 0;
  26. }

  27.   
  28. /*
  29. *********************************************************************************************************
  30. * 系统开始任务
  31. *
  32. * 描述 : 开定时器T0中断,创建消息邮箱以及所有其他的任务,然后自我删除。
  33. *
  34. * 参数 : ppdata
  35. *
  36. * 注意 : 系统启动后第一时间开定时器中断,否则系统其它任务无法得到执行。             
  37. *********************************************************************************************************
  38. */
  39. void AppStart(void *ppdata) REENTRANT
  40. {
  41.     ppdata=ppdata;

  42.     ET0=1; /* 谨记:系统启动后第一时间开定时器中断 */
  43.     
  44.     OSTaskCreate(PowerLed, (void *)0, PowerLedStk, POWERLEDPRIO);

  45.     OSTaskDel(OS_PRIO_SELF);    // 自我删除    
  46. }


  47. // 灯闪烁任务
  48. void PowerLed(void *ppdata) REENTRANT
  49. {
  50. #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
  51.     OS_CPU_SR cpu_sr;
  52. #endif

  53.     ppdata=ppdata;

  54.     for(;;)
  55.     {

  56.         OS_ENTER_CRITICAL();
  57.         WorkLedCtrl=!WorkLedCtrl; /* 保护临界资源 */
  58.         OS_EXIT_CRITICAL();;
  59.         OSTimeDlyHMSM(0,0,1,0);
  60.     }
  61. }
源码+仿真: 复件 uCOS_51.rar   
阅读(1910) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~