main.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. *********************************************************************************************************
  3. * 函 数 名: main
  4. * 功能说明: c程序入口
  5. * 形 参:无
  6. * 返 回 值: 错误代码(无需处理)
  7. *********************************************************************************************************
  8. */
  9. #include "main.h"
  10. #define INIT_STK_SIZE 64
  11. #define LED0_STK_SIZE 64
  12. #define LED1_STK_SIZE 64
  13. CPU_STK init_task_stk[INIT_STK_SIZE];
  14. CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
  15. CPU_STK LED1_TASK_STK[LED1_STK_SIZE];
  16. #define INIT_TASK_PRIO 10
  17. #define LED0_RX_PRIO 7
  18. #define LED1_RX_PRIO 6
  19. void Delay(uint32_t count)
  20. {
  21. for (; count != 0; count--)
  22. ;
  23. }
  24. int main(void)
  25. {
  26. #if 0
  27. /* 打开GOIOI 端口时钟 */
  28. *(unsigned int *)(0x40023800 + 0x30) |= (1 << 8);
  29. /* PI10 为输出 */
  30. *(unsigned int *)(0x40022000 + 0x00) &= ~((0x03) << (2 * 10));
  31. *(unsigned int *)(0x40022000 + 0x00) |= (1 << (2 * 10));
  32. /* PI10 输出高电平 */
  33. *(unsigned int *)(0x40022000 + 0x14) |= (1 << 10);
  34. /* PI10 输出低电平 */
  35. *(unsigned int *)(0x40022000 + 0x14) &= ~(1 << 10);
  36. #elif 0
  37. bsp_init();
  38. while (1)
  39. {
  40. GPIO_ResetBits(GPIOI, GPIO_Pin_10);
  41. Delay(0xFFFFFFFF);
  42. // GPIO_SetBits(GPIOI, GPIO_Pin_10);
  43. // Delay(0xFFFFFFFF);
  44. GPIO_ResetBits(GPIOF, GPIO_Pin_7);
  45. Delay(0xFFFFFF);
  46. // GPIO_SetBits(GPIOF, GPIO_Pin_7);
  47. // Delay(0xFFFFFF);
  48. GPIO_ResetBits(GPIOF, GPIO_Pin_8);
  49. Delay(0xFFFFFF);
  50. // GPIO_SetBits(GPIOF, GPIO_Pin_8);
  51. // Delay(0xFFFFFF);
  52. GPIO_ResetBits(GPIOC, GPIO_Pin_2);
  53. Delay(0xFFFFFF);
  54. // GPIO_SetBits(GPIOC, GPIO_Pin_2);
  55. // Delay(0xFFFFFF);
  56. };
  57. #elif 1
  58. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  59. OSInit();
  60. bsp_init();
  61. /* init task */
  62. /* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
  63. OSTaskCreateExt(init_task, /* 启动任务函数指针 */
  64. (void *)0, /* 传递给任务的参数 */
  65. (OS_STK *)&init_task_stk[INIT_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  66. INIT_TASK_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  67. INIT_TASK_PRIO, /* 任务ID,一般和任务优先级相同 */
  68. (OS_STK *)&init_task_stk[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
  69. INIT_STK_SIZE, /* 任务栈大小 */
  70. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  71. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  72. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
  73. OSStart();
  74. #endif
  75. }
  76. /*!
  77. \brief init task
  78. \param[in] pvParameters not used
  79. \param[out] none
  80. \retval none
  81. */
  82. void init_task(void *pvParameters)
  83. {
  84. SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC);
  85. /* configure the systick handler priority */
  86. NVIC_SetPriority(SysTick_IRQn, 0x00U);
  87. OSTaskCreateExt(led0_task, /* 启动任务函数指针 */
  88. (void *)0, /* 传递给任务的参数 */
  89. (OS_STK *)&LED0_TASK_STK[LED0_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  90. LED0_RX_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  91. LED0_RX_PRIO, /* 任务ID,一般和任务优先级相同 */
  92. (OS_STK *)&LED0_TASK_STK[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
  93. LED0_STK_SIZE, /* 任务栈大小 */
  94. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  95. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  96. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
  97. OSTaskCreateExt(led1_task, /* 启动任务函数指针 */
  98. (void *)0, /* 传递给任务的参数 */
  99. (OS_STK *)&LED1_TASK_STK[LED1_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  100. LED1_RX_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  101. LED1_RX_PRIO, /* 任务ID,一般和任务优先级相同 */
  102. (OS_STK *)&LED1_TASK_STK[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
  103. LED1_STK_SIZE, /* 任务栈大小 */
  104. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  105. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  106. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
  107. }
  108. void led0_task(void *pdata)
  109. {
  110. pdata = pdata;
  111. while (1)
  112. {
  113. GPIO_SetBits(GPIOI, GPIO_Pin_10);
  114. OSTimeDly(100);
  115. GPIO_ResetBits(GPIOI, GPIO_Pin_10);
  116. OSTimeDly(400);
  117. }
  118. }
  119. void led1_task(void *pdata)
  120. {
  121. pdata = pdata;
  122. while (1)
  123. {
  124. GPIO_SetBits(GPIOC, GPIO_Pin_2);
  125. OSTimeDly(500);
  126. GPIO_ResetBits(GPIOC, GPIO_Pin_2);
  127. OSTimeDly(200);
  128. }
  129. }