传输口增加最小数据包大小
This commit is contained in:
parent
f4f5180655
commit
8d9143ce56
|
@ -32,6 +32,8 @@ bool ShunCom::OnOpen()
|
|||
Sys.Delay(100);
|
||||
Reset = true;
|
||||
|
||||
Port->MinSize = MinSize;
|
||||
|
||||
return PackPort::OnOpen();
|
||||
}
|
||||
|
||||
|
@ -46,6 +48,24 @@ void ShunCom::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)
|
||||
{
|
||||
//Led = !Led;
|
||||
|
|
|
@ -28,6 +28,8 @@ public:
|
|||
|
||||
void Init(ITransport* port, Pin rst = P0);
|
||||
|
||||
void ShowConfig();
|
||||
|
||||
virtual bool OnWrite(const ByteArray& bs);
|
||||
// 引发数据到达事件
|
||||
virtual uint OnReceive(ByteArray& bs, void* param);
|
||||
|
|
|
@ -34,6 +34,7 @@ void Controller::Open()
|
|||
|
||||
assert_param2(Port, "还没有传输口呢");
|
||||
|
||||
Port->MinSize = MinSize;
|
||||
// 注册收到数据事件
|
||||
Port->Register(Dispatch, this);
|
||||
Port->Open();
|
||||
|
@ -60,10 +61,16 @@ uint Controller::Dispatch(ITransport* port, ByteArray& bs, void* param, void* pa
|
|||
|
||||
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 MSG_DEBUG
|
||||
msg_printf("TinyNet::Dispatch ");
|
||||
msg_printf("TinyNet::Dispatch[%d] ", len);
|
||||
// 输出整条信息
|
||||
Sys.ShowHex(buf, len, '-');
|
||||
msg_printf("\r\n");
|
||||
|
|
|
@ -8,7 +8,7 @@ ITransport::ITransport()
|
|||
Opening = false;
|
||||
Opened = false;
|
||||
|
||||
//MinSize = 0;
|
||||
MinSize = 0;
|
||||
MaxSize = 0;
|
||||
|
||||
_handler = NULL;
|
||||
|
|
|
@ -20,7 +20,7 @@ public:
|
|||
bool Opening; // 是否正在打开
|
||||
bool Opened; // 是否打开
|
||||
|
||||
//ushort MinSize; // 数据包最小大小
|
||||
ushort MinSize; // 数据包最小大小
|
||||
ushort MaxSize; // 数据包最大大小
|
||||
|
||||
// 初始化
|
||||
|
|
|
@ -36,11 +36,12 @@ SerialPort::~SerialPort()
|
|||
|
||||
void SerialPort::Init()
|
||||
{
|
||||
_index = 0xFF;
|
||||
RS485 = NULL;
|
||||
Error = 0;
|
||||
_index = 0xFF;
|
||||
RS485 = NULL;
|
||||
Error = 0;
|
||||
|
||||
IsRemap = false;
|
||||
IsRemap = false;
|
||||
MinSize = 1;
|
||||
|
||||
_taskidRx = 0;
|
||||
}
|
||||
|
@ -51,11 +52,11 @@ void SerialPort::Init(byte index, int baudRate, byte parity, byte dataBits, byte
|
|||
_index = index;
|
||||
assert_param(_index < ArrayLength(g_Uart_Ports));
|
||||
|
||||
_port = g_Uart_Ports[_index];
|
||||
_baudRate = baudRate;
|
||||
_parity = parity;
|
||||
_dataBits = dataBits;
|
||||
_stopBits = stopBits;
|
||||
_port = g_Uart_Ports[_index];
|
||||
_baudRate = baudRate;
|
||||
_parity = parity;
|
||||
_dataBits = dataBits;
|
||||
_stopBits = stopBits;
|
||||
|
||||
// 计算字节间隔。字节速度一般是波特率转为字节后再除以2
|
||||
//_byteTime = 15000000 / baudRate; // (1000000 /(baudRate/10)) * 1.5
|
||||
|
@ -312,8 +313,10 @@ uint SerialPort::OnRead(ByteArray& bs)
|
|||
Sys.Delay(_byteTime);
|
||||
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);
|
||||
bs.SetLength(count);
|
||||
|
@ -328,11 +331,12 @@ void SerialPort::OnRxHandler()
|
|||
{
|
||||
byte dat = (byte)USART_ReceiveData(_port);
|
||||
Rx.Push(dat);
|
||||
//debug_printf(" 0x%02X ", dat);
|
||||
|
||||
// 收到数据,开启任务调度
|
||||
if(_taskidRx) Sys.SetTask(_taskidRx, true);
|
||||
|
||||
if(!HasHandler()) return;
|
||||
//if(!HasHandler()) return;
|
||||
|
||||
// 其实内部的USART_ReceiveData可以清除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);
|
||||
}
|
||||
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_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