trace32lauterbach

wait until shell command is executed


I have a script where I launch a shell command. The problem is that the script doesn't wait until the command is finished and continues right away. I have tried WAIT but it doesn't work as the shell command turns the source off and on (ignition off/on) and I get the error that WAIT cannot be executed because power is off.

Is there any command I can use for program to wait until the command is executed?

My script looks like this:

    OS.COMMAND echo OUTP OFF > COM1
    
    OS.COMMAND echo OUTP ON > COM1
    
    System.up

Solution

  • If I would want to execute a shell command without redirecting I would use OS.Area instead of OS.Command, because OS.Area is blocking and will wait until the shell command has finished. However OS.Area does not support redirecting I think.

    If I would want to execute a shell command and redirect the output to a file I would first delete the file and then wait until it gets accessible. Like this:

    IF OS.FILE.EXIST("myfile.txt")
        RM "myfile.txt"
    OS.Command ECHO "Hello World" > "myfile.txt"
    WAIT OS.FILE.readable("myfile.txt") 
    

    However it looks like you want to write via a shell command to a COM port on Windows. But I don't think it is possible to wait in TRACE32 until this write to the COM port has been done when using OS.Command...

    So I suggest to do this task with the TERM commands instead:

    TERM.METHOD #1 COM COM1 115200. 8 NONE 1STOP NONE
    TERM.view #1
    TERM.Out  #1 "OUTP OFF" 0x0A
    TERM.Out  #1 "OUTP ON"  0x0A
    

    Of course you have to set the correct baud rate, bits, parity and stop bits. The 0x0A after each TERM.Out is simply the line-feed character.

    Does you terminal show any output as a reaction to OUTP ON? If yes you can also wait for this output with e.g. SCREEN.WAIT TERM.LINE(#1,-1)=="OUTP is now ON" 5.s

    Otherwise I assume that a simple WAIT 50.ms before SYStem.Up will probably do the trick too.