Errata

Making Embedded Systems

Errata for Making Embedded Systems

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed, PDF, ePub, Mobi, , Other Digital Version
Page 50
middle of last paragraph

The second time the part number is listed, it is given as:
AT9140008-66AI
but it should be this: AT91R40008-66AI

Note from the Author or Editor:
Replace AT9140008-66AI with AT91R40008-66AI

Phillip Mente  Oct 11, 2012 
Printed, PDF, , Other Digital Version
Page 253
Code in middle of page

uint16 should read uint16_t in
uint16 GetVariance(int16_t* samples, uint16_t numSamples, int16_t mean) {

Elecia White
Elecia White
 
Apr 14, 2012 
Printed
Page 78
Figure 4-1

The schematic shows the LED connected to pin number 9. However, the entire discussion for this example indicates it is actually connected to pin number 10.

Note from the Author or Editor:
Swap the descriptors of ADC2/IO2_2 and SCLK/IO1_2 in the figure.

Phillip Mente  Feb 08, 2012 
Printed
Page 30
1st paragraph

In the example test input and output, it looks like you intend the times to be in a mm:ss.hh format.

However, in the example log output, the first three times have 2 colons rather than a colon and a decimal point. That is, 00:00:01 should be 00:00.01 and so on...

Note from the Author or Editor:
Should read:
Time, Subsystem, Log message
00:00.01, System, Initialization: sandbox version 1.3.45
00:01.02, Controller, Minor error: no song loaded
00:02.02, Controller, 4 songs found for "Still Alive" search, selecting ID 0x1234
00:02.51, Controller, Loading player class to play ID 0x1234

Note that Initialization was also spelled incorrectly in the first line.

Phillip Mente  Feb 06, 2012 
PDF
Page 163
4th paragraph

WWWWBBWWW would encode to W4B2W3 instead of W4B2W4 as follows:

For example, you might get a stream of white pixels (W) and black pixels (B) that look like WWWWBBWWW. This would encode to W4B2W4.

Note from the Author or Editor:
Change W4B2W4 to W4B2W3. (I have this on page 160 but you can grep W4B2 to find it.)

Emerson Wang  Jan 27, 2012 
PDF
Page 121
Figure 5-4

For STATE YELLOW and EVENT "GO", New current state should be YELLOW instead of RED in the figure. STATE YELLOW transits to RED only through EVENT "Timeout".

Note from the Author or Editor:
This is correct, the figure should be changed so the middle row reads:
YELLOW yellow YELLOW YELLOW RED

Emerson Wang  Jan 23, 2012 
PDF
Page 110

The first function parameter is called register but the parameter reg is used inside the function as follows:

void IOWaitForRegChange(unsigned int* register, unsigned int
bitmask)
{
unsigned int orig = *reg & bitmask;
while (orig == (*reg & bitmask)) { /* do nothing */ ; }
}

To fix it, the function parameter register should be changed to reg.

Note from the Author or Editor:
The word "register" in
void IOWaitForRegChange(unsigned int* register, unsigned int
bitmask)
should be "reg"

Emerson Wang  Jan 20, 2012 
PDF
Page 76

Decimal value should be 2 for Binary 0010 instead of 2 in the following list:

Binary Hex Decimal Remember this number
0000 0 0 This one is easy.
0001 1 1 This is (1 << 0).
0010 2 3 This is (1<< 1). Shifting is the same as multiplying by 2shiftValue.

Note from the Author or Editor:
The third line should have a "2" in column 3 so it reads;
0010 2 2 This is (1<< 1). Shifting is the same as multiplying by 2shiftValue.

Emerson Wang  Jan 20, 2012 
Printed, PDF
Page 27
1st paragrapg

The following errors were found in the code:

(1) sLogStuct was used in the wrong place and the static keyword should not be used before enum eLogLevel outputLevel[] as follows:

// contain all the global variables into a structure:
struct {
tBoolean logOn;
static enum eLogLevel outputLevel[NUM_LOG_SUBSYSTEMS];
} sLogStruct;

static struct sLogStruct gLogData;

Because struct sLogStruct and the static keyword were used to define gLogData, struct sLogStruct should be defined as follows:

struct sLogStruct {
tBoolean logOn;
enum eLogLevel outputLevel[NUM_LOG_SUBSYSTEMS];
};

(2) Missing [i] for outputLevel inside for loop as follows:

struct sLogStruct* LogInit()
{
int i;
struct sLogStruct *logData = malloc(sizeof(*logData));
logData->logOn = FALSE;
for (i=0; i < NUM_LOG_SUBSYSTEMS; i++) {
logData-> outputLevel = eNoLogging;
}
return logData;
}

The statement inside for loop should be as follows:

logData-> outputLevel[i] = eNoLogging;



Note from the Author or Editor:
struct {
tBoolean logOn;
static enum eLogLevel outputLevel[NUM_LOG_SUBSYSTEMS];
} sLogStruct;

Should read:
struct sLogStruct{
tBoolean logOn;
enum eLogLevel outputLevel[NUM_LOG_SUBSYSTEMS];
} ;

And
logData-> outputLevel = eNoLogging;
Should read
logData-> outputLevel[i] = eNoLogging;

Emerson Wang  Jan 16, 2012 
Printed
Page 80
Above "Blinking the LED"

MSP430 processor

LPC13xx P1OUT &= ~(BIT2);

Should be:

P1OUT &= ~(BIT2);

Note from the Author or Editor:
Remove "LPC13xx " from line.

Jonathan Titus  Nov 29, 2011 
PDF
Page 100
"How Many bits in that Number" table

The approximate maximum value for 24 bits is given as ~1.6 million. It should be ~16 million.

Note from the Author or Editor:
Change ~1.6 million to ~16 million.

Anonymous  Nov 01, 2011 
PDF
Page 72
4th paragraph

In the further reading section of Chapter 3, there's the following sentence:

"Learning to use your oscilloscope probably should be done with its manual, but I?ve found one useful, more general write-up that is very detailed."

When viewing in Adobe Reader, it's clear that the phrase "write-up" is a link to the document being referred to; however, when reading a print-out of the PDF, that's non-obvious (as well as non-useful even if it were obvious that there's a link). I'm not sure how this shows up in the printed copy, but I'd prefer that even in the PDF the link to be explicitly called out in the text:

"Learning to use your oscilloscope probably should be done with its manual, but I?ve found one useful, more general write-up (http://www.doctronics.co.uk/scope.htm) that is very detailed."

Note from the Author or Editor:
Production, please move link to the end of the sentence.

Anonymous  Oct 31, 2011 
PDF
Page 66
near bottom of page

In the example of calling a function through a function pointer, the syntax used is incorrect.

The erroneous example:

filter = &fir;
*filter(data, dataLen);

Because of the precedence of operators in C, if you use the dereference operator, additional parens must be used:

filter = &fir;
(*filter)(data, dataLen);

Or the compiler will try to dereference the value returned from the function call (and there is nothing returned by this `void` function call, so there would be a compile-time error).

As a side note, the dereference operator is not needed to call through a function pointer, so this bit of code would also work:

filter = &fir;
filter(data, dataLen);

But that might just confuse the issue for the audience that the side-bar box is addressing (programmers unfamilar with the use of function pointers).

Note from the Author or Editor:
Lines should be changed to
filter = &fir;
filter(data, dataLen);
Omit the * in the line.

Anonymous  Oct 31, 2011 
PDF
Page 174
2nd paragraph

Except for SuperSpeed USB 3, USB is a half-duplex communication (host polled). There have been successful bit-banged implementations of USB (e.g. IgorPlug and V-USB implement low-speed USB). It is worth indicating that, different from the other detailed buses, the interface is differential.

Note from the Author or Editor:
Edit made in copy edit version (no production change needed).

pbleyer  Aug 29, 2011 
PDF
Page 171
5th and 6th paragraphs

The SPI SDO and SDI signals are usually understood to be Serial (or SPI) Data Output and Serial (or SPI) Data Input, respectively, and meant to be connected in a crossover fashion between Master and Slave. Following the book's nomenclature 'Slave Data Out' or 'Slave Data Input' could result in an erroneous connection since the point of reference in this case is usually the Master.

Note from the Author or Editor:
Ouch. Fixed in the copyedit version (no production notes).

Pablo Bleyer  Aug 29, 2011 
PDF
Page 185
Just under figure 11.1

On the power consumption calculations, there is an error. On normal operations, the CPU uses 900?W, but on third level of sleep, it uses 2.7mW, should be 2.7?W.

Note from the Author or Editor:
This section has been rewritten to show a lot more of the math and this bug seems to be gone.

jameslangbridge  Jul 05, 2011 
PDF, Other Digital Version
Page 178
Under "Further Reading"

Did you really want that specific URL in the link "Efficient C coding"? It links to an image, which return to the press publication page.

Note from the Author or Editor:
The link in question is
http://www.atmel.com/dyn/resources/prod_documents/doc1497.pdf
which is what it says in the source files. However, the extension gets changed to .png incorrectly in the ebook format.

jameslangbridge  Jul 01, 2011 
PDF
Page 36
3rd last paragraph

In the paragraph that starts as "I like the functional diagrams...", at the end there is "This usually cover about", should read "This usually covers about"

Note from the Author or Editor:
Typo fixed.

jameslangbridge  Jun 30, 2011 
PDF
Page 127
Title

Title reads "Parallel Buss", should read "Parallel Bus"

Note from the Author or Editor:
Yes, that chapter has been filled in so the temporary text and its typo is gone.

jameslangbridge  Jun 29, 2011