4420|7

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

LM3S811学习体会-UCOS-信号量-邮箱练习 [复制链接]

声明:本人将ZLG公司移植好的模板直接拿过来用的(在这里表示感谢),非本人移植。
本工程主要练习 任务的建立及信号量、邮箱等的使用,本工程一共创建了四个任务(空闲及统计任务不算在内)。
          1.taskStart主要用来建立任务(即通常说的用任务建立任务,当然不这么用以可以,个人习惯问题)信号量 邮箱 等 个人感觉这样比较清晰。
           2.task1 使用系统延时(使用时必须注意使能 在os_cfg.h中)实现LED小灯闪烁,同时向任务2发送信号量。
           3.task2等待信号量然后点亮并熄灭LED,同时向任务3发送邮箱(为延时信息)
           4.task3等待邮箱 并根据邮箱传递来的延时时间来改变LED的闪烁周期

main函数
  1. /*--------------文件信息---------------------------------------------------------
  2. * 文 件 名: main.c
  3. * 创 建 人: lixiaoxu
  4. * 创建日期: 2011年11月16日
  5. * 描 述: 主程序C语言入口
  6. * 说明:UCOS模板移植于 ZLG Company
  7. *---------- 版本信息------------------------------------------------------------
  8. * 版 本: V1.0
  9. *
  10. *-------------------------------------------------------------------------------*/
  11. #include "includes.h"
  12. /*********************************************************************************
  13. 任务优先级
  14. **********************************************************************************/
  15. #define TASK_START_PRIO 0
  16. #define TASK_1_PRIO 10
  17. #define TASK_2_PRIO2 11
  18. #define TASK_3_PRIO3 12

  19. /*********************************************************************************
  20. 任务堆栈大小
  21. *********************************************************************************/
  22. #define TASK_START_STK_SIZE 50 //定义任务堆栈大小
  23. #define TaskStkLengh_32 32
  24. #define TaskStkLengh_64 64
  25. #define TaskStkLengh_128 128
  26. #define TaskStkLengh_256 256

  27. static OS_STK Task_Start_Stk[TASK_START_STK_SIZE];
  28. static OS_STK Task_1_Stk[TaskStkLengh_64];
  29. static OS_STK Task_2_Stk[TaskStkLengh_64];
  30. static OS_STK Task_3_Stk[TaskStkLengh_64];

  31. /********************************************************************************
  32. 定义任务 信号量 邮箱 消息队列
  33. ********************************************************************************/
  34. OS_EVENT *AckSem;
  35. OS_EVENT *Delay_Mbox;

  36. /*******************************************************************************
  37. 函数声明
  38. *******************************************************************************/
  39. static void taskStart (void *pdata);
  40. static void task1 (void *pdata);
  41. static void task2 (void *pdata);
  42. static void task3 (void *pdata);

  43. /******************************************************************************
  44. * 本工程实现功能:实现邮箱、信号量的使用
  45. * 注意:
  46. *
  47. ******************************************************************************/
  48. int main (void)
  49. {
  50. OSInit(); //OS-II 初始化uC/OS-II的内核

  51. OSTaskCreate ( taskStart,
  52. (void *)0, //创建启动任务
  53. &Task_Start_Stk[TASK_START_STK_SIZE-1],
  54. TASK_START_PRIO );

  55. OSStart(); //Start uC/OS-II 启动uC/OS-II
  56. return(0) ;
  57. }

  58. /*********************************************************************************************************
  59. ** Function name: Task_Start
  60. ** Descriptions: Start task
  61. ** input parameters: *pdata
  62. ** output parameters: 无
  63. ** Returned value: 无
  64. *********************************************************************************************************/
  65. static void taskStart (void *pdata)
  66. {
  67. pdata = pdata;

  68. Set_System(); //用于mcu的配置

  69. OS_CPU_SysTickInit(); //启动系统SysTick 作为UCOS的时基

  70. #if OS_TASK_STAT_EN > 0 //使能统计功能
  71. OSStatInit();
  72. #endif
  73. //在这里创建 任务中所用到的 信号量 邮箱 消息队列
  74. AckSem = OSSemCreate(0); //创建信号量
  75. Delay_Mbox = OSMboxCreate((void *)0); //创建邮箱 由任务2向任务3发送LED闪烁间隔
  76. // 在这里创建要使用的任务
  77. OSTaskCreate (task1, (void *)0, //创建任务1
  78. &Task_1_Stk[TaskStkLengh_64-1],
  79. TASK_1_PRIO);

  80. OSTaskCreate (task2, (void *)0, //创建任务2
  81. &Task_2_Stk[TaskStkLengh_64-1],
  82. TASK_2_PRIO2);
  83. OSTaskCreate (task3, (void *)0, //创建任务2
  84. &Task_3_Stk[TaskStkLengh_64-1],
  85. TASK_3_PRIO3);
  86. while (1)
  87. {
  88. OSTaskSuspend(OS_PRIO_SELF); //挂起启动任务,也可以删除
  89. }
  90. }

  91. /*********************************************************************************************************
  92. ** Function name: task1
  93. ** Descriptions: 任务1
  94. ** input parameters: *pdata
  95. ** output parameters: 无
  96. ** Returned value: 无
  97. *********************************************************************************************************/
  98. static void task1 (void *pdata)
  99. {
  100. pdata = pdata;
  101. while (1)
  102. {
  103. GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,GPIO_PIN_0); //点亮LED3
  104. OSTimeDlyHMSM(0,0,0,500); //延时0.5秒
  105. GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,~GPIO_PIN_0); //熄灭LED3
  106. OSTimeDlyHMSM(0,0,0,500); //延时0.5秒
  107. OSSemPost (AckSem); //发送信号量
  108. }
  109. }
  110. /*********************************************************************************************************
  111. ** Function name: task2
  112. ** Descriptions: 任务2
  113. ** input parameters: *pdata
  114. ** output parameters: 无
  115. ** Returned value: 无
  116. *********************************************************************************************************/
  117. static void task2 (void *pdata)
  118. {
  119. INT8U err;
  120. u8 time = 1;
  121. pdata = pdata;
  122. while (1)
  123. {
  124. OSSemPend (AckSem, 0, &err); //等待信号量
  125. GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,GPIO_PIN_1); //点亮LED4
  126. OSSemPend (AckSem, 0, &err); //等待信号量
  127. GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,~GPIO_PIN_1); //熄灭LED4
  128. OSMboxPost(Delay_Mbox, &time); //发送邮箱 邮箱信息为 1和6 交替发送
  129. if(time ==6) time = 1;
  130. else time = 6;
  131. }
  132. }
  133. /*********************************************************************************************************
  134. ** Function name: task3
  135. ** Descriptions: 任务3
  136. ** input parameters: *pdata
  137. ** output parameters: 无
  138. ** Returned value: 无
  139. *********************************************************************************************************/
  140. static void task3 (void *pdata)
  141. {
  142. INT8U err;
  143. u8 *RX_Mbox; //存放邮箱信息
  144. pdata = pdata;

  145. while (1)
  146. {
  147. RX_Mbox = OSMboxPend(Delay_Mbox, 0, &err); //接收邮箱信息
  148. OSTimeDlyHMSM(0,0,*RX_Mbox,0); //延时x秒
  149. GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,GPIO_PIN_1); //点亮LED5
  150. OSTimeDlyHMSM(0,0,*RX_Mbox,0); //延时x秒
  151. GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,~GPIO_PIN_1); //熄灭LED5
  152. }
  153. }
复制代码
工程截图 11.JPG

LI-UCOS.rar

1.6 MB, 下载次数: 317

售价: 1 分芯积分  [记录]

最新回复

牛人啊  不错不错 好好研究  详情 回复 发表于 2012-6-15 21:01
 
点赞 关注

回复
举报

14

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
截图很详细,感谢分享了啊
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

板凳
 
ZLGde  de 资料还是很不错的
 
 
 

回复

349

帖子

0

TA的资源

一粒金砂(中级)

4
 
截图很详细,感谢分享了啊
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 
试一下,看可不可以。谢谢楼主。
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

6
 
这个必须要顶
 
 
 

回复

130

帖子

0

TA的资源

一粒金砂(中级)

7
 
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

8
 
牛人啊  不错不错 好好研究
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表