![](/img/trans.png)
[英]Multiplatform way to send and receive data through serial port in Java 8?
[英]Greater efficienty for data reception through serial port in Java
這是代碼片段
我在這里啟動一個動作監聽器
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");
}
我沒有正確接收數據,即
如果我以“你好,你今天好嗎”發送一些數據,則以“你好,你好”,“ ow”,“你”,“ doin”,“今天g”收到
即,串行事件方法被多次調用,即,在讀取完整數據之前,它退出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");
}
如上所示,它工作正常。 請幫助我消除延遲,因為這會降低效率!
解決方案在這里。
由於我的項目與嵌入式微控制器有關,因此為程序員提供了一些信息。
任何串行通信協議都不能一次傳輸所有數據。 這取決於調用傳輸函數的周期。
也就是說,這取決於您正在使用RTOS的函數調用哪個ms任務。
因此,如果數據很大(例如1024字節),則可能無法一次即在一次函數調用時就傳輸所有數據,並且可能需要多個周期才能完成作業。
由於PC端比控制器端快得多,因此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
}
}
希望這對您有所幫助,
干杯!
讀取僅基於input_data.available()
計數的可用字節數
int bytesAvailable = 0;
while ((bytesAvailable=input_data.available()) > 0) {
input_data.read(rec_ack,0,bytesAvailable);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.