[LOOK] LOOK菜鸟flag应用例程

[复制链接]
 楼主| hotpower 发表于 2011-5-20 23:04 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2011-5-23 19:02 编辑

点击下载:Look_Flag


1.Look_Flag.h
  1. #include "look_config.h"
  2. #include <look.h>
  3. #include <instantiate>

  4. // 任务类 task_Look_Flag_Led1_t 的定义
  5. class task_Look_Flag_Led1_t : public task_t {
  6. public:
  7. task_Look_Flag_Led1_t() __OPT_ATTR__; // 构造函数

  8. protected:
  9. void routine(); // 任务例程
  10. };

  11. // 任务类 task_Look_Flag_Led1_t 的构造函数
  12. __OPT_INLINE__ task_Look_Flag_Led1_t::task_Look_Flag_Led1_t()
  13. {
  14. // TODO: 在此初始化 task_Look_Flag_Led1_t 的类成员
  15. }

  16. // 任务类 task_Look_Flag_Led2_t 的定义
  17. class task_Look_Flag_Led2_t : public task_t {
  18. public:
  19. task_Look_Flag_Led2_t() __OPT_ATTR__; // 构造函数

  20. protected:
  21. void routine(); // 任务例程
  22. };


  23. // 任务类 task_Look_Flag_Beep_t 的定义
  24. class task_Look_Flag_Beep_t : public task_t {
  25. public:
  26. task_Look_Flag_Beep_t() __OPT_ATTR__; // 构造函数

  27. protected:
  28. void routine(); // 任务例程
  29. };

  30. // 任务类 task_Look_Flag_Led1_t 的构造函数
  31. __OPT_INLINE__ task_Look_Flag_Beep_t::task_Look_Flag_Beep_t()
  32. {
  33. // TODO: 在此初始化 task_Look_Flag_Led1_t 的类成员
  34. }

  35. extern instantiate::task<task_Look_Flag_Led1_t, LOOK_STACK_SIZE> task_Look_Flag_Led1;
  36. extern instantiate::task<task_Look_Flag_Led2_t, LOOK_STACK_SIZE> task_Look_Flag_Led2;
  37. extern instantiate::task<task_Look_Flag_Beep_t, LOOK_STACK_SIZE> task_Look_Flag_Beep;
2.Look_Flag.cpp


  1. #include "Look_Flag.h"
  2. #include "NUC1xx.h"
  3. #include "NUC1xxM051Seriescfg.h"
  4. flag_t Flag(0);
  5. class Keyboard_t : public interrupt_t {
  6. public:
  7. Keyboard_t() __OPT_ATTR__;
  8. protected:
  9. bool isr(int vector);
  10. void dsr(int vector, uintptr_t count);
  11. };
  12. // Keyboard_t 构造函数
  13. inline Keyboard_t::Keyboard_t()
  14. {
  15. attach(EINT0_IRQn);
  16. attach(EINT1_IRQn);
  17. GPIOBs.IEN.Regs = (1 << Pin15) | (1 << Pin14);   // 开启中断
  18. vector_t::enable(EINT0_IRQn);
  19. vector_t::enable(EINT1_IRQn);
  20. }
  21. // Keyboard_t 中断服务例程
  22. bool Keyboard_t::isr(int vector)
  23. {
  24. GPIOBs.ISRC.Regs = GPIOBs.ISRC.Regs;   // 清中断 flag
  25. return true;
  26. }
  27. // Keyboard_t 中断滞后服务例程
  28. void Keyboard_t::dsr(int vector, uintptr_t count)
  29. {
  30. static uint32_t n = 0b01;
  31. if (vector == EINT0_IRQn)//Key2
  32. {
  33.   Flag.do_set_bits(n);
  34.   n <<= 1;
  35.   if (n == 8) n = 0b111;
  36.   else if(n > 8) n = 1;
  37. }
  38. else if (vector == EINT1_IRQn)//Key1
  39. {
  40.   Flag.do_set_bits(0b111);
  41. }
  42. }
  43. Keyboard_t Key;         // 创建Key对象

  44. // 任务类 task_Look_Flag_Led1_t 的例程
  45. void task_Look_Flag_Led1_t::routine()
  46. {
  47. // TODO: 在此编写 task_Look_Flag_Led1_t 例程的内容
  48. while (true) {
  49.   // TODO: 在此编写 task_Look_Flag_Led1_t 例程的内容
  50.   int flag = Flag.wait(0b001, flag_t::ANY_CONSUME);
  51.   if (flag)
  52.   {
  53.       uint32_t data = ~0b100;
  54.    for (uint32_t i = 0; i < 8; i ++){
  55.        GPIOAs.DMASK.Regs = ~0b001100;
  56.       GPIOAs.DOUT.Regs = data;
  57.     data ^= 0b1100;
  58.             delay(LOOK_TICKS_PER_SEC / 10);
  59.    }
  60.    GPIOAs.DMASK.Regs = ~0b001100;
  61.    GPIOAs.DOUT.Regs = 0b001100;
  62.    delay(LOOK_TICKS_PER_SEC / 10);
  63.   }
  64.   
  65. }
  66. }

  67. // 任务类 task_Look_Flag_Led2_t 的例程
  68. void task_Look_Flag_Led2_t::routine()
  69. {      
  70. // TODO: 在此编写 task_Look_Flag_Led2_t 例程的内容
  71. while (true) {
  72.   // TODO: 在此编写 task_Look_Flag_Led2_t 例程的内容
  73.   int flag = Flag.wait(0b010, flag_t::ANY_CONSUME);
  74.   if (flag)
  75.   {
  76.       uint32_t data = ~0b100000;
  77.    for (uint32_t i = 0; i < 8; i ++){
  78.        GPIOAs.DMASK.Regs = ~0b110000;
  79.       GPIOAs.DOUT.Regs = data;
  80.     data ^= 0b110000;
  81.             delay(LOOK_TICKS_PER_SEC / 10);
  82.    }
  83.    GPIOAs.DMASK.Regs = ~0b110000;
  84.    GPIOAs.DOUT.Regs = 0b110000;
  85.    delay(LOOK_TICKS_PER_SEC / 10);
  86.   }
  87. }
  88. }

  89. // 任务类 task_Look_Flag_Beep_t 的例程
  90. void task_Look_Flag_Beep_t::routine()
  91. {
  92. // TODO: 在此编写 task_Look_Flag_Beep_t 例程的内容
  93. while (true) {
  94.   // TODO: 在此编写 task_Look_Flag_Beep_t 例程的内容
  95.   int flag = Flag.wait(0b100, flag_t::ANY_CONSUME);
  96.   if (flag)
  97.   {
  98.    for (uint32_t i = 0; i < 6; i ++){//蜂鸣器响三次
  99.      GPIOBs.DOUT.Bits.Pin10 ^= 1;//蜂鸣器响PB10=1,不响PB10=0
  100.            delay(LOOK_TICKS_PER_SEC / 20);//断续间隔
  101.    }
  102.    GPIOBs.DOUT.Bits.Pin10 = 0;//蜂鸣器不响
  103.   }
  104. }
  105. //
  106. }
  107. #ifdef LOOK_SCHEDULING_PRIORITY
  108. instantiate::task<task_Look_Flag_Led1_t, LOOK_STACK_SIZE> task_Look_Flag_Led1(1);
  109. instantiate::task<task_Look_Flag_Led2_t, LOOK_STACK_SIZE> task_Look_Flag_Led2(2);
  110. instantiate::task<task_Look_Flag_Beep_t, LOOK_STACK_SIZE> task_Look_Flag_Beep(0);
  111. #else
  112. instantiate::task<task_Look_Flag_Led1_t, LOOK_STACK_SIZE> task_Look_Flag_Led1;
  113. instantiate::task<task_Look_Flag_Led2_t, LOOK_STACK_SIZE> task_Look_Flag_Led2;
  114. instantiate::task<task_Look_Flag_Beep_t, LOOK_STACK_SIZE> task_Look_Flag_Beep;
  115. #endif

本帖子中包含更多资源

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

×
murex 发表于 2011-5-20 23:05 | 显示全部楼层
又是一例,菜农进展速度一流
lzlz70707 发表于 2011-5-20 23:06 | 显示全部楼层
沙发没了.
sleijun 发表于 2011-5-20 23:09 | 显示全部楼层
菜农的速度好快啊
weshiluwei6 发表于 2011-6-25 20:43 | 显示全部楼层
大叔创建多个任务怎么创建啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[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

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