main.c
上传用户:jinguanrq
上传日期:2022-06-04
资源大小:724k
文件大小:3k
源码类别:

uCOS

开发平台:

C/C++

  1. #include "includes.h"               /* uC/OS interface */
  2. #include "Sems.h"               /* Semaphore */
  3. #include    "uhal.h"
  4. #include    "44b.h"
  5. #include    "44blib.h"
  6. #include    "led.h"
  7. #include    "8led.h"
  8. #include    "keyboard.h"
  9. //task stack size
  10. #ifdef SEMIHOSTED
  11. #define TASK_STACK_SIZE (64+SEMIHOSTED_STACK_NEEDS)
  12. #else
  13. #define TASK_STACK_SIZE 10*1024
  14. #endif
  15. extern void EV40_rtc_Disp(void);
  16. //Task definition
  17. /* allocate memory for tasks' stacks */
  18. #define STACKSIZE 128
  19. /* Global Variable */
  20. unsigned int Stack1[STACKSIZE];
  21. unsigned int Stack2[STACKSIZE];
  22. unsigned int Stack3[STACKSIZE];
  23. unsigned int Stack4[STACKSIZE];
  24. unsigned int StackMain[STACKSIZE];
  25. void Task1(void *Id)
  26. {
  27.     /* print task's id */
  28.     OSSemPend(UART_sem, 0, &err);
  29.     uHALr_printf("  Task%c Called.n", *(char *)Id);
  30.     OSSemPost(UART_sem);
  31. while(1)
  32. {
  33. led1_on();
  34. led2_off();
  35. OSTimeDly(800);
  36. led1_off();
  37. led2_on();
  38. OSTimeDly(800);
  39. }
  40. }
  41. void Task4(void *Id)
  42. {
  43. int i;
  44.     INT32U NowTime;
  45.     /* print task's id */
  46.     OSSemPend(UART_sem, 0, &err);
  47.     uHALr_printf("  Task%c Called.n", *(char *)Id);
  48.     OSSemPost(UART_sem);
  49. while(1)
  50. {
  51.         for(i=0; i<16; i++)
  52.   {
  53.     OSSemPend(UART_sem, 0, &err);
  54.     NowTime=OSTimeGet();  //获取时间
  55.     uHALr_printf("Run Times at:%dr", NowTime);
  56.     OSSemPost(UART_sem);
  57. OSTimeDly(180);
  58.   }
  59. }
  60. }
  61. void Task3 (void *Id)
  62. {
  63. //    char *Msg;
  64. // int i=0;
  65.     /* print task's id */
  66.     OSSemPend(UART_sem, 0, &err);
  67.     uHALr_printf("  Task%c Called.n", *(char *)Id);
  68.     OSSemPost(UART_sem);
  69.     while(1)
  70.     {
  71.     OSTimeDly(900);
  72.           OSSemPend(UART_sem, 0, &err);
  73.           EV40_rtc_Disp();
  74.           OSSemPost(UART_sem);
  75. }
  76. }
  77. void Task2 (void *Id)
  78. {
  79. int value;
  80. //    char *Msg;
  81.     /* print task's id */
  82.     OSSemPend(UART_sem, 0, &err);
  83.     uHALr_printf("  Task%c Called.nn", *(char *)Id);
  84.     OSSemPost(UART_sem);
  85.     while(1)
  86.     {
  87.   value = key_read();
  88.   // display in 8-segment LED
  89.   if(value > -1)
  90.     {
  91.   Digit_Led_Symbol(value);
  92.     OSTimeDly(90);
  93.       }
  94.      OSTimeDly(90);
  95. }
  96. }
  97. void TaskStart (void *i)
  98. {
  99.      char Id1 = '1';
  100.      char Id2 = '2';
  101.      char Id3 = '3';
  102.      char Id4 = '4';
  103.      
  104.     /* 
  105.      * create the first Semaphore in the pipeline with 1 
  106.      * to get the task started.
  107.      */
  108.      UART_sem = OSSemCreate(1);
  109.      uHALr_InitTimers();            // enable timer counter interrupt
  110.                 
  111.      /*
  112.      * create the tasks in uC/OS and assign decreasing
  113.      * priority to them
  114.      */
  115.      OSTaskCreate(Task1, (void *)&Id1, &Stack1[STACKSIZE - 1], 2);
  116.      OSTaskCreate(Task2, (void *)&Id2, &Stack2[STACKSIZE - 1], 3);
  117.      OSTaskCreate(Task3, (void *)&Id3, &Stack3[STACKSIZE - 1], 4);
  118.      OSTaskCreate(Task4, (void *)&Id4, &Stack4[STACKSIZE - 1], 5);
  119.     
  120.      ARMTargetStart();
  121.      // Delete current task
  122.      OSTaskDel(OS_PRIO_SELF);
  123. }
  124. int main(void)//int argc, char **argv
  125. {
  126. ARMTargetInit();
  127. /* needed by uC/OS */
  128. OSInit();
  129. OSTimeSet(0);
  130. /* create the start task */
  131. OSTaskCreate(TaskStart,(void *)0, &StackMain[STACKSIZE - 1], 0);
  132. /* start the operating system */
  133. OSStart();
  134. }