1 / 24

IN2305-II Embedded Programming

This article discusses the challenges and solutions in embedded programming, including real-time issues, concurrency, and the need to understand underlying RTOS principles. It also explores examples of naive automatic door tasks and provides solutions using VHDL and C programming.

sjohn
Download Presentation

IN2305-II Embedded Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IN2305-IIEmbedded Programming prof.dr.ir. Arjan J.C. van Gemund Embedded Software Lab Software Technology Dept.

  2. Arjan van Gemund? • BS Physics Engineering • MS, PhD Computer Science • DSM (Embedded Systems HW + SW) • TNO (High-Performance Computing) • TUD (EE, Computer Architecture) • TUD (CS, Software Technology, 0.4 fte Prof Emb SW) • 2 kids, dog, cat, living in Ravenswoud (Fr) • http://www.st.ewi.tudelft.nl/~gemund/

  3. In2305-ii? Info: viahttp://www.st.ewi.tudelft.nl/~gemund/

  4. printer printing system user I/F netw I/F Embedded Systems? ES = computer system (HW+SW) embedded within another system largely determining its functionality

  5. Telegraph Telegraph • out-of-order data • negotiate with multiple clients (print jobs) • service status requests • adapt to different printers • response time to certain requests • data throughput / buffering network printer

  6. Underground Tank Monitoring System • guard levels, detect leaks • extremely low-cost design (proc) • simple arithmetic - CPU hog - response time problem Emb Sys level CH level H2O temperature . . . tank 1 buttons LCD disp printer tank N

  7. speedo meter gas pedal buttons SSD Cruise Control System (Lab Project) • stabilize car speed when engaged • extremely low processor cycle budget • small control loop jitter due to other activities • reliable operation Emb Sys

  8. Embedded Systems Boom • provides functionality (intelligence) of almost everything • annual growth 25-60% (Emb Linux > 60%) • 100 x PC market • accounts for 25-40% costs in automotive • very large societal dependence • very high performance demands

  9. Embedded Software Crisis • functionality migrates from HW to SW • existing cores combined with FPGA’s, rather than ASICs • programming-centered design (incl. HDLs) • TV, mobile, car, .. 10+ MLOC code, expon. growth! • despite SW engineering: 1 – 10 bug / KLOC • 100 G$ / yr on bugs (Mars Polar Lander, Mars Climate Orbiter, Ariane 5, Patriot, USS Yorktown, Therac-25, ... )

  10. Embedded Programming • more difficult than “classical” programming • interaction with hardware • real-time issues (timing) • concurrency (multiple threads, scheduling, deadlock) • need to understand underlying RTOS principles • event-driven programming (interrupts) • lots of (novice) errors (hence the crisis) • so that’s why we have this course already in 2nd year

  11. Example • naïve automatic door task (thread): for (;;) { while (inp(sensor) != 1) ; // wait to open out(door,OPEN); while (inp(sensor) == 0) ; // wait to close sleep(1000); out(door,CLOSE); // close after timeout } • what are the (many) issues? • (discussed on the next slides)

  12. s’ s s’ s s’ 0 1 2 s t.s’ Specification: FSM (Moore) 0: door’, timer_enable’ 1: door, timer_enable’ 2: door, timer_enable s = sensor, t = timeout e tmr t clk • red transition absent in example code • -> door can slam into your face!

  13. How to Program? • VHDL: FSM in entitydoor_controller • pros: • separate hardware: no problems sharing a processor with other tasks (scheduling, priorities) • fast and synchronous programming model: high frequency clocked process with simple polling for s and t • cons: • VHDL to cumbersome / prohibitive for large applications • lots of legacy code written in, e.g., C

  14. A VHDL Solution process -- fsm begin wait until rising_edge(clk); case state is when S0 => if (s = ‘1’) then state <= S1; when S1 => if (s = ‘0’) then state <= S2; when S2 => if (s = ‘1’) then – red arc in FSM state <= S1; if (t = ‘1’ and s = ‘0’) then state <= S0; end case; door <= ‘1’ when (state != S0) else ‘0’; timer_enable <= ‘1’ when (state = S2) else ‘0’; end process;

  15. What if C? • C: FSM in a taskdoor_controller • pros: • simple (sequential) programming model • cons: • can’t be invoked periodically by a high-frequency clock (timer) because of polling overhead • busy waiting (polling) is not an option (see above) -> concurrent (event) programming (e.g., using interrupts and semaphores) • so the while loops in the example code are wrong • only use a delay which is not based on busy wait • ergo: interrupt programming, using an RTOS

  16. A C Solution void isr_sensor(void) // process sensor IRQ { OS_Post(semaphore_event_on_s); // signal s changed } void task_door_controller(void) { for (;;) { OS_Pend(semaphore_event_on_s); // wait for s = 1 out(door,OPEN); do { OS_Pend(semaphore_event_on_s); // wait for s = 0 OS_Delay(1000); } while (inp(sensor) != 0); // timeout out(door,CLOSE); } }

  17. Issues • efficient, no busy waiting any more (OS_Pend, OS_Delay) • still, code is not correct: interrupts (entering/leaving persons within delay period are not properly handled, and are only accumulated in semaphore (wrong) • cannot afford to just “sit” in a delay, need control flow flexibility of a “real” FSM, i.e., to jump, AND .. • the ability to simultaneously wait for two events (s or t): void isr_sensor_and_timer(void) { // handle both IRQs OS_Post(s_or_t); // either s or t changed }

  18. Alternative C Solution void task_door_controller(void) { for (;;) { switch (state) { STDBY: OS_Pend(s_or_t); // wait for 0-1 out(door,OPEN); state = OPEN; OPEN: OS_Pend(s_or_t); // wait for 1-0 timer_enable(); state = TIMING; TIMING: OS_Pend(s_or_t); // wait for 0-1 or t if (inp(sensor) == 0) { // timeout out(door,CLOSE); timer_disable(); state = STDBY; } else state = OPEN; }}}

  19. Conclusion • Embedded programming is not so easy • Nor in C nor VHDL • C: • Concurrency needed (seq. prog. model): RTOS support • Event programming needed: interrupts + RTOS support • Learn the basics of interrupt programming and using an RTOS (in C) • Learning is (lots of) programming! • Lab: simple Cruise Control subsystem • Hardware: FPGA board with 32 bit soft core + C tools • In2305 via: http://www.st.ewi.tudelft.nl/~gemund/

  20. engage inc/dec throttle controller vehicle speed Lab Assignment: Cruise Control • http://auto.howstuffworks.com/cruise-control.htm • engage button: engage cruise control • inc button: increment throttle or cruising speed • dec button: decrement throttle or cruising speed • speed and throttle on SSD • monitor link to PC terminal (status, logging, ..)

  21. Cruise Control Setup (throttle) m PC host (Linux) Embed. Syst. a b (FPGA board) (speed) encoder (vehicle) DC motor

  22. 32 32 32 32 controller ES Setup throttle engage inc PWM m dec setpoint a decoder speed b count m a b

  23. Demo Demo ..

  24. Finally .. • Grade = f (MC exam, Quiz, Lab) • Without lab NO grade • Lab: presence mandatory, AWOL -> no grade! • Lab enrollment: email TA ASAP • In2305-ii first time edition! Accept glitches .. • Response group (3 student volunteers – via email) • In2305 via: http://www.st.ewi.tudelft.nl/~gemund/ • Credits: Mark Dufour, Sijmen Woutersen

More Related