0

我必须每秒更改 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;
    }
};
4

1 回答 1

0

1 毫秒的时间延迟太短,无法发布延迟的可运行文件。大多数处理程序需要更多时间来处理您的消息。

对于如此低的延迟,您最好使用

Thread.sleep().
于 2012-08-17T07:16:29.017 回答