分享TI LM3S811开发板使用心得——UCOS-信号量-邮箱练习

[复制链接]
6287|28
 楼主| lixiaoxu2meng 发表于 2011-11-21 13:53 | 显示全部楼层 |阅读模式
本帖最后由 lixiaoxu2meng 于 2011-11-29 09:29 编辑

声明:本人将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. }
工程截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +10 收起 理由
hotpower + 10

查看全部评分

 楼主| lixiaoxu2meng 发表于 2011-11-21 16:01 | 显示全部楼层
上传工程 编译 下载即可看到效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hotpower 发表于 2011-11-21 23:56 | 显示全部楼层
非常好~~~
 楼主| lixiaoxu2meng 发表于 2011-11-22 07:24 | 显示全部楼层
3# hotpower
只是学了点皮毛  谢谢老师
hotpower 发表于 2011-11-22 08:11 | 显示全部楼层
好好学习,不管是什么厂家。
 楼主| lixiaoxu2meng 发表于 2011-11-22 08:12 | 显示全部楼层
5# hotpower
hotpower 发表于 2011-11-22 13:54 | 显示全部楼层
这里的裤子太贵,俺发裤子咔嚓咔嚓的
 楼主| lixiaoxu2meng 发表于 2011-11-22 14:44 | 显示全部楼层
本帖最后由 lixiaoxu2meng 于 2011-11-22 14:47 编辑

7# hotpower

呵呵 对了老师 我们第一批板子与其他批板子有不一样的地方吗 为我的SD卡还是初始化 不成功 :'(
永远的不知 发表于 2011-11-22 16:51 | 显示全部楼层
1# lixiaoxu2meng

楼主动作挺快的,已经用811做了不少事情了,加油。
nwx8899 发表于 2011-11-22 18:37 | 显示全部楼层
值得学习
hotpower 发表于 2011-11-23 02:11 | 显示全部楼层
7# hotpower

呵呵 对了老师 我们第一批板子与其他批板子有不一样的地方吗 为我的SD卡还是初始化 不成功 :'(
lixiaoxu2meng 发表于 2011-11-22 14:44


已返还100元订金和第2届250状元奖金估计350元,请注意查收。
返还交易信息在邮箱内。
请在https://bbs.21ic.com/icview-287276-1-1.html跟帖确认返还。
 楼主| lixiaoxu2meng 发表于 2011-11-23 07:42 | 显示全部楼层
9# 永远的不知
呵呵也没做什么 简单的学习了一下
 楼主| lixiaoxu2meng 发表于 2011-11-23 07:43 | 显示全部楼层
10# nwx8899
谢谢相互学习
 楼主| lixiaoxu2meng 发表于 2011-11-23 07:43 | 显示全部楼层
11# hotpower
已收到了老师
hotpower 发表于 2011-11-23 15:25 | 显示全部楼层
11# hotpower  
已收到了老师
lixiaoxu2meng 发表于 2011-11-23 07:43


努力学习,不管什么厂家,学到的都是自己的。
有时间俺也玩玩TI的M3,M4
heweibig 发表于 2011-11-23 15:35 | 显示全部楼层
返还100元订金和第2届250状元奖金估计350元?:funk:
hotpower 发表于 2011-11-26 19:10 | 显示全部楼层
返还100元订金和第2届250状元奖金估计350元?:funk:
heweibig 发表于 2011-11-23 15:35


共计350元,晕,老花眼写错了
lzlong 发表于 2011-11-28 10:49 | 显示全部楼层
楼主学习的很厉害啊
baixichi 发表于 2011-12-1 10:22 | 显示全部楼层
楼主在eeworld也注册过会员吧
teet 发表于 2011-12-1 11:49 | 显示全部楼层
果然是酷贴啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1679

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部