1 / 13

Introduction to Embedded Systems: Features and Implementation Tips

This article explains the features and characteristics of embedded systems, including their lack of traditional human interfaces, real-time requirements, and use of sensors and actuators. It also discusses the features of embedded operating systems, such as interrupt latency, system call overhead, multitasking, and interrupt priorities. The article concludes with implementation tips for writing reentrant and encapsulated code in embedded systems.

tsong
Download Presentation

Introduction to Embedded Systems: Features and Implementation Tips

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. What is an Embedded Systems • Its not a desktop system • Fixed or semi-fixed functionality (not user programmable) … our systems is a single multi-threaded process, rather than a multi-processing general purpose computer. What’s the difference? • Lacks some or all traditional human interfaces: screen, keyboard, pointing device, audio • May have stringent real-time requirements (Hard and Soft) • Usually has sensors and actuators for interface to physical world CSE 466 – Fall 2000 - Introduction - 1

  2. Features of an Embedded Operating System • Interrupt Latency • System Call Overhead (Various functions…task switch, signal, create, delete) • Memory overhead • Tasks (threads) • Communication and synchronization primitives • Memory Management CSE 466 – Fall 2000 - Introduction - 2

  3. Comparative Real Time OSes Compare to uClinux at ~400Kbytes. What is this? 38uS – 280uS actually 16 semaphores CSE 466 – Fall 2000 - Introduction - 3

  4. Multitasking – state maintained for each task time slice Running Ready (time out) only one task in this state at a time time slice wait() delete() signal() create() Blocked Deleted delete() For TINY, this takes 100-700 cycles per event, is this okay? CSE 466 – Fall 2000 - Introduction - 4

  5. Interrupt Priorities • Key question: Can Tone Generator Interrupt the OS? ? ISR Task2 Task1 OS 100-700 cycles CSE 466 – Fall 2000 - Introduction - 5

  6. Preemptive vs. Non preemptive signal T2 signal T1, preempt T2 ISR T2 Completes T2/lo T1/hi OS Pre-emptive: All tasks have a different priority…hi priority task can preempt low priority task. Highest priority task always runs to completion (wait). Advantage: Lower latency, faster response for high priority tasks. Disadvantage: Potential to starve a low priority task Tiny: no priority, round robin only. No starvation. CSE 466 – Fall 2000 - Introduction - 6

  7. Reentrant functions…sharing code not data • Are there shared functions that we would like to have? deq? enq? next (same for head or tail)? Q declaration and initialization? • Can task switching clobber local variables (parameters and automatics)? • What happens when this function is interrupted by the OS? unsigned char next(unsigned char current, unsigned char size) { if (current+1 == size) return 0; else return (current+1); } it depends on where the parameters and the automatic variables are stored… this one is probably okay! 3 places for parameters a. Registers b. fixed locations c. stack…but not the regular stack! CSE 466 – Fall 2000 - Introduction - 7

  8. How about these? • Is this reentrant? void disable(void) { ET0 = 0;} • test for reentrancy: no matter how instructions from separate threads are interleaved, the outcome for all threads will be the same as if there were no other thread. • Is this reentrant? … note: we don’t care about order void setPriority(bit sHi) {PS = sHi; PT1 = ~sHi;} • When do we need reentrancy in non-multithreaded programming? • How is this normally managed? CSE 466 – Fall 2000 - Introduction - 8

  9. Reentrancy in Keil C51 • In C51, most parameter passing is done through registers (up to three parameters). Then fixed memory locations are used. Register method is reentrant, the other isn’t. • Local (automatic) variables in functions are also mapped to fixed memory locations (w/ overlaying)…definitely not reentrant. • How can we solve this: declare functions to be reentrant as in: unsigned char next(unsigned char current, unsigned char size) reentrant { if (current+1 == size) return 0; else return (current+1); } • BUT…the stack used for reentrant functions is NOT the same as the hardware stack used for return address, and ISR/TASK context switching. There is a separate “reentrant” stack used for that, which is not protected by the TINY OS. It’s a different region of memory, and a fixed memory location is used for the reentrant stack pointer. So this works for FULL and for recursion (no OS). • Conclusion…you can have shared functions in TINY if you: • convince yourself that all parameters are passed through registers • convince yourself are no local variables that use fixed memory locations (compiler can allocate those to registers too) • be sure not not change HW settings non-atomically • or… you disable context switching in shared functions by disabling T0 interrupts • Think of shared functions as critical sections. Does this impact timing constraints or interrupt latency? CSE 466 – Fall 2000 - Introduction - 9

  10. Implementation Tip: Reentrant, Encapsulated Queue fifo Q; unsigned char array[QSIZE]; void producer(void) _task_ 0 { unsigned char i; bit fail; initq(&Q, array, QSIZE); os_create_task(1); while (1) { do { disable(); fail = enq(&Q,i); enable(); } while (fail); i++; } void consumer(void) _task_ 1 { bit fail; unsigned char i; while (1) { os_wait(); disable(); fail = deq(&Q,&i); enable(); if (fail)…else… } } typedef struct qstruct { unsigned char head; unsigned char tail; unsigned char *array; unsigned char size; } fifo; Shared functions are okay if we disallow task switch during calls. why? re-entrant stack not protected by Tiny OS. But shared C libraries are okay. Why? not sure yet. is this okay for timing if we don’t use it in Tone Gen ISR (overhead) CSE 466 – Fall 2000 - Introduction - 10

  11. Design Meeting/Homework (Friday) • What should system be able to do simultaneously, out of the following list? • play • send • receive • Homework for Friday: Turn in • Proposed specification for the host—player protocol for sending, receiving, and playing. • What player features should be implemented on the host? • What is the logical next step for lab next week. • Don’t worry about workload…we won’t let you over do it, or get away with murder either. • We can think about the player—player network protocol later. CSE 466 – Fall 2000 - Introduction - 11

  12. Communication and Synchronization • Semaphores • Queues: Messages, Mailboxes, and Pipes • Events • Rendezvous CSE 466 – Fall 2000 - Introduction - 12

  13. Embedded System Types • Control Dominated Systems • Software State machines, state synchronization, etc … nuclear power plan • Data flow dominated Systems • our music player • a network router • queues, messages, packets, routing, CSE 466 – Fall 2000 - Introduction - 13

More Related