📄 main.c
字号:
unsigned char err;
unsigned char *msg;
unsigned char temp;
unsigned int tempstep;
unsigned int step;
char result;
pdata = pdata;
for(;;)
{
msg = (unsigned char*)OSMboxPend(WatTemp_MBox, 0, &err);
if(err == OS_NO_ERR)
{
if(*msg > 40)
{
temp = (*msg - 40);
temp = temp >> 3; //换算为转角第一步 /8 水温换算为转角:*(90/(120-40))
temp = temp * 9; //换算为转角第二步 *9 90:转角满量程,80:水温满量程
}
else
{
temp = 0;
}
step = (unsigned int)temp * 48; //换算为电机步数 (*48)
tempstep = (unsigned int)step;
result = motor_move(TEMP,tempstep);
}
OSTimeDly(150); //任务挂起3s
}
}
/****************************************************************************************
@函数名称 : void TaskOilPress(void* pdata)
@参数 : void* pdata
@返回值 : None
@描述 : 机油压力任务
@作者 : 孙进,曹磊
@最后编辑时间 : 2006-03-31
@版本 : V3.1.0
*****************************************************************************************/
void TaskOilPres(void* pdata)
{
unsigned char err;
unsigned char *msg;
unsigned char pres;
unsigned int presstep;
unsigned int step;
char result;
pdata = pdata;
for(;;)
{
msg = (unsigned char*)OSMboxPend(OilPres_MBox, 0, &err);
if(err == OS_NO_ERR)
{
pres = *msg;
pres = pres >> 4; //换算为kpa (*4)
step = (unsigned int)(pres * 459); //换算为电机步数
presstep = (unsigned int)step;
result = motor_move(PRES,presstep);
}
OSTimeDly(50); //任务挂起3s
}
}
#if MUTIPLE_PACKAGE_TRANSPORT //如果使用多包传输,则启动TaskFaultCode任务
/****************************************************************************************
@函数名称 : void TaskFaultCode(void* pdata)
@参数 : void* pdata
@返回值 : None
@描述 : 故障代码任务
@作者 : 孙进
@最后编辑时间 : 2006-03-31
@版本 : V3.1.0
*****************************************************************************************/
void TaskFaultCode(void* pdata)
{
unsigned char err;
FAULT_CODE_T *msg;
unsigned char i;
pdata = pdata;
for(;;)
{
msg = (FAULT_CODE_T *)OSMboxPend(FaultCode_MBox, 0, &err);
if(err == OS_NO_ERR)
{
OSSemPend(Printp_Sem,0,&err);
for(i=0;i<msg->count;i++)
{
printp("FT%d ",i+1);
printp("spn=%ld ",msg->fault_code[i].spn);
printp("fmi=%d ",msg->fault_code[i].fmi);
printp("oc=%d ",msg->fault_code[i].oc);
printp("\n");
}
OSSemPost(Printp_Sem);
OSTimeDly(50); //任务挂起1s
}
}
}
#endif
/****************************************************************************************
@函数名称 : void TaskInstruc(void* pdata)
@参数 : void* pdata
@返回值 : None
@描述 : 通过协议栈发送数据请求任务
@作者 : 孙进,曹磊
@最后编辑时间 : 2006-03-31
@版本 : V3.1.0
*****************************************************************************************/
void TaskInstruc(void* pdata)
{
unsigned char err;
unsigned char *msg;
pdata = pdata;
for(;;)
{
msg = (unsigned char*)OSMboxPend(Instruc_MBox, 0, &err);
if(err == OS_NO_ERR)
{
J1939msg.PGN = 59904;
J1939msg.priority = 6;
J1939msg.byte_count = 3;
J1939msg.data[0] = 0xe5;
J1939msg.data[1] = 0xfe;
J1939msg.data[2] = 0x00;
if(*msg == 'g')
{
J1939msg.dest_addr = 255;
}
else if(*msg == 's')
{
J1939msg.dest_addr = 0;
}
else
{}
Trans_J1939msg(&J1939msg);
}
}
}
/****************************************************************************************
@函数名称 : void TaskVehDistance(void* pdata)
@参数 : void* pdata
@返回值 : None
@描述 : 行车里程显示任务
@作者 : 曹磊
@最后编辑时间 : 2006-03-31
@版本 : V3.1.0
*****************************************************************************************/
void TaskVehDistance(void* pdata)
{
unsigned char err;
VEH_DISTANCE_T *msg;
pdata = pdata;
for(;;)
{
msg = (VEH_DISTANCE_T *)OSMboxPend(VehDistance_MBox, 0, &err);
if(err == OS_NO_ERR)
{
DisplayNone();
DisplayTripDistance(msg->trip_data>>3, 0);
DisplayTotalDistance(msg->total_data>>3);
}
OSTimeDly(150); //任务挂起3s
}
}
void TaskGeneralSignal(void* pdata)
{
unsigned char err;
unsigned int *msg;
unsigned int temp;
unsigned int SignalNum;
pdata = pdata;
for(;;)
{
msg = (unsigned int*)OSMboxPend(GeneralSignal_MBox, 0, &err);
if(err == OS_NO_ERR)
{
temp = *msg;
SignalNum = temp >> 8;
switch (SignalNum)
{
case 3:
{
if((temp<<8)>>8)
{
PTH_PTH4 = 1;
}
else
{
PTH_PTH4 = 0;
}
}
break;
case 4:
{
if((temp<<8)>>8)
{
PTH_PTH3 = 1;
}
else
{
PTH_PTH3 = 0;
}
}
break;
case 5:
{
if((temp<<8)>>8)
{
PTH_PTH2 = 1;
}
else
{
PTH_PTH2 = 0;
}
}
break;
case 6:
{
if((temp<<8)>>8)
{
PTH_PTH1 = 1;
}
else
{
PTH_PTH1 = 0;
}
}
break;
case 7:
{
if((temp<<8)>>8)
{
PTH_PTH0 = 1;
}
else
{
PTH_PTH0 = 0;
}
}
break;
case 8:
{
if((temp<<8)>>8)
{
PTJ_PTJ3 = 1;
}
else
{
PTJ_PTJ3 = 0;
}
}
break;
case 9:
{
if((temp<<8)>>8)
{
PTJ_PTJ2 = 1;
}
else
{
PTJ_PTJ2 = 0;
}
}
break;
case 10:
{
if((temp<<8)>>8)
{
PTJ_PTJ1 = 1;
}
else
{
PTJ_PTJ1 = 0;
}
}
break;
case 11:
{
if((temp<<8)>>8)
{
PTJ_PTJ0 = 1;
}
else
{
PTJ_PTJ0 = 0;
}
}
break;
case 12:
{
if((temp<<8)>>8)
{
PTL_PTL7 = 1;
}
else
{
PTL_PTL7 = 0;
}
}
break;
default:
break;
}
}
OSTimeDly(25); //任务挂起1s
}
}
void TaskEmergSignal(void* pdata)
{
unsigned char err;
unsigned int *msg;
unsigned int temp;
unsigned int SignalNum;
pdata = pdata;
for(;;)
{
OSSemPend(EmergFlg_Sem,0,&err);
msg = (unsigned int*)OSMboxPend(EmergSignal_MBox, 0, &err);
if(err == OS_NO_ERR)
{
temp = *msg;
SignalNum = temp >> 8;
switch (SignalNum)
{
case 1:
{
if((temp<<8)>>8)
{
PTH_PTH6 = 1;
}
else
{
PTH_PTH6 = 0;
}
}
break;
case 2:
{
if((temp<<8)>>8)
{
PTH_PTH5 = 1;
}
else
{
PTH_PTH5 = 0;
}
}
break;
default:
break;
}
}
}
}
/****************************************************************************************
@函数名称 : void SCIReceive_ISR(void)
@参数 : None
@返回值 : None
@描述 : 串口接收中断服务程序
@作者 : 孙进
@最后编辑时间 : 2006-03-31
@版本 : V3.1.0
*****************************************************************************************/
#pragma TRAP_PROC
void SCIReceive_ISR(void)
{
OSIntEnter();
OS_SAVE_SP();
SCI0SR1_RDRF = 0; //clear interrupt
Instruction = SCI0DRL;
Instruc_ptr = &Instruction;
OSMboxPost(Instruc_MBox,Instruc_ptr);
OSIntExit();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -