main.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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); /* 任务选项字 */
  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 *))fly_uart1_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. // OSTaskCreateExt((void (*)(void *))led1_task, /*
  103. // 启动任务函数指针 */
  104. // (void *)0, /*
  105. // 传递给任务的参数 */ (OS_STK
  106. // *)&LED1_TASK_STK[LED1_STK_SIZE - 1], /*
  107. // 指向任务栈栈顶的指针 */ LED1_RX_PRIO, /*
  108. // 任务的优先级,必须唯一,数字越低优先级越高 */
  109. // LED1_RX_PRIO, /*
  110. // 任务ID,一般和任务优先级相同 */ (OS_STK
  111. // *)&LED1_TASK_STK[0], /*
  112. // 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
  113. // LED1_STK_SIZE, /*
  114. // 任务栈大小 */ (void *)0, /*
  115. // 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  116. // (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可
  117. // */
  118. // OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /*
  119. // 任务选项字 */
  120. OSTaskCreateExt((void (*)(void *))dm9161_task,
  121. (void *)0,
  122. (OS_STK *)&net_task_stk[NET_TASK_STK_SIZE - 1],
  123. (INT8U)NET_PRIO,
  124. (INT16U)NET_PRIO,
  125. (OS_STK *)&net_task_stk[0],
  126. (INT32U)NET_TASK_STK_SIZE,
  127. (void *)0,
  128. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  129. }
  130. void misc_task(void)
  131. {
  132. while (1)
  133. {
  134. iwdg_feed(MISC_DOG);
  135. // LED_RUN_TOGGLE;
  136. OSTimeDly(500);
  137. LED3_RUN_TOGGLE;
  138. };
  139. }