main.c 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. *********************************************************************************************************
  3. * 函 数 名: main
  4. * 功能说明: c程序入口
  5. * 形 参:无
  6. * 返 回 值: 错误代码(无需处理)
  7. *********************************************************************************************************
  8. */
  9. #include "main.h"
  10. int main(void)
  11. {
  12. #if 0
  13. /* 打开GOIOI 端口时钟 */
  14. *(unsigned int *)(0x40023800 + 0x30) |= (1 << 8);
  15. /* PI10 为输出 */
  16. *(unsigned int *)(0x40022000 + 0x00) &= ~((0x03) << (2 * 10));
  17. *(unsigned int *)(0x40022000 + 0x00) |= (1 << (2 * 10));
  18. /* PI10 输出高电平 */
  19. *(unsigned int *)(0x40022000 + 0x14) |= (1 << 10);
  20. /* PI10 输出低电平 */
  21. *(unsigned int *)(0x40022000 + 0x14) &= ~(1 << 10);
  22. #elif 0
  23. bsp_init();
  24. while (1)
  25. {
  26. GPIO_ResetBits(GPIOI, GPIO_Pin_10);
  27. Delay(0xFFFFFFFF);
  28. // GPIO_SetBits(GPIOI, GPIO_Pin_10);
  29. // Delay(0xFFFFFFFF);
  30. GPIO_ResetBits(GPIOF, GPIO_Pin_7);
  31. Delay(0xFFFFFF);
  32. // GPIO_SetBits(GPIOF, GPIO_Pin_7);
  33. // Delay(0xFFFFFF);
  34. GPIO_ResetBits(GPIOF, GPIO_Pin_8);
  35. Delay(0xFFFFFF);
  36. // GPIO_SetBits(GPIOF, GPIO_Pin_8);
  37. // Delay(0xFFFFFF);
  38. GPIO_ResetBits(GPIOC, GPIO_Pin_2);
  39. Delay(0xFFFFFF);
  40. // GPIO_SetBits(GPIOC, GPIO_Pin_2);
  41. // Delay(0xFFFFFF);
  42. };
  43. #elif 1
  44. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  45. OSInit();
  46. bsp_init();
  47. /* init task */
  48. /* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
  49. OSTaskCreateExt(init_task, /* 启动任务函数指针 */
  50. (void *)0, /* 传递给任务的参数 */
  51. (OS_STK *)&init_task_stk[INIT_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  52. INIT_TASK_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  53. INIT_TASK_PRIO, /* 任务ID,一般和任务优先级相同 */
  54. (OS_STK *)&init_task_stk[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH
  55. 决定堆栈增长方向 */
  56. INIT_STK_SIZE, /* 任务栈大小 */
  57. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  58. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  59. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
  60. OSStart();
  61. #endif
  62. }
  63. /*!
  64. \brief init task
  65. \param[in] pvParameters not used
  66. \param[out] none
  67. \retval none
  68. */
  69. void init_task(void *pvParameters)
  70. {
  71. SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC);
  72. /* configure the systick handler priority */
  73. NVIC_SetPriority(SysTick_IRQn, 0x00U);
  74. OSTaskCreateExt((void (*)(void *))led_task, /* 启动任务函数指针 */
  75. (void *)0, /* 传递给任务的参数 */
  76. (OS_STK *)&LED_TASK_STK[LED0_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  77. LED_RX_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  78. LED_RX_PRIO, /* 任务ID,一般和任务优先级相同 */
  79. (OS_STK *)&LED_TASK_STK[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
  80. LED0_STK_SIZE, /* 任务栈大小 */
  81. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  82. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  83. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP); /* 任务选项字 */
  84. OSTaskCreateExt((void (*)(void *))misc_task,
  85. (void *)0,
  86. (OS_STK *)&misc_task_stk[MISC_TASK_STK_SIZE - 1],
  87. (INT8U)MISC_PRIO,
  88. (INT16U)MISC_PRIO,
  89. (OS_STK *)&misc_task_stk[0],
  90. (INT32U)MISC_TASK_STK_SIZE,
  91. (void *)0,
  92. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  93. OSTaskCreateExt((void (*)(void *))modbus_master_task,
  94. (void *)0,
  95. (OS_STK *)&uart1_task_stk[UART1_TASK_STK_SIZE - 1],
  96. (INT8U)UART1_TASK_PRIO,
  97. (INT16U)UART1_TASK_PRIO,
  98. (OS_STK *)&uart1_task_stk[0],
  99. (INT32U)UART1_TASK_STK_SIZE,
  100. (void *)0,
  101. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  102. /* 485 modbus从机模式 */
  103. OSTaskCreateExt((void (*)(void *))modbus_slave_task,
  104. (void *)0,
  105. (OS_STK *)&uart3_task_stk[UART3_TASK_STK_SIZE - 1],
  106. (INT8U)UART3_TASK_PRIO,
  107. (INT16U)UART3_TASK_PRIO,
  108. (OS_STK *)&uart3_task_stk[0],
  109. (INT32U)UART3_TASK_STK_SIZE,
  110. (void *)0,
  111. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  112. OSTaskCreateExt((void (*)(void *))net_task,
  113. (void *)0,
  114. (OS_STK *)&net_task_stk[NET_TASK_STK_SIZE - 1],
  115. (INT8U)NET_PRIO,
  116. (INT16U)NET_PRIO,
  117. (OS_STK *)&net_task_stk[0],
  118. (INT32U)NET_TASK_STK_SIZE,
  119. (void *)0,
  120. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  121. }
  122. void misc_task(void)
  123. {
  124. INT8U cnt = 0;
  125. INT16U save_cnt = 0;
  126. while (1)
  127. {
  128. iwdg_feed(MISC_DOG);
  129. OSTimeDly(500);
  130. LED3_RUN_TOGGLE;
  131. // if ((cnt % 10 == 0) && (cnt != 0))
  132. // {
  133. // continue;
  134. // }
  135. // if ((cnt % 25 == 0) && (cnt != 0))
  136. // {
  137. // LED3_RUN_TOGGLE;
  138. // }
  139. // if ((cnt % 15 == 0) && (cnt != 0))
  140. // {
  141. // continue;
  142. // }
  143. // if (cnt == 10)
  144. // {
  145. // continue;
  146. // }
  147. // if (cnt >= 50)
  148. // {
  149. // cnt = 0;
  150. // }
  151. // else
  152. // {
  153. // cnt++;
  154. // }
  155. // if (save_cnt >= 1500)
  156. // {
  157. // printf(1111);
  158. // save_cnt = 0;
  159. // }
  160. // else
  161. // {
  162. // save_cnt++;
  163. // }
  164. };
  165. }