SE-3910 Real-time Systems Week 5, Class 2 – Lab turn-in page is up! – Lost-and-not-found power supply – Quick-Quiz (Ungraded) – Use interrupts in a Linux/C environment Watchdog follow-up – Watchdog demo – (Tentative) HOW to set time-out for watchdog – Bash Scripting – Real-Time OS’s SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling, Some from Dr. Hornick, etc. 1
Quick Quiz! (1) How do you get a reference (pointer) to the first element in an array? int x[5] = {1,2,3,4,5} boolean foo(int *ip); a)foo(&x); b)foo(&x[0]); c)foo(x); d)foo(x[0]); SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 2
Quick Quiz! (2) How do you get a reference (pointer) to the second element in an array? int x[5] = {1,2,3,4,5} boolean foo(int *ip); a)foo(&x+1); b)foo(&x[0]); c)foo(x+1); d)foo(x[0]); e)foo(&(x+1)); SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 3
Real-Time Operating Systems What does an operating system REALLY need? – Essential Scheduler Memory allocation (e.g. malloc) File system Interrupts – Important Protection (security) (if on network) – Less important Networking Protection (security) (if off network) – Nice to have GUI Virtual memory Multithreading SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 4
UNIX Operating System Common driver strategies – Write to a file – Read from a file – ioctl (system call) – Short programs that wrap ioctl calls – [Addendum] “system calls” from C programs (which don’t really call the kernel, but rather execute the short command-line programs mentioned above or execute a program that reads/writes from a file… SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 5
Scripting Why learn scripting? – Faster to write than compiled code Why learn command-line (bash) scripting? – Command line works very naturally with files – UNIX/Linux runs on files SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 6
Starting a Script (More details)More details Put the following into a file (e.g. script) #!/bin/bash echo "Hello World" # other fun Now, run this command to make it executable chmod u+x script Now run the script like this:./script SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 7
Variables Set a variable export myVar="This is a variable" Read a variable, printing to standard out: echo $myVar Increment a Variable export myVar=$((myVar+1)) Other integer math export myVar=$((myVar+1)) SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 8
Arguments Suppose we run our script like this:./script arg1 arg2 arg3 And inside the script, we run this command: echo "argument 3 is: $3" This will print: argument 3 is: arg3 SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 9
Quoting - Escapes Suppose we run./script "this is a test" "of" "arguments" The quotes group the words … echo "arg1: $1" echo "arg2: $2" echo "arg3: $3" will print arg1: this is a test arg2: of arg3: arguments SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 10
Quoting - Escapes In the example from the previous section, echo "arg1: $1" prints arg1: this is a test but echo 'arg1: $1' prints arg1: $1 Escapes (e.g. "\\, \n, \r") are also useful. SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 11
Quoting Challenge: How do I run an ssh command like this – ssh host “command to run” But give “to run” as a single argument? Hint: Use escapes! Hint2: Command to run will be interpretted twice. SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 12
Conditionals (More details) (UPDATED link at end of lab)More details Comparison if test "$var1" = "$var2”; then echo "true" else echo "false" fi If file “$var1” exists… if test –e "$var1"; then echo "true" fi SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 13
“Counting” Loops Counting loop (my preferred approach) for i in `seq 1 10`; do echo $i; done; Processing files in current directory for i in *.pdf; do echo cp $i ${i/.pdf}.bak.pdf; done; # (Untested – test before use!) SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 14
“Sentinal” loops Loop while command succeeds (returns 0) while command echo "looping" done; Keep looping as long as the command fails. while !command echo "looping" done; Keep looping as long as test is “true” while test … echo "looping" done; SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 15
Useful commands – sleep 0.5 will sleep for half a second – time command args1 arg2 arg3 – will measure how long it takes – command arg1 arg2 arg3 to run SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 16
References for scripting One of the main resources linked from above: For if test …, I like this one better Guide/html/sect_07_01.html Intro to variables (possibly useful) eter-substitution.html eter-substitution.html SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 17
Watchdog On the Beaglebone og-timer og-timer Open the file /dev/watchdog Do not close the file Write something (e.g. "\n") to the file at least every 59 seconds to keep the system running DEMO Yes, it is possible to change the time. DEMO? DETAILS? SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 18
Command-Line Cheat-sheet I’m working on one I’ve got links to online ones I like Just ask me SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 19
Demo – Connecting to Beaglebone [TODO] – I plan to put instructions for setting up a DHCP server on your laptop using “connection sharing” – You know my number. SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 20
Demo – Watchdog [See computer] SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 21