📄 task_transdata.c
字号:
#include "config.h"
static volatile uint8 data SendTimes=1,FrameID=0; //只限本文件内使用的静态外部变量
static volatile uint8 data AckResult=_ERROR;
static volatile uint8 data TimeExpire=OS_Q_TMO;
static volatile uint8 data EndFlag;
void Task_TransData(void)
{
uint8 (*p_data)[_DataWidth]=SendData,i;
while(1)
{
OSWait(K_SIG,0);
FrameID=0;
for(i=0;i<_DataWidth;i++,p_data++)
{
SendTimes = 1; AckResult = _ERROR; EndFlag=_STARTBYTE1;
// 0x08表示是本次传输的最后一帧(ControlByte.LastFrame=TRUE)
if(EndFlag==_END) FrameType = (_DataFrame|0x08)+FrameID;
else FrameType = _DataFrame+FrameID;
EndFlag = _END;
do
{
Transmit(DesAddr,p_data,FrameType);
TimeExpire=OSQPend(&AckResult,AckInBuf,3);
}while((TimeExpire==OS_Q_TMO || AckResult==_ERROR) && (++SendTimes)<=3);
PutChar(AckResult); // 应答结果送到PC上
FrameID++;
if(AckResult==_ERROR)
{ _TURN_ON_WRONG; break; } //说明无法进行通信
else _TURN_ON_RIGHT;
} //for(;;)
}// while(1)
}
/*void Task_TransData(void)
{
uint8 data head1,head2;
OSQCreate(SerialInBuf,SendBuf);
while(1)
{
OSQPend(&head1,SerialInBuf,0); // 等待从UART口接收一个字节
while (1)
{
OSQPend(&head2,SerialInBuf,0); // 接收一个字节
if ((head1 == _STARTBYTE1) && (head2 == _STARTBYTE2))
{
break; // 接收到起始字符
}
head1 = head2;//不是起始帧头,重新开始接收(忽略已经收到的字节)
}
OSQPend(&DesAddr,SerialInBuf,0);
FrameID=0;
do
{
for(DataCnt=0;DataCnt<_DataWidth;DataCnt++)
{ OSQPend(SendData+DataCnt,SerialInBuf,0); }
OSQPend(&EndFlag,SerialInBuf,0);
SendTimes = 1; AckResult = _ERROR;
// 0x08表示是本次传输的最后一帧(ControlByte.LastFrame=TRUE)
if(EndFlag==_END) FrameType = (_DataFrame|0x08)+FrameID;
else FrameType = _DataFrame+FrameID;
do
{
Transmit(DesAddr,FrameType);
TimeExpire=OSQPend(&AckResult,AckInBuf,3);
}while((TimeExpire==OS_Q_TMO || AckResult==_ERROR) && (++SendTimes)<=3);
PutChar(AckResult); // 应答结果送到PC上
FrameID++;
if(AckResult==_ERROR) break; //说明无法进行通信
}while(EndFlag != _END); // 表明本次向目标方发送数据的任务完成了(一次可发送N帧数据(N<=8))
}// while(1)
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -