You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

76 lines
2.9 KiB

  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. /*定义信号量*/
  4. OS_EVENT* ModbusReceived; /*接收到modbus请求报文*/
  5. /*定义任务栈*/
  6. static OS_STK AppTaskStartStk[APP_TASK_START_STK_SIZE];
  7. static OS_STK AppTaskModbusParseStk[APP_TASK_MODBUS_PARSE_STK_SIZE];
  8. /*定义任务主体函数*/
  9. void AppTaskStart (void *p_arg);
  10. void AppTaskModbusParse (void *p_arg);
  11. int main()
  12. {
  13. Sys_Config(); /* stm32系统初始化配置 */
  14. ModbusHardwareInit(); /*外设初始化*/
  15. OSInit(); /* uCOS系统初始化 */
  16. /*创建初始启动任务*/
  17. OSTaskCreateExt(AppTaskStart, /* task:任务入口函数 */
  18. (void *)0, /* p_arg:传给任务的用户参数;不用时传 NULL */
  19. (OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1], /* ptos:向低地址增长时的初始栈顶,使用数组高地址端 */
  20. (INT8U )APP_TASK_START_PRIO, /* prio:唯一优先级,也是 II 管理任务时最常用的标识 */
  21. (INT16U )APP_TASK_START_PRIO, /* id:用户任务编号;不参与调度,一般与任务优先级相同 */
  22. (OS_STK *)&AppTaskStartStk[0], /* pbos:栈底;栈检查从此处识别未使用区域 */
  23. (INT32U )APP_TASK_START_STK_SIZE, /* stk_size:OS_STK 元素个数,不是字节数。总大小为OS_STK大小(1/2/4字节) * 任务堆栈大小 */
  24. (void *)0, /* pext:用户 TCB 扩展区指针;不用时传 NULL */
  25. (INT16U )(OS_TASK_OPT_STK_CHK /* opt:允许栈使用量检查 */
  26. | OS_TASK_OPT_STK_CLR)); /* 创建时清零栈,为检查提供已知填充值 */
  27. OSStart(); /*启动操作系统,开始系统调度*/
  28. }
  29. /*初始启动任务*/
  30. void AppTaskStart(void *p_arg)
  31. {
  32. OS_CPU_SR cpu_sr; /*关中断前必须进行的操作*/
  33. (void)p_arg; /*防止编译器警告*/
  34. OS_CPU_SysTickInit(); /*配置滴答定时器*/
  35. OS_ENTER_CRITICAL(); /* 关中断 */
  36. /*创建信号量*/
  37. ModbusReceived = OSSemCreate(0);
  38. /* 创建modbus协议帧解析任务 */
  39. OSTaskCreateExt(AppTaskModbusParse,
  40. (void *)0,
  41. (OS_STK *)&AppTaskModbusParseStk[APP_TASK_MODBUS_PARSE_STK_SIZE - 1],
  42. (INT8U )APP_TASK_MODBUS_PARSE_PRIO,
  43. (INT16U )APP_TASK_MODBUS_PARSE_PRIO,
  44. (OS_STK *)&AppTaskModbusParseStk[0],
  45. (INT32U )APP_TASK_MODBUS_PARSE_STK_SIZE,
  46. (void *)0,
  47. (INT16U )(OS_TASK_OPT_STK_CHK
  48. | OS_TASK_OPT_STK_CLR));
  49. OSTaskDel(OS_PRIO_SELF); /* 删除启动任务自身 */
  50. OS_EXIT_CRITICAL(); /* 开中断 */
  51. }