我必须每秒更改 ttyS1 端口的波特率。所以我需要以 9600 波特唤醒远程机器,然后以 19200 波特与它通信。但是唤醒信号和实际数据通信之间存在时间限制。我使用 Handler&Thread 这个技巧。
我做到了,似乎对 Handler&Thread 没问题。我将每个入口的后延迟切换为 1 毫秒和 500 毫秒。但效果不好。有时 1 毫秒的任务几乎需要 10-15 毫秒。
我还注意到,当我通过一些 UI 更新添加“runOnUiThread”时,结果会变得最差,比如 30 毫秒。
注意:我需要每次都发送唤醒信号,而不仅仅是一次。
任何想法?
public void serial_query(){
try {
Runnable cookimageupdate = new Runnable(){
public void run(){
try {
if (mOutputStream != null) {
mSerialPort.close();
if (mLAP==0) //First LAP is used to HOLTEK Wake-Up. Second one is real data.
{mLAP=1; mSerialPort=new SerialPort(new File("/dev/ttyS1"), 9600, 0); mBufferbuf = (byte)0x00; mOutputStream.write(mBufferbuf);}
else {mLAP=0; mSerialPort=new SerialPort(new File("/dev/ttyS1"), 19200, 0); mOutputStream.write(mBuffer);}
} else {
return;
}
} catch (IOException e) {
e.printStackTrace();
return;
}
try{
runOnUiThread(new Runnable() {
public void run() {
//meat_temp.setText(_meatprobe_temp.toString());
if (_pt1000_status==1) {pt_status.setText(" PT1000 open-circuit");}
else if (_pt1000_status==2){pt_status.setText(" PT1000 short-circuit");}
else if (_pt1000_status==0){pt_status.setText(" -");}
}
});
}
catch (Exception e)
{
e.getLocalizedMessage();
}
if (mLAP==1)
{handler_serial.postDelayed(this, 1);}
else {handler_serial.postDelayed(this, 500);}
}
};
handler_serial.postDelayed(cookimageupdate, 50); //start with 50mSec. delay
}
catch(Exception e){
e.printStackTrace();
return;
}
};