📄 3.3ucosmovementcontrol.c
字号:
//***************************************************************************************************************
// FILE NAME : MovementControl.C
// FILE DESCRIPTION :
// TARGET DEVICE : C8051F021
// CREATED ON : 2007.12.29
// CREATED BY : yuanwq
// VERSION : 1.00
// MODIFY RECORD :
// uCOS-II VERSION : 2.51
//****************************************************************************************************************
//****************************************************************************************************************
// Include File
//****************************************************************************************************************
#include "includes.h"
#include "FunctionPrototype.h"
//#include "Movement_speed.h"
//STACK Define
//*****************************************************************************************************************
OS_STK LED_TestSTK[MaxStkSize];
//OS_STK TL16C554communicateRXSTK[MaxStkSize];
OS_STK FRENIC_RS485TXSTK[MaxStkSize];
//OS_STK FALDIC_RS422TXSTK[MaxStkSize];
//OS_STK TL16C554communicateProcessSTK[MaxStkSize];
//OS_STK TL16C554TestTaskSTK[MaxStkSize];
//----------------------------------------------------------------------------------------------------------------
sbit LED = P1^6;
#include "Movement_speed.h"
//TASK Function
//*****************************************************************************************************************
void LED_Test(void *nouse) reentrant;
//void TL16C554communicateRX(void *nouse) reentrant;
void FRENIC_RS485TX(void *nouse) reentrant;
//void FALDIC_RS422TX(void *nouse) reentrant;
//void TL16C554communicateProcess(void *nouse) reentrant;
//void TL16C554TestTask(void *nouse) reentrant;
//MAIN ROUTINE
//*****************************************************************************************************************
void main(void)
{
INT8U ERROR_NUMBER;
Hardware_Init(); //-------------------------------------------------------------------------- 硬件初始化程序
Variables_Init(); //-------------------------------------------------------------------------- 变量初始化程序
OSInit();
SET_STATUS(Q0_Output,Q_En_Move);
XBYTE[Q0_Address] = Q0_Output.Now_Flag;
//---- 创建信号量
//TL16C554_RXSEM = OSSemCreate(0);
//while(!TL16C554_RXSEM);
FRENIC_RS485TXMUX = OSSemCreate(1);
while(!FRENIC_RS485TXMUX);
//TL16C554_TXMUX = OSSemCreate(2);
//while(!TL16C554_TXMUX);
//---- 创建邮箱
//TxTL16C554Mbox_A = OSMboxCreate((void *) 0);
//while(!TxTL16C554Mbox_A);
//TxTL16C554Mbox_B = OSMboxCreate((void *) 0);
//while(!TxTL16C554Mbox_B);
//TxTL16C554Mbox_C = OSMboxCreate((void *) 0);
//while(!TxTL16C554Mbox_C);
//TxTL16C554Mbox_D = OSMboxCreate((void *) 0);
//while(!TxTL16C554Mbox_D);
//---- 创建队列
FRENIC_RS485TXMsg = OSQCreate(&TxTL16C554MsgTbl[0],5);
while(!FRENIC_RS485TXMsg);
//RxTL16C554Msg = OSQCreate(&RxTL16C554MsgTbl[0],5);
//while(!RxTL16C554Msg);
//TL16C554ProcessMsg = OSQCreate(&TL16C554ProcessMsgTbl[0],5);
//while(!TL16C554ProcessMsg);
//TL16C554TestMsg = OSQCreate(&TL16C554TestMsgTbl[0],5);
//while(!TL16C554TestMsg);
//---- 创建内存分区
CommunicateBUF = OSMemCreate(CommunicatePART,COM_BLOCK_NUM,COM_BLOCK_SIZE,&ERROR_NUMBER);
while(ERROR_NUMBER);
//---- 创建任务
//ERROR_NUMBER = OSTaskCreate(TL16C554communicateRX, (void *)0, &TL16C554communicateRXSTK[0],4);
//while(ERROR_NUMBER);
//---- 测试灯任务:使测试LED间隔1s闪烁
ERROR_NUMBER = OSTaskCreate(LED_Test, (void *)0, &LED_TestSTK[0],14);
while(ERROR_NUMBER);
//----变频器发送任务
ERROR_NUMBER = OSTaskCreate(FRENIC_RS485TX, (void *)0, &FRENIC_RS485TXSTK[0],7);
while(ERROR_NUMBER);
//ERROR_NUMBER = OSTaskCreate(TL16C554communicateProcess, (void *)0, &TL16C554communicateProcessSTK[0],6);
//while(ERROR_NUMBER);
//ERROR_NUMBER = OSTaskCreate(TL16C554TestTask, (void *)0, &TL16C554TestTaskSTK[0],5);
//while(ERROR_NUMBER);
//---- 以Timer0为uCOS系统时钟,对其进行初始化
InitTimer0();
//---- 开始多任务调度
OSStart();
}
void LED_Test(void *nouse) reentrant
{
nouse = nouse;
while(1)
{
LED = ~LED;
OSTimeDly(OS_TICKS_PER_SEC * 1);
}
}
/*void TL16C554communicateRX(void *nouse) reentrant
{
INT8U ErrTL16C554Rx;
INT8U FinishTL16C554Rx = 0;
INT8U RxTL16C554CheckSUM = 0;
INT8U RxTL16C554CheckSUM_H,RxTL16C554CheckSUM_L;
INT8U *MemTL16C554RX_A,*MemTL16C554RX_B,*MemTL16C554RX_C,*MemTL16C554RX_D;
// INT8U RxStat;
nouse = nouse;
while(1)
{
OSSemPend(TL16C554_RXSEM, 0, &ErrTL16C554Rx);
if(TL_16C554_INIT_SY & 0x01)
{
for(TL16C554RX_i = 0;TL16C554RX_i < RevvCharNumber;TL16C554RX_i++)
{
RevvCharFinish_A[TL16C554RX_i + RevvCharNumber_A] = RevvSerialChar_A[TL16C554RX_i];
}
if(RevvCharNumber_A == 0x00)
{
RevvCharNumber_A = 0x08;
}
else
{
RevvCharNumber_A = 0x00;
}
if(RevvCharNumber_A == 0x00)
{
for(TL16C554RX_i = 1;TL16C554RX_i<=13;TL16C554RX_i++)
{
if(TL16C554RX_i == 1)
{
RxTL16C554CheckSUM = RevvCharFinish_A[1];
}
else
{
RxTL16C554CheckSUM += RevvCharFinish_A[TL16C554RX_i];
}
}
RxTL16C554CheckSUM_H = (RxTL16C554CheckSUM & 0xF0) >> 4;
RxTL16C554CheckSUM_L = (RxTL16C554CheckSUM & 0x0F);
RxTL16C554CheckSUM_H = TO_ASCII(RxTL16C554CheckSUM_H);
RxTL16C554CheckSUM_L = TO_ASCII(RxTL16C554CheckSUM_L);
if((RevvCharFinish_A[14] == RxTL16C554CheckSUM_H) && (RevvCharFinish_A[15] == RxTL16C554CheckSUM_L))
{
//---- 数据接收正确,存储数据
if(RevvCharFinish_A[3] == 0x06)
{
MemTL16C554RX_A = (INT8U *)OSMemGet(CommunicateBUF,&ErrTL16C554Rx);
*(MemTL16C554RX_A + 0) = RevvCharFinish_A[1];
*(MemTL16C554RX_A + 1) = RevvCharFinish_A[2];
*(MemTL16C554RX_A + 2) = RevvCharFinish_A[4];
*(MemTL16C554RX_A + 3) = RevvCharFinish_A[5];
*(MemTL16C554RX_A + 4) = RevvCharFinish_A[6];
*(MemTL16C554RX_A + 5) = RevvCharFinish_A[7];
*(MemTL16C554RX_A + 6) = RevvCharFinish_A[9];
*(MemTL16C554RX_A + 7) = RevvCharFinish_A[10];
*(MemTL16C554RX_A + 8) = RevvCharFinish_A[11];
*(MemTL16C554RX_A + 9) = RevvCharFinish_A[12];
OSQPost(RxTL16C554Msg,MemTL16C554RX_A);
}
}
else //校验和错误
{
}
}
}
if(TL_16C554_INIT_SY & 0x02)
{
for(TL16C554RX_i = 0;TL16C554RX_i < RevvCharNumber;TL16C554RX_i++)
{
RevvCharFinish_B[TL16C554RX_i + RevvCharNumber_B] = RevvSerialChar_B[TL16C554RX_i];
}
if(RevvCharNumber_B == 0x00)
{
RevvCharNumber_B = 0x08;
}
else
{
RevvCharNumber_B = 0x00;
}
if(RevvCharNumber_B == 0x00)
{
for(TL16C554RX_i = 1;TL16C554RX_i<=13;TL16C554RX_i++)
{
if(TL16C554RX_i == 1)
{
RxTL16C554CheckSUM = RevvCharFinish_B[1];
}
else
{
RxTL16C554CheckSUM += RevvCharFinish_B[TL16C554RX_i];
}
}
RxTL16C554CheckSUM_H = (RxTL16C554CheckSUM & 0xF0) >> 4;
RxTL16C554CheckSUM_L = (RxTL16C554CheckSUM & 0x0F);
RxTL16C554CheckSUM_H = TO_ASCII(RxTL16C554CheckSUM_H);
RxTL16C554CheckSUM_L = TO_ASCII(RxTL16C554CheckSUM_L);
if((RevvCharFinish_B[14] == RxTL16C554CheckSUM_H) && (RevvCharFinish_B[15] == RxTL16C554CheckSUM_L))
{
//---- 数据接收正确,存储数据
if(RevvCharFinish_B[3] == 0x06)
{/*
MemTL16C554RX_B = (INT8U *)OSMemGet(CommunicateBUF,&ErrTL16C554Rx);
*(MemTL16C554RX_B + 0) = RevvCharFinish_B[1];
*(MemTL16C554RX_B + 1) = RevvCharFinish_B[2];
*(MemTL16C554RX_B + 2) = RevvCharFinish_B[4];
*(MemTL16C554RX_B + 3) = RevvCharFinish_B[5];
*(MemTL16C554RX_B + 4) = RevvCharFinish_B[6];
*(MemTL16C554RX_B + 5) = RevvCharFinish_B[7];
*(MemTL16C554RX_B + 6) = RevvCharFinish_B[9];
*(MemTL16C554RX_B + 7) = RevvCharFinish_B[10];
*(MemTL16C554RX_B + 8) = RevvCharFinish_B[11];
*(MemTL16C554RX_B + 9) = RevvCharFinish_B[12];
OSQPost(RxTL16C554Msg,MemTL16C554RX_B);
*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -