提交SMOD ATSC IMX APP版本 V122
This commit is contained in:
@@ -0,0 +1,395 @@
|
||||
/**********************************************************************
|
||||
RTOS底层接口函数头文件
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __OS_TASK_H
|
||||
#define __OS_TASK_H
|
||||
#include "type.h"
|
||||
//#include "FreeRTOS.h"
|
||||
//#include "queue.h"
|
||||
//#include "task.h"
|
||||
#include "config.h"
|
||||
#include "isys_config.h"
|
||||
|
||||
#define WATCHDOG_ENABLE (0)
|
||||
#define TASK_CHK_ENABLE (1)
|
||||
|
||||
|
||||
|
||||
#define USE_LCD_MOUDLE (1)
|
||||
#define USE_WEB_MODULE (1)
|
||||
|
||||
//@TMP_NOT_USED
|
||||
//#define USE_LOG_MODULE (1)
|
||||
|
||||
|
||||
#define OS_TICKS_PER_SEC (configTICK_RATE_HZ)
|
||||
#define OS_WAIT_FOREVER (portMAX_DELAY)
|
||||
#define OS_PER_TICK_MS (portTICK_RATE_MS)
|
||||
|
||||
#define OS_TASK_OK (0)
|
||||
#define OS_TASK_MAX_ABNORMAL_TIME (30) //异常最大允许时间
|
||||
|
||||
#define OS_MSG_MAGIC_WORD (0X5533)
|
||||
#define OS_MSG_ISR_TASK_ID (0XFF) //自定义的中断的任务ID
|
||||
|
||||
#define USE_MSG_DEBUG 0 //是否启用消息debug模式
|
||||
#define USE_MEM_DEBUG 1
|
||||
|
||||
|
||||
#define MAX_TIMER_NUM 10
|
||||
|
||||
|
||||
#define ERR_NO_ERR 0
|
||||
#define ERR_CREATE_TASK_FAILED 1
|
||||
#define ERR_INVALID_PARA 2
|
||||
#define ERR_INVALID_POINTER 3
|
||||
#define ERR_TASKID_TOO_LARGE 4
|
||||
#define ERR_NO_MEM 5
|
||||
#define ERR_CREATE_QUEUE_FAILED 6
|
||||
#define ERR_SEND_MSG_FAILED 7
|
||||
#define ERR_SEM_PTR_INVALID 8
|
||||
#define ERR_POST_SEM_FAILED 9
|
||||
#define ERR_PEND_SEM_FAILED 10
|
||||
|
||||
#define ERR_MUTEX_PTR_INVALID 11
|
||||
#define ERR_TAKE_MUTEX_FAILED 12
|
||||
#define ERR_GIVE_MUTEX_FAILED 13
|
||||
#define ERR_I2C_NUM_ERR 14
|
||||
#define ERR_SPI_NUM_ERR 15
|
||||
#define ERR_CREATE_SEM_FAILED 16
|
||||
#define ERR_CREATE_MUTEX_FAILED 17
|
||||
|
||||
typedef void * SEM_HANDLE;
|
||||
typedef void * MUTEX_HANDLE;
|
||||
|
||||
typedef uint32 HANDLE;
|
||||
|
||||
|
||||
#define USE_DEBUG_UART 0 //串口调试信息开关 提交版本库时,本值必须为0
|
||||
|
||||
#if USE_DEBUG_UART //串口信息调试,可直接调用printf打印输出
|
||||
#define DEBUG_UART 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
#if USE_DEBUG_UART
|
||||
extern int printf(const char *,...);
|
||||
#else
|
||||
#include "stdio.h"
|
||||
#define printf(p,...) //若没开启调试模式,printf定义为空
|
||||
#endif
|
||||
*/
|
||||
|
||||
/*
|
||||
typedef struct
|
||||
{
|
||||
uint16 type;
|
||||
uint16 need_free; //若为申请消息,此位不要用,默认已填充释放标记
|
||||
uint16 wPara;
|
||||
uint16 rPara;
|
||||
uint32 lPara;
|
||||
}MSG,*pMSG;*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MSG msg;
|
||||
uint16 magci_word;
|
||||
uint8 alloc_id;
|
||||
uint8 rec_id;
|
||||
}MSG_DEBUG;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 tick;
|
||||
uint32 size;
|
||||
}MEM_DEBUG_HEADER;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
#if USE_MEM_DEBUG
|
||||
MEM_DEBUG_HEADER header;
|
||||
#endif
|
||||
uint8 mem[1];
|
||||
}MEM_PTR;
|
||||
|
||||
|
||||
#define MAX_TASK 16 //当前用户层任务上限 不包含以太网以及系统任务
|
||||
|
||||
|
||||
//数组下标为task_id
|
||||
typedef struct
|
||||
{
|
||||
uint32 num;
|
||||
uint8 created[MAX_TASK]; //任务是否建立标识
|
||||
uint8 status[MAX_TASK];
|
||||
uint8 pause[MAX_TASK]; //暂停时间长度,单位 秒
|
||||
uint8 ignore_chk[MAX_TASK]; //忽略检查,特殊任务使用
|
||||
xQueueHandle queue[MAX_TASK];
|
||||
}SYS_TASK,*pSYS_TASK;
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 isr_send_num;
|
||||
uint32 task_send_num;
|
||||
uint32 isr_alloc_num;
|
||||
uint32 task_alloc_num;
|
||||
uint32 free_num;
|
||||
}S_MSG_STATE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 used;
|
||||
uint32 total;
|
||||
}S_MEM_STATE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 min_num;
|
||||
uint32 min_msg_q[MAX_TASK];
|
||||
uint32 sec_num;
|
||||
uint32 sec_msg_q[MAX_TASK]; //依次存放配置的任务ID
|
||||
}TIME_MSG_Q;
|
||||
|
||||
typedef struct
|
||||
{ //待扩展
|
||||
uint32 reset_total_time;
|
||||
S_SYS_TIME close_time;
|
||||
|
||||
#if USE_LCD_MOUDLE
|
||||
uint8 os_log[1];
|
||||
#endif
|
||||
|
||||
}S_BACKUP_MEM;
|
||||
|
||||
|
||||
//持续按键,等待间隔
|
||||
#define KEY_DELAY_TIME (300)
|
||||
#define TMR_IDLE 0
|
||||
#define TMR_RUN 1
|
||||
#define TMR_STOP 2
|
||||
#define TMR_TYPE_ONE 0
|
||||
#define TMR_TYPE_CYCLE 1
|
||||
|
||||
#define MSG_NEED_FREE (0x55)
|
||||
#define MSG_NO_NEED_FREE (0xaa)
|
||||
|
||||
#define MSG_NEED_TO_FREE(pmsg) (pmsg->need_free==MSG_NEED_FREE)
|
||||
|
||||
|
||||
enum{RET_OK = 0,RET_ERR,RET_NO_MEM,RET_NOT_FIND,RET_RET_ERR,RET_WRITE_FAIL,RET_READ_FAIL};
|
||||
|
||||
|
||||
typedef struct __TIMER
|
||||
{
|
||||
uint32 state;
|
||||
uint32 ticks;
|
||||
uint32 count;
|
||||
uint32 type;
|
||||
uint32 task_id; //由创建该消息的接收
|
||||
MSG msg;
|
||||
}TIMER,*PTIMER;
|
||||
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MSG_RS232 = 0x10,
|
||||
MSG_ETH,
|
||||
MSG_SEC,
|
||||
MSG_MINUTE,
|
||||
MSG_WRITE_PARA,
|
||||
MSG_READ_PARA,
|
||||
MSG_KEY,
|
||||
MSG_TIMER,
|
||||
MSG_UPGRADE,
|
||||
MSG_HTTP_UPDATE, //http发送给液晶做update校正,
|
||||
MSG_WEB_SAVE_PARA,
|
||||
MSG_FPGA_UPGRADE,//MSG_FPGA_UPGRADE_OVER
|
||||
MSG_UDP_ALRM,
|
||||
MSG_UART_ALRM,
|
||||
MSG_LOG,
|
||||
MSG_LOG_RECORD_RESET,
|
||||
MSG_UART_RE_INIT,
|
||||
MSG_SHOW_WAIT,
|
||||
MSG_PSTS_UPDATE,
|
||||
MSG_MCU_REBOOT,
|
||||
|
||||
|
||||
MSG_IGMP_REINIT,
|
||||
}MSG_TYPE;
|
||||
|
||||
enum{
|
||||
DISPLAY_FPGA_UPGRADE_OVER=1,
|
||||
DISPLAY_FPGA_UPGRADE_ERR,
|
||||
DISPLAY_FPGA_UPGRADE_BUSY_TIMEOUT,
|
||||
|
||||
DISPALY_RFAGC_ERR_POWER_LOW,
|
||||
DISPALY_RFAGC_ERR_POWER_HIGH
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
E_RA = 0x10,
|
||||
W_SYSTEM,
|
||||
W_RF,
|
||||
W_WA,
|
||||
W_WB,
|
||||
W_WC,
|
||||
W_WD,
|
||||
W_WE,
|
||||
W_WF,
|
||||
W_RF_DELAY,
|
||||
W_ADPC,
|
||||
W_CONFIGA,
|
||||
W_CONFIGB,
|
||||
W_CONFIGC,
|
||||
W_CONFIGD,
|
||||
W_HTTP_CGI1,
|
||||
W_HTTP_CGI2,
|
||||
W_UPDATE_STOP,
|
||||
W_UPDATE,
|
||||
W_OUTPUT,
|
||||
W_FAC_C,
|
||||
W_FAC_F,
|
||||
W_FAC_H,
|
||||
W_RF_ONLY,
|
||||
W_SIM_TEST,
|
||||
W_SIM_PW_ERR,
|
||||
W_SIM_PARA,
|
||||
|
||||
R_LOG = 100,
|
||||
R_RF_DELAY,
|
||||
R_UPDATE, //不可超过255 0xff
|
||||
R_SIM_PARA,
|
||||
R_LOG4,
|
||||
}PARA_TYPE;
|
||||
/*
|
||||
#define UART_RCV_BUF_LEN (1024)
|
||||
#define UART_SEND_BUF_LEN (256)
|
||||
#define UART_REC_BUF_BAK (1<<2) ////必须全bit都为1的值+1 串口接收缓冲区
|
||||
#define UART_PORT_NUM (3) //(4)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 valid;
|
||||
uint32 task_id; //处理串口消息任务ID
|
||||
MUTEX_HANDLE mutex;
|
||||
MSG msg[UART_REC_BUF_BAK];
|
||||
uint16 index;
|
||||
uint16 length; //发送长度
|
||||
uint32 buf_cnt;
|
||||
uint8 buffer[UART_REC_BUF_BAK][UART_RCV_BUF_LEN];
|
||||
}S_UART_RX_CTRL;
|
||||
*/
|
||||
/**********************当前文件提供的对外API函数*************************************************/
|
||||
uint32 create_task(void (*fun)(void*),char* pcname,uint32 task_id,uint32 task_pro,uint32 stacksize,uint32 queuesize);
|
||||
uint32 task_set_ignore_chk(uint32 task_id);
|
||||
|
||||
uint32 send_msg(uint32 task_id,pMSG pmsg);
|
||||
pMSG get_msg(uint32 wait_ticks);
|
||||
|
||||
MSG* alloc_msg(void);
|
||||
void free_msg(pMSG p);
|
||||
|
||||
void *alloc_mem(uint32 size);
|
||||
void free_mem(void* pmem);
|
||||
|
||||
//信号量相关函数,pend函数(等待),只能在正常任务中使用,post任务体,中断均可使用
|
||||
//主要用来在中断中post,然后再一个任务中pend(阻塞型),减少中断处理时间并加快任务响应速度
|
||||
SEM_HANDLE create_sem(uint32 max_count,uint32 init_count);
|
||||
uint32 pend_sem(SEM_HANDLE sem_hd,uint32 wait_ticks);
|
||||
uint32 post_sem(SEM_HANDLE sem_hd);
|
||||
|
||||
|
||||
//互斥相关函数,只能在正常任务体中使用,不能用于中断 一般在多任务资源共享时使用 使用时take(若take不到,将会阻塞),用完后及时give
|
||||
//时间短的操作,可以关任务调度实现
|
||||
MUTEX_HANDLE create_mutex(void);
|
||||
uint32 take_mutex(MUTEX_HANDLE mtx_hd);
|
||||
uint32 give_mutex(MUTEX_HANDLE mtx_hd);
|
||||
|
||||
|
||||
void os_int_enter(void);
|
||||
void os_int_exit(void);
|
||||
|
||||
uint32 os_get_free_heap_size(void);
|
||||
|
||||
S_SYS_TIME *os_get_sys_time_ptr(void);
|
||||
uint32 get_cpu_useage(void);
|
||||
void send_clk_msg(void);
|
||||
void calc_cpu_usage(void);
|
||||
//void get_sys_time(S_SYS_TIME* pt);
|
||||
void update_sys_time_by_rtc(void);
|
||||
uint32 config_time_msg(uint32 type);
|
||||
void sys_para_init(void);
|
||||
//#define get_sys_tick xTaskGetTickCount
|
||||
void get_msg_state(S_MSG_STATE *pstate);
|
||||
void get_mem_state(S_MEM_STATE *pstate); //仅在内存调试打开时有效
|
||||
uint32 get_current_task_id(uint32 *pid);
|
||||
uint32 get_task_id(uint32 *pid,void *ptcb);
|
||||
void task_is_ok(void);
|
||||
uint32 task_chk_status(void);
|
||||
void os_dead_task_abnormal(uint32 task_id);
|
||||
void os_dead_wwdg(void);
|
||||
void task_stop_sec_msg(void);
|
||||
void task_resume_sec_msg(void);
|
||||
/******************************************END*****************************************************/
|
||||
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
extern uint32 get_sys_clk(void);
|
||||
|
||||
#if configUSE_CALC_CPU_USAGE
|
||||
extern uint32 get_idle_run_time(void);
|
||||
extern void set_idle_run_time(uint32);
|
||||
#endif
|
||||
|
||||
|
||||
#define OS_DEFAULT_STACK_SIZE (configMINIMAL_STACK_SIZE*2) //默认1k字节
|
||||
#define OS_DEFAULT_QUEUE_SIZE (100*sizeof(void*))
|
||||
|
||||
|
||||
|
||||
/*--------------- Tasks ID -------------*/
|
||||
|
||||
//同一优先级任务可创建多个,
|
||||
typedef enum
|
||||
{
|
||||
PRIORITY_VERY_HIGH = (tskIDLE_PRIORITY+4), //最高优先级任务,
|
||||
PRIORITY_HIGH = (tskIDLE_PRIORITY+3), //特殊任务,如主任务等
|
||||
PRIORITY_NORMAL = (tskIDLE_PRIORITY+2), //默认优先级
|
||||
PRIORITY_LOW = (tskIDLE_PRIORITY+1), //低优先级任务
|
||||
|
||||
}E_TASK_RPIPRITY;
|
||||
|
||||
enum E_TASK_ID
|
||||
{
|
||||
MAIN_TASK_ID = 0,
|
||||
LCD_TASK_ID,
|
||||
UART_TASK_ID,
|
||||
GPS_TASK_ID,
|
||||
WEB_TASK_ID,
|
||||
|
||||
LOG_TASK_ID,// 5
|
||||
TCP_REMOTE_TASK_ID,
|
||||
FPGA_UPGRADE_TASK_ID,
|
||||
SWAP_TASK_ID,
|
||||
SPECT_TASK_ID,
|
||||
|
||||
UDP_REMOTE_TASK_ID,// 10
|
||||
SNTP_TASK_ID,
|
||||
TEST_TASK_ID,
|
||||
AUTO_UDP_TASK_ID,
|
||||
IDLE_TASK_ID,// 14
|
||||
}; //任务序号,必须全局唯一,否则会出现异常
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user