|
|
|
@@ -1,10 +1,87 @@ |
|
|
|
/* Includes ------------------------------------------------------------------*/ |
|
|
|
#include "main.h" |
|
|
|
|
|
|
|
/*定义信号量*/ |
|
|
|
OS_EVENT* ModbusReceived; /*接收到modbus请求报文*/ |
|
|
|
OS_EVENT* ModbusAssembled; /*modbus响应帧组装完成*/ |
|
|
|
|
|
|
|
/*定义任务栈*/ |
|
|
|
static OS_STK AppTaskStartStk[APP_TASK_START_STK_SIZE]; |
|
|
|
static OS_STK AppTaskModbusParseStk[APP_TASK_MODBUS_PARSE_STK_SIZE]; |
|
|
|
static OS_STK AppTaskModbusSendStk[APP_TASK_MODBUS_SEND_STK_SIZE]; |
|
|
|
|
|
|
|
/*定义任务主体函数*/ |
|
|
|
void AppTaskStart (void *p_arg); |
|
|
|
void AppTaskModbusParse (void *p_arg); |
|
|
|
void AppTaskModbusSend (void *p_arg); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main() |
|
|
|
{ |
|
|
|
Sys_Config(); /* stm32系统初始化配置 */ |
|
|
|
|
|
|
|
ModbusHardwareInit(); |
|
|
|
|
|
|
|
OSInit(); /* uCOS系统初始化 */ |
|
|
|
|
|
|
|
/*创建初始启动任务*/ |
|
|
|
OSTaskCreateExt(AppTaskStart, /* task:任务入口函数 */ |
|
|
|
(void *)0, /* p_arg:传给任务的用户参数;不用时传 NULL */ |
|
|
|
(OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1], /* ptos:向低地址增长时的初始栈顶,使用数组高地址端 */ |
|
|
|
(INT8U )APP_TASK_START_PRIO, /* prio:唯一优先级,也是 II 管理任务时最常用的标识 */ |
|
|
|
(INT16U )APP_TASK_START_PRIO, /* id:用户任务编号;不参与调度,一般与任务优先级相同 */ |
|
|
|
(OS_STK *)&AppTaskStartStk[0], /* pbos:栈底;栈检查从此处识别未使用区域 */ |
|
|
|
(INT32U )APP_TASK_START_STK_SIZE, /* stk_size:OS_STK 元素个数,不是字节数。总大小为OS_STK大小(1/2/4字节) * 任务堆栈大小 */ |
|
|
|
(void *)0, /* pext:用户 TCB 扩展区指针;不用时传 NULL */ |
|
|
|
(INT16U )(OS_TASK_OPT_STK_CHK /* opt:允许栈使用量检查 */ |
|
|
|
| OS_TASK_OPT_STK_CLR)); /* 创建时清零栈,为检查提供已知填充值 */ |
|
|
|
|
|
|
|
OSStart(); /*启动操作系统,开始系统调度*/ |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*初始启动任务*/ |
|
|
|
void AppTaskStart(void *p_arg) |
|
|
|
{ |
|
|
|
OS_CPU_SR cpu_sr; /*关中断前必须进行的操作*/ |
|
|
|
(void)p_arg; /*防止编译器警告*/ |
|
|
|
|
|
|
|
OS_CPU_SysTickInit(); /*配置滴答定时器*/ |
|
|
|
|
|
|
|
OS_ENTER_CRITICAL(); /* 关中断 */ |
|
|
|
|
|
|
|
/*创建信号量*/ |
|
|
|
ModbusReceived = OSSemCreate(0); |
|
|
|
ModbusAssembled = OSSemCreate(0); |
|
|
|
|
|
|
|
/* 创建modbus协议帧解析任务 */ |
|
|
|
OSTaskCreateExt(AppTaskModbusParse, |
|
|
|
(void *)0, |
|
|
|
(OS_STK *)&AppTaskModbusParseStk[APP_TASK_MODBUS_PARSE_STK_SIZE - 1], |
|
|
|
(INT8U )APP_TASK_MODBUS_PARSE_PRIO, |
|
|
|
(INT16U )APP_TASK_MODBUS_PARSE_PRIO, |
|
|
|
(OS_STK *)&AppTaskModbusParseStk[0], |
|
|
|
(INT32U )APP_TASK_MODBUS_PARSE_STK_SIZE, |
|
|
|
(void *)0, |
|
|
|
(INT16U )(OS_TASK_OPT_STK_CHK |
|
|
|
| OS_TASK_OPT_STK_CLR)); |
|
|
|
|
|
|
|
/* 创建modbus响应帧发送任务 */ |
|
|
|
OSTaskCreateExt(AppTaskModbusSend, |
|
|
|
(void *)0, |
|
|
|
(OS_STK *)&AppTaskModbusSendStk[APP_TASK_MODBUS_SEND_STK_SIZE - 1], |
|
|
|
(INT8U )APP_TASK_MODBUS_SEND_PRIO, |
|
|
|
(INT16U )APP_TASK_MODBUS_SEND_PRIO, |
|
|
|
(OS_STK *)&AppTaskModbusSendStk[0], |
|
|
|
(INT32U )APP_TASK_MODBUS_SEND_STK_SIZE, |
|
|
|
(void *)0, |
|
|
|
(INT16U )(OS_TASK_OPT_STK_CHK |
|
|
|
| OS_TASK_OPT_STK_CLR)); |
|
|
|
|
|
|
|
OSTaskDel(OS_PRIO_SELF); /* 删除启动任务自身 */ |
|
|
|
|
|
|
|
OS_EXIT_CRITICAL(); /* 关中断 */ |
|
|
|
} |
|
|
|
|
|
|
|
|