Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631570
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 10:59:09

原文地址:uCOS_51 创建任务 作者:luozhiyong131


点击(此处)折叠或打开

  1. /**
  2.  *     uCOS_51 for MCS-51
  3.  *     创建一个任务PowerLed:实现灯的闪烁
  4.  * 2012-5-31 lzy
  5.  */

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

  7. // 任务优先级别定义
  8. #define POWERLEDPRIO     OS_LOWEST_PRIO - 2        // 定义灯为最低优先级别 【空闲任务】

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

  10. // 栈定义
  11. OS_STK PowerLedStk[TASK_STK_SIZE];

  12. // 任务声明
  13. void PowerLed(void *ppdata) REENTRANT;        // 工作指示灯任务

  14. int main()
  15. {
  16.     InitSystem();     // 系统初始化
  17.     ET0=1; /* 谨记:系统启动后第一时间开定时器中断 */

  18.     OSTaskCreate(PowerLed, (void *)0, PowerLedStk, POWERLEDPRIO); // 创建任务
  19.     
  20.     OSStart(); // 启动多任务管理

  21.     return 0;
  22. }


  23. /*
  24. *********************************************************************************************************
  25. * 工作状态指示任务
  26. *
  27. * 描述 : CPU正常工作时,每秒钟闪烁5次,不工作时不闪烁,控制端口P3.4。
  28. *
  29. * 参数 : ppdata
  30. *
  31. * 注意 : 一个时钟节拍为0.02s,建议优先级设为最低,高于系统空闲任务和系统统计任务。强烈引起您的重视:
  32. *             ..\ucos_51\ucos-ii\src\ucos_ii.h    
  33. *                     OS_EXT DF_IDATA volatile INT32U OSIdleCtr;
  34. *             "OSIdleCtr" 变量务必设置为 "idata" 存储类型,否则任务运行节拍变慢。             
  35. *********************************************************************************************************
  36. */
  37. void PowerLed(void *ppdata) REENTRANT
  38. {
  39. #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
  40.     OS_CPU_SR cpu_sr;
  41. #endif

  42.     ppdata=ppdata;
  43.     
  44.     for(;;)
  45.     {
  46.         OS_ENTER_CRITICAL();
  47.         WorkLedCtrl=!WorkLedCtrl; /* 保护临界资源 */
  48.         OS_EXIT_CRITICAL();

  49.         OSTimeDlyHMSM(0,0,0,200);
  50.     }
  51. }
源码+仿真: 复件 uCOS_51.rar   
阅读(168) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~