The book

Computers as Components: Principles of Embedded Computing System Design is a new textbook on embedded computing published by Morgan Kaufman Publishers. Computers as Components aims to be a comprehensive introduction to modern embedded computing: high-performance microprocessors and high-level language programming serving complex applications. The book is intended for both students and professionals interested in embedded computing.

Wayne Wolf is Professor of Electrical Engineering at Princeton University. Before joining Princteon, he was with AT&T Bell Laboratories, Murray Hill, New Jersey. He received all three degrees in electrical engineering from Stanford University. He is a Fellow of the IEEE and a member of ACM and SPIE.

Errata

Hey, nobody's perfect. Here are the errors that I and others have found so far. If you have mistakes, questions, or comments about the book, please feel free to write me at wolf@princeton.edu.

Chapter 1

p. 25: "pixel pixelval(pixel " -> "pixeltype pixel("pixeltype". "void set_pixel(pixel " -> "void set_pixel(pixeltype".

p. 25: C++ reference should be to Stroustrup's book, not Kernighan.

p. 26: "pixel 1_pixels" -> "pixeltype d1_pixels".

Figure 1-9 (p. 29): contains relationship should have a ball on the message end.

Figure 1-13 (p. 32): "m: Menu" -> "u: Menu"; "which_menu(x,y,i)" should be "which_menu(i).

Figure 1-14 (p. 33): The message is shown with the first bit on the right-hand end of the message, not on the left-hand end.

p. 37: "The Transmitter class contains analog electronics" -> "The Transmitter class interfaces to analog electronics".

Figure 1-19 (p. 40): Behavior in Detector* class should be "<integer>read-bit()".

Figure 1-26 (p. 44): First action after start should be "panel*:read-knob()".

Q1-9 (p. 55): "receive-message" -> "receive-command"; receive-command() is shown i Figure 1-28.

p. 66 (Example 2-1): NZCV should be 1001.

Chapter 2

p. 71: "LDR r2,x ; get value of c" -> "LDR r2,[r4]; get value of c".

p. 74: "if (a > b) {" -> "if (a < b) {"

p. 75: "ADD r0,r0,r1 ; compute a + b" -> "ADD r0,r0,r1 ; compute c + d".
"SUB r0,r0,r1 ; compute a - b" -> "SUB r0,r0,r1 ; compute c - d".

p. 76: "ADDLT r0,r0,r1 ; compute a + b" -> "ADDLT r0,r0,r1 ; compute c + d".
"SUBGE r0,r0,r1 ; compute a - b" -> "SUBGE r0,r0,r1 ; compute c - d",

p. 82: ARM code should be

ldr r0,[r13]

str r14,[r13]!

str r0,[r13]!

bl f2

sub r13,#4

p. 84: "ASTAT1" -> "ASTAT"

p. 92: "SUB R3 = R3 - R2" -> "R3 = R3 - R2;".

Chapter 3

p. 109: All assembly statements should end in a semicolon. "R1 = DM(i0" -> "R1 = DM(I0".

p. 116: nchar() should be

if (buf_tail >= buf_head) return buf_tail-buf_head; 

else return BUF_SIZE + buf_tail - buf_head;

Figure 3-6 (p. 124): The activities on :CPU and :Device show when, for example, an interrupt request is received. The CPU does not send an interrupt request.

p. 133: average access time formula should be

tav = h1 * tL1 + (h2-h1)tL2 + (1-h2)tMain

p. 147: "DM(i8" -> "DM(I8".

p. 161: "The class's buffer and current-bit attributes" -> "The class's buffer and current-bit behaviors".

p. 169: "data_buffer& fullbuf" -> "data_buffer *fullbuf".

Chapter 4

p. 229: "testing software in Section" -> "testing software in Section 5.9".

Chapter 5

Figure 5-5 (p. 254): Add an arrow from x1 to d.

p. 303: "replaces a[0]" -> "replaces a[0][0]". "repeats itself at a[0][4]" -> "repeats itself at a[1][0]".

Figure 5-32 (p. 321): should be no def-use pair to the left-hand side of a = a->next.

p. 329: Header should be "5.10 Design Example: Software Modem"

Chapter 6

Figure 6-2 (p. 347): Coroutine 1 should use "ADR r14" everywhere, not "ADR r13".

Questions Q6-17, Q6-18, Q6-19, Q6-20, Q6-21, Q6-22, Q6-23, Q6-25, Q6-26: in all these problems, processes are periodic with periods equal to their deadlines.

Chapter 7

p. 439: "search[i-ox+XCENTER][i-oy..." -> "search[i-ox+XCENTER][j-oy...".

Chapter 8

EQ 8-2 (p. 476): Should be "ty = td + tm".

Figure 8-30 (p. 490): Link between Floor and Controller should have quantity 1 on Controller end.

Figure 8-31 (p. 490): "elevator-positions[H][F]" -> "elevator-positions[1..H][1..F]".

Figure 8-32 (p. 491): "request-lights[F]" -> "request-lights[1..F]".

Figure 8-33 (p. 491): "car-floor[H]" -> "car-floor[1..H]". "emergency-stop[H]" -> "emergency-stop[1..H]".

Chapter 9

Figure 9-8 (p. 511): Traditional state transition diagram should have edges from s1-4 and s2-3 to s5, activated by r.

p. 523: "low probabilities were to certain errors" -> "low probabilities were ASSIGNED to certain errors".