Переглянути джерело

uCOS系统初始化启动

main
the_deepest 1 тиждень тому
джерело
коміт
9ebd4ff5db
2 змінених файлів з 78 додано та 0 видалено
  1. +77
    -0
      app/main.c
  2. +1
    -0
      app/main.h

+ 77
- 0
app/main.c Переглянути файл

@@ -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(); /* 关中断 */
}



+ 1
- 0
app/main.h Переглянути файл

@@ -9,6 +9,7 @@
#include "os.h"
#include "app_cfg.h"
#include "sys_cfg.h"
#include "modbus.h"





Завантаження…
Відмінити
Зберегти