![]() |
Embedded Systems Laboratory | |||
This page contains a list of known bugs and typos in PTTES.
The main WWW page for this book is here.
Figure 1.5 has the labels for ‘Background’ and ‘Foreground’ the wrong way round.
The first line in Table 6.1 should read "64k x 8-bit data" (not 640 x 8-bit).
[Thanks to Gary Kennedy]
The label '74x573' has been mixed-up during the production process, and has been consistently replaced with '74x375'. This occurs in several places.
The first error is on Page 96, in Figure 6.3: here the latch should read 74x373/573.
The error is repeated on Page 96 (in the text), Page 97 (Table 9.2), Page 99 (Figures 6.4 and 6.5), Page 100 (Table 6.3), Page 101 (Table 6.3 cont.) and Page 104 (Figure 6.6, Figure 6.7) and Page 107 (Figure 6.10).
[Thanks to Javier Vega]
There are some errors in Figure 7.11.
The correct version is as follows:
|
|
|
|
[Thanks to David Smith]
In Figure 7.15, there is an error in the symbol for the NPN transistor.
[Thanks to Javier Vega]
The first paragraph is repeated from the page before.
[Thanks to Javier Vega]
In Figure 8.6 the capacitor in the snubber is not shown (although the label is present).
There are some errors in Figure 10.1.
The correct version is as
follows:
Listing 2_01_12g.C is printed twice.
[Thanks to Yeow Heng Seow]
On the third line, the code should read:
unsigned int Timeout_loop = 0;
[Thanks to Ayman Gendy]
This line in Listing 17.3 does no harm but is NOT required:
hSCH_tasks_G[Index].RunMe -= 1; // Reset / reduce RunMe flag
[Thanks to Ayman Gendy]
This line in Listing 17.8 does no harm but is NOT required:
hSCH_tasks_G[Index].RunMe -= 1; // Reset / reduce RunMe flag
The code on the CD is a later (and better) version than that reproduced in the book.
[Thanks to Javier Vega]
The caption should read "normally open".
[Thanks to Chisanga Mwelwa]
Figure 23.4 shows a DS1621 (incorrectly labelled 24C64).
[Thanks to Chisanga Mwelwa]
The captions for Figures Fig 27.5a and 27.5b haved been swapped during the production process.
[Thanks to Tim Edwards and Balasubramanya Bellur Hiriyannaiah]
I have confused the IDs for "slaves" and "previous slaves" in this code section.
The correct version is as follows:
// Check that the appropriate slave responded to the previous message:
// (if it did, store the data sent by this slave)
if (SCC_A_MASTER_Process_Ack(Previous_slave_index) == RETURN_ERROR)
{
Error_code_G = ERROR_SCH_LOST_SLAVE;
Network_error_pin = NETWORK_ERROR;
// If we have lost contact with a slave, we attempt to
// switch to a backup device (if one is available)
if (Current_Slave_IDs_G[Previous_slave_index] != BACKUP_SLAVE_IDs[Previous_slave_index])
{
// There is a backup available: switch to backup and try again
Current_Slave_IDs_G[Previous_slave_index] = BACKUP_SLAVE_IDs[Previous_slave_index];
}
else
{
// There is no backup available (or we are already using it)
// Try main device.
Current_Slave_IDs_G[Previous_slave_index] = MAIN_SLAVE_IDs[Previous_slave_index];
}
// Try to connect to the slave
Slave_replied_correctly = SCC_A_MASTER_Start_Slave(Current_Slave_IDs_G[Previous_slave_index]);
if (!Slave_replied_correctly)
{
// No backup available (or backup failed too) - we shut down
// OTHER BEHAVIOUR MAY BE MORE APPROPRIATE IN YOUR APPLICATION
SCC_A_MASTER_Shut_Down_the_Network();
}
}
// Send 'tick' message to all connected slaves
// (sends data to the current slave)
SCC_A_MASTER_Send_Tick_Message(Slave_index_G);
First line should read: "This Slave is triggered by CAN interrupts".
[Thanks to Trent Lillehaugen]
The last line of the example code:
"printf("Original data is %f\n", X.Float);"
should read:
"printf("Transferred data is %f\n", Y.Float);"
[Thanks to Trent Lillehaugen]
"Worse, if we make the reasonable assume that..."
should read:
"Worse, if we make the reasonable assumption that..."
Also on this page:
In Figure 29.6, Processor 1 should be shown to run Task A, Task A, Task A, Task A, ...
[Thanks to Chisanga Mwelwa and Andrew Norman]
There is an error in the file Port.H
The file should read as follows:
/*------------------------------------------------------------------*-
Port.H (v1.00)
------------------------------------------------------------------
'Port Header' (see Chap 10) for project SPI_ADC (see Chap 32)
-*------------------------------------------------------------------*/
// ------ SPI_Core.C -----------------------------------------------
// Create sbits for all required chip selects here
sbit SPI_CS = P1^3; // ***** NB ******
// NOTE: pins P1.4, P1.5, P1.6 and P1.7 also used - see text
/*------------------------------------------------------------------*-
---- END OF FILE -------------------------------------------------
-*------------------------------------------------------------------*/
[Thanks to Jim Leifker]
There is an error in the file Main.C
The file should read as follows:
/*------------------------------------------------------------------*- Main.c (v1.00) ------------------------------------------------------------------ Assumes 12 MHz oscillator (-> 05 ms tick interval). ... // Add the 'Flash LED' task (on for ~1000 ms, off for ~1000 ms) // - timings are in ticks (5 ms tick interval) // (Max interval / delay is 65535 ticks) SCH_Add_Task(LED_Flash_Update, 0, 200); ...
[Thanks to John Moyer and Yukuan Jiang]
The pattern ADC Pre-Amp contains a number of errors and inconsistencies.
A revised version of this pattern will be available for download from this page shortly.
[Thanks to John Moyer]
The circuit diagrams in Figure 32.11, Figure 32.12 and Figure 32.13 have the + and - terminals of the op amps reversed.
[Thanks to Trent Lillehaugen]
csnubber is missing in Figure 33.2
[Thanks to Trent Lillehaugen]
In Figure 35.9, the box should be labelled "Closed-loop controller" (not "Open-loop controller").
[Thanks to Trent Lillehaugen]
The second sentence in the 4th paragraph is a mess.
It will make a little more sense as follows:
Specifically, we measure the error between the desired system output (that is, the desired speed of the vehicle in this case) and the current system output (the current vehicle speed in this case).
[Thanks to John Moyer]
John correctly spotted that the description of the technique used to calculate the sample rate (based on the system rise time) contains an arithmetic error.
In addition, the equation on p.871 provides a sample rate that is close to the minimum required to ensure stability for many systems.
To solve both problems, the text beginning "Having determined the rise time ..." (at the bottom of p.871) through to the start of the "Hardware Resources" section (on p.873) will be more useful if replaced with the following:
Having determined the rise time (measured in seconds), we can approximate the required sample rate as follows:
Sample rate (Hz) = 40 / Rise time (seconds)
Thus, if the rise time measured in Figure 35-11 was 0.1 second, the required sample frequency would be around 400 Hz.
Please note that this value is approximate, and involves several assumptions about the nature of the system. See Franklin et al. (1994), for further details.
[Thanks to Wang GuoYun]
The function "Check_Switch()" should include a call to the "Timer_1_Manual_Reload()"
Adding this function call at the end of "Check_Switch() will address this problem.
Last updated: 18 February 2007 13:08
Department of Engineering Web Maintainer
This document has been approved by the head of department or section.
If you are an authorised user you may
edit
this document through your Web browser.