传输口增加最小数据包大小
This commit is contained in:
parent
f4f5180655
commit
8d9143ce56
|
@ -32,6 +32,8 @@ bool ShunCom::OnOpen()
|
||||||
Sys.Delay(100);
|
Sys.Delay(100);
|
||||||
Reset = true;
|
Reset = true;
|
||||||
|
|
||||||
|
Port->MinSize = MinSize;
|
||||||
|
|
||||||
return PackPort::OnOpen();
|
return PackPort::OnOpen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +48,24 @@ void ShunCom::OnClose()
|
||||||
PackPort::OnClose();
|
PackPort::OnClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShunCom::ShowConfig()
|
||||||
|
{
|
||||||
|
if(!Open()) return;
|
||||||
|
|
||||||
|
Config = true;
|
||||||
|
Sys.Sleep(3000);
|
||||||
|
|
||||||
|
byte buf[] = { 0xFE, 0x00, 0x21, 0x15, 0x34 };
|
||||||
|
ByteArray bs(buf, ArrayLength(buf));
|
||||||
|
Write(bs);
|
||||||
|
|
||||||
|
Sys.Sleep(300);
|
||||||
|
|
||||||
|
ByteArray rs;
|
||||||
|
Read(rs);
|
||||||
|
rs.Show(true);
|
||||||
|
}
|
||||||
|
|
||||||
bool ShunCom::OnWrite(const ByteArray& bs)
|
bool ShunCom::OnWrite(const ByteArray& bs)
|
||||||
{
|
{
|
||||||
//Led = !Led;
|
//Led = !Led;
|
||||||
|
|
|
@ -28,6 +28,8 @@ public:
|
||||||
|
|
||||||
void Init(ITransport* port, Pin rst = P0);
|
void Init(ITransport* port, Pin rst = P0);
|
||||||
|
|
||||||
|
void ShowConfig();
|
||||||
|
|
||||||
virtual bool OnWrite(const ByteArray& bs);
|
virtual bool OnWrite(const ByteArray& bs);
|
||||||
// 引发数据到达事件
|
// 引发数据到达事件
|
||||||
virtual uint OnReceive(ByteArray& bs, void* param);
|
virtual uint OnReceive(ByteArray& bs, void* param);
|
||||||
|
|
|
@ -34,6 +34,7 @@ void Controller::Open()
|
||||||
|
|
||||||
assert_param2(Port, "还没有传输口呢");
|
assert_param2(Port, "还没有传输口呢");
|
||||||
|
|
||||||
|
Port->MinSize = MinSize;
|
||||||
// 注册收到数据事件
|
// 注册收到数据事件
|
||||||
Port->Register(Dispatch, this);
|
Port->Register(Dispatch, this);
|
||||||
Port->Open();
|
Port->Open();
|
||||||
|
@ -60,10 +61,16 @@ uint Controller::Dispatch(ITransport* port, ByteArray& bs, void* param, void* pa
|
||||||
|
|
||||||
Controller* control = (Controller*)param;
|
Controller* control = (Controller*)param;
|
||||||
|
|
||||||
|
#if MSG_DEBUG
|
||||||
|
msg_printf("TinyNet::Dispatch[%d] ", len);
|
||||||
|
// 输出整条信息
|
||||||
|
Sys.ShowHex(buf, len, '-');
|
||||||
|
msg_printf("\r\n");
|
||||||
|
#endif
|
||||||
if(len > control->Port->MaxSize)
|
if(len > control->Port->MaxSize)
|
||||||
{
|
{
|
||||||
#if MSG_DEBUG
|
#if MSG_DEBUG
|
||||||
msg_printf("TinyNet::Dispatch ");
|
msg_printf("TinyNet::Dispatch[%d] ", len);
|
||||||
// 输出整条信息
|
// 输出整条信息
|
||||||
Sys.ShowHex(buf, len, '-');
|
Sys.ShowHex(buf, len, '-');
|
||||||
msg_printf("\r\n");
|
msg_printf("\r\n");
|
||||||
|
|
|
@ -8,7 +8,7 @@ ITransport::ITransport()
|
||||||
Opening = false;
|
Opening = false;
|
||||||
Opened = false;
|
Opened = false;
|
||||||
|
|
||||||
//MinSize = 0;
|
MinSize = 0;
|
||||||
MaxSize = 0;
|
MaxSize = 0;
|
||||||
|
|
||||||
_handler = NULL;
|
_handler = NULL;
|
||||||
|
|
|
@ -20,7 +20,7 @@ public:
|
||||||
bool Opening; // 是否正在打开
|
bool Opening; // 是否正在打开
|
||||||
bool Opened; // 是否打开
|
bool Opened; // 是否打开
|
||||||
|
|
||||||
//ushort MinSize; // 数据包最小大小
|
ushort MinSize; // 数据包最小大小
|
||||||
ushort MaxSize; // 数据包最大大小
|
ushort MaxSize; // 数据包最大大小
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
|
|
|
@ -41,6 +41,7 @@ void SerialPort::Init()
|
||||||
Error = 0;
|
Error = 0;
|
||||||
|
|
||||||
IsRemap = false;
|
IsRemap = false;
|
||||||
|
MinSize = 1;
|
||||||
|
|
||||||
_taskidRx = 0;
|
_taskidRx = 0;
|
||||||
}
|
}
|
||||||
|
@ -312,8 +313,10 @@ uint SerialPort::OnRead(ByteArray& bs)
|
||||||
Sys.Delay(_byteTime);
|
Sys.Delay(_byteTime);
|
||||||
len = Rx.Length();
|
len = Rx.Length();
|
||||||
}
|
}
|
||||||
|
// 如果数据大小不足,等下次吧
|
||||||
|
if(len < MinSize) return 0;
|
||||||
|
|
||||||
debug_printf("串口接收 %d 间隔 %dus \r\n", len, _byteTime);
|
debug_printf("串口接收 %d 间隔 %dus 最小 %d \r\n", len, _byteTime, MinSize);
|
||||||
// 从接收队列读取
|
// 从接收队列读取
|
||||||
count = Rx.Read(bs, true);
|
count = Rx.Read(bs, true);
|
||||||
bs.SetLength(count);
|
bs.SetLength(count);
|
||||||
|
@ -328,11 +331,12 @@ void SerialPort::OnRxHandler()
|
||||||
{
|
{
|
||||||
byte dat = (byte)USART_ReceiveData(_port);
|
byte dat = (byte)USART_ReceiveData(_port);
|
||||||
Rx.Push(dat);
|
Rx.Push(dat);
|
||||||
|
//debug_printf(" 0x%02X ", dat);
|
||||||
|
|
||||||
// 收到数据,开启任务调度
|
// 收到数据,开启任务调度
|
||||||
if(_taskidRx) Sys.SetTask(_taskidRx, true);
|
if(_taskidRx) Sys.SetTask(_taskidRx, true);
|
||||||
|
|
||||||
if(!HasHandler()) return;
|
//if(!HasHandler()) return;
|
||||||
|
|
||||||
// 其实内部的USART_ReceiveData可以清除USART_IT_RXNE
|
// 其实内部的USART_ReceiveData可以清除USART_IT_RXNE
|
||||||
//USART_ClearITPendingBit(sp->_port, USART_IT_RXNE);
|
//USART_ClearITPendingBit(sp->_port, USART_IT_RXNE);
|
||||||
|
@ -391,9 +395,9 @@ void SerialPort::OnHandler(ushort num, void* param)
|
||||||
// 读取并扔到错误数据
|
// 读取并扔到错误数据
|
||||||
USART_ReceiveData(sp->_port);
|
USART_ReceiveData(sp->_port);
|
||||||
}
|
}
|
||||||
if(USART_GetFlagStatus(sp->_port, USART_FLAG_NE) != RESET) USART_ClearFlag(sp->_port, USART_FLAG_NE);
|
/*if(USART_GetFlagStatus(sp->_port, USART_FLAG_NE) != RESET) USART_ClearFlag(sp->_port, USART_FLAG_NE);
|
||||||
if(USART_GetFlagStatus(sp->_port, USART_FLAG_FE) != RESET) USART_ClearFlag(sp->_port, USART_FLAG_FE);
|
if(USART_GetFlagStatus(sp->_port, USART_FLAG_FE) != RESET) USART_ClearFlag(sp->_port, USART_FLAG_FE);
|
||||||
if(USART_GetFlagStatus(sp->_port, USART_FLAG_PE) != RESET) USART_ClearFlag(sp->_port, USART_FLAG_PE);
|
if(USART_GetFlagStatus(sp->_port, USART_FLAG_PE) != RESET) USART_ClearFlag(sp->_port, USART_FLAG_PE);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取引脚
|
// 获取引脚
|
||||||
|
|
Loading…
Reference in New Issue