[LOOK] LOOK菜鸟sem应用例程

[复制链接]
 楼主| hotpower 发表于 2011-5-29 00:00 | 显示全部楼层 |阅读模式
点击下载LOOK_SEM:


1.LOOK_SEM.H
  1. #ifndef __LOOK_SEM_H
  2. #define __LOOK_SEM_H

  3. #include "look_config.h"
  4. #include <look.h>
  5. #include <instantiate>

  6. // 任务类 task_LOOK_SEM1_t 的定义
  7. class task_LOOK_SEM1_t : public task_t {
  8. public:
  9. task_LOOK_SEM1_t() __OPT_ATTR__; // 构造函数

  10. protected:
  11. void routine(); // 任务例程
  12. };

  13. // 任务类 LOOK_SEM1 的构造函数
  14. __OPT_INLINE__ task_LOOK_SEM1_t::task_LOOK_SEM1_t()
  15. {
  16. // TODO: 在此初始化 task_LOOK_SEM_t 的类成员
  17. }

  18. extern instantiate::task<task_LOOK_SEM1_t, LOOK_STACK_SIZE> task_LOOK1_SEM;

  19. // 任务类 task_LOOK_SEM2_t 的定义
  20. class task_LOOK_SEM2_t : public task_t {
  21. public:
  22. task_LOOK_SEM2_t() __OPT_ATTR__; // 构造函数

  23. protected:
  24. void routine(); // 任务例程
  25. };

  26. // 任务类 LOOK_SEM2 的构造函数
  27. __OPT_INLINE__ task_LOOK_SEM2_t::task_LOOK_SEM2_t()
  28. {
  29. // TODO: 在此初始化 task_LOOK_SEM_t 的类成员
  30. }

  31. extern instantiate::task<task_LOOK_SEM2_t, LOOK_STACK_SIZE> task_LOOK2_SEM;

  32. #endif // __LOOK_SEM_H

2.LOOK_SEM.CPP
  1. #include "LOOK_SEM.h"
  2. #include "NUC1xx.h"
  3. #include "NUC1xxM051Seriescfg.h"

  4. sem_t sem = 1; // 信号灯共享

  5. // 任务类 task_LOOK_SEM1_t 的例程
  6. void task_LOOK_SEM1_t::routine()
  7. {
  8. // TODO: 在此编写 task_LOOK_SEM1_t 例程的内容
  9. while (true) {
  10. // TODO: 在此编写 task_LOOK_SEM1_t 例程的内容
  11. if (sem.wait())//获取信号量,锁住以下共享设备
  12. {
  13. delay(LOOK_TICKS_PER_SEC / 10);
  14. uint32_t data = ~0b100;
  15. GPIOAs.DMASK.Regs = ~0b111100;
  16. for (uint32_t i = 0; i < 18; i ++){
  17. data &= 0b111100;
  18. GPIOAs.DOUT.Regs = data;
  19. data <<= 1;
  20. data += data >> 4;
  21. delay(LOOK_TICKS_PER_SEC / 10);
  22. }
  23. GPIOAs.DOUT.Regs = 0b111100;
  24. sem.post();//释放信号量
  25. }
  26. }
  27. }

  28. // 任务类 task_LOOK_SEM2_t 的例程
  29. void task_LOOK_SEM2_t::routine()
  30. {
  31. // TODO: 在此编写 task_LOOK_SEM2_t 例程的内容
  32. while (true) {
  33. // TODO: 在此编写 task_LOOK_SEM2_t 例程的内容
  34. if (sem.wait())//获取信号量,锁住以下共享设备
  35. {
  36. delay(LOOK_TICKS_PER_SEC / 10);
  37. uint32_t data = ~0b100000;
  38. GPIOAs.DMASK.Regs = ~0b111100;
  39. for (uint32_t i = 0; i < 18; i ++){
  40. data &= 0b111100;
  41. GPIOAs.DOUT.Regs = data;
  42. data >>= 1;
  43. data += data << 4;
  44. delay(LOOK_TICKS_PER_SEC / 10);
  45. }
  46. GPIOAs.DOUT.Regs = 0b111100;
  47. sem.post();//释放信号量
  48. }
  49. }
  50. }

  51. #ifdef LOOK_SCHEDULING_PRIORITY
  52. instantiate::task<task_LOOK_SEM1_t, LOOK_STACK_SIZE> task_LOOK_SEM1(0);
  53. instantiate::task<task_LOOK_SEM2_t, LOOK_STACK_SIZE> task_LOOK_SEM2(0);
  54. #else
  55. instantiate::task<task_LOOK_SEM1_t, LOOK_STACK_SIZE> task_LOOK_SEM1;
  56. instantiate::task<task_LOOK_SEM2_t, LOOK_STACK_SIZE> task_LOOK_SEM2;
  57. #endif

本帖子中包含更多资源

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

×
lzlz70707 发表于 2011-5-29 00:07 | 显示全部楼层
信号量 顶
 楼主| hotpower 发表于 2011-5-29 00:17 | 显示全部楼层
哈哈,你那个共享串口的例程就应该这样~~~
weshiluwei6 发表于 2011-5-29 07:53 | 显示全部楼层
那么晚还在学习啊 佩服
Swallow_0322 发表于 2011-5-29 07:57 | 显示全部楼层
顶!:P
 楼主| hotpower 发表于 2011-5-29 13:03 | 显示全部楼层
哈哈,终于彻底明白了sem~~~
weshiluwei6 发表于 2011-6-4 09:36 | 显示全部楼层
一大早 开始学习信号灯 :victory:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1460

主题

21619

帖子

508

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1460

主题

21619

帖子

508

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