gpt4 book ai didi

java - 提高Java串口数据接收效率

转载 作者:行者123 更新时间:2023-11-29 09:30:43 25 4
gpt4 key购买 nike

这是代码片段

这里我发起了一个Action Listener

    try {

port_seleted.addEventListener(this);

} catch (TooManyListenersException e) {
System.out.println("too many Listeners!");
}

port_seleted.notifyOnDataAvailable(true);

当我收到数据时调用下面的方法

public void serialEvent(SerialPortEvent Ack_Rec) {

boolean first_flash = false;

if (Ack_Rec.getEventType() == SerialPortEvent.DATA_AVAILABLE) {

try {

while (input_data.available() > 0) {
input_data.read(rec_ack);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent");
}

我没有正确接收数据,即

如果我发送一些数据为“你好,你今天过得怎么样”它被接收为“Hello h”“ow”“are you”“doin”“g today”

即串行事件方法被多次调用,即它在读取完整数据之前退出 while 循环。

如果我插入延迟

    try {

while (input_data.available() > 0) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}

input_data.read(rec_ack);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent");
}

如上所示,它工作正常。请帮助我如何消除延迟,因为它会降低效率!

最佳答案

这里是解决方案。

由于我的项目与嵌入式微 Controller 有关,因此为程序员提供了一些信息。

任何串行通信协议(protocol)都无法一次性传输所有数据。这取决于调用传输函数的周期。

即这取决于您的函数在哪个 ms 任务中被调用是您使用的是 RTOS。

因此,如果数据很大,比如 1024 字节,则可能无法一次传输所有数据,即在一次函数调用中传输所有数据,可能需要多个周期才能完成工作。

由于 PC 端比 Controller 端快得多,PC 必须等到接收到所有数据后才能开始处理数据。

好的,现在开始解决上述问题,

我知道我在每个交易中期望的字节数,比如说 1000 字节。


//代码片段

public void serialEvent(SerialPortEvent Ack_Rec) {


if (Ack_Rec.getEventType() == SerialPortEvent.DATA_AVAILABLE) {

try {

while (in.available() > 0) {
int totalbytesreceivedinSession = in.read(sessionRead);

for (int bytesreceieved = 0; bytesreceieved < totalbytesreceivedinSession; bytesreceieved++) {

temporaryPacket[recDataCount++] = sessionRead[bytesreceieved];
}
if(recDataCount == 1000){
//Process the data
}
}

希望对你有帮助

干杯!

关于java - 提高Java串口数据接收效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14743972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com