Errata 'De taal C en de Xmega'
Tweede druk (laatste oplage)
-
Pagina 73: in code 6.6 staat op regel 18:
print_number(argv[1][0]-'0');
dat moet zijn:print_digit(argv[1][0]-'0');
-
Pagina 105: in tabel 9.3 staat bij de functie atan2:
arctan(y/x) uitkomst in radialen [-π/2,π/2])
dat moet zijn:
arctan(y, x) uitkomst in radialen [-π,π])
-
Pagina 370: Figuur 21.24 is niet coreect.
Het CH-bit kent de DS3232 niet en century-bit staat bij adres 0x04; deze moet
bij adres 0x05 staan:
-
Pagina 370: De tweede marginale notitie kan worden verwijderd.
De DS3232 heeft geen CH-vlag.
- Pagina 373: in code 21.13 is regel 22 overbodig en kan dus worden verwijderd.
-
Pagina 399: in code 22.10 staat op regel 11:
ccx = 10000-(duty*10000)/100;
dit moet zijn:ccx = ((uint16_t) duty)*(10000/100);
-
Pagina 400: in code 22.11 staat op regel 37:
PORTD.OUTSET = PIN2_bm|PIN1_bm|PIN0_bm; // outputs low
dit moet zijn:PORTD.OUTCLR = PIN2_bm|PIN1_bm|PIN0_bm; // outputs low
-
Pagina 400: in code 22.11 staat op regel 42:
PORTE.OUTSET = PIN2_bm|PIN1_bm|PIN0_bm; // outputs low
dit moet zijn:PORTE.OUTCLR = PIN2_bm|PIN1_bm|PIN0_bm; // outputs low
-
Pagina 400: in code 22.12 staat op regel 53:
TCD0.CCABUF = 10000; // PWM on
dit moet zijn:TCD0.CCABUF = 0; // PWM off
-
Pagina 400: in code 22.12 staat op regel 57:
TCE0.CCABUF = 10000; // PWM on
dit moet zijn:TCE0.CCABUF = 0; // PWM off
-
Pagina 402: in code 22.14 is het commentaar op regel 45 niet correct:
TCD0.CTRLA = TC_CLKSEL_DIV2_gc; // no prescaling
dit moet zijn:TCD0.CTRLA = TC_CLKSEL_DIV2_gc; // prescaling is 2
-
Pagina 423 en pagina 424: De terugkoppeling voor de hysterese van figuur 3.11 is niet correct.
Voor een correcte hysterese moet signaal UAC0OUT worden geïnverteerd.
Een andere mogelijkheid is om de aansluiting bij de pinnen PA1 en PA2 te verwisselen. In dat geval klopt de hysterese, maar is signaal UAC0OUT juist hoog als Uin laag en is figuur 23.13 niet correct. Hieronder staan de correcte figuren:
-
Pagina 428: In derde alinea staat een periodetijd van 128 ms, dat moet zijn 1,28 s.
Pagina 429: in code 23.17 staat op regel 13:TCD0.PER = 9999; // Tper = 128 ms @\AT @ 2 MHz
dit moet zijn:TCD0.PER = 9999; // Tper = 1.28 s @\AT @ 2 MHz
Pagina 430: In de laatste alinea staat een periodetijd van 128 ms, dat moet zijn 1,28 s. -
Pagina 482: De stringnotatie van de pipe-adressen komt niet overeen met de hexadecimale notatie van de adressen.
De zin "Het adres is in dit geval 0x4876413031 oftewel HvA01." is onjuist.
Dit moet zijn:
"Het adres is in dit geval 0x4876413031 oftewel 10AvH." of
"Het adres is in dit geval 0x3130647648 oftewel HvA01.".
Bedoeld waren de pipes, zoals deze vermeld zijn in de tabel van figuur E.5. Dus zijn alle stringnotaties op pagina 382 niet correct en moeten deze worden gewijzigd:fout correct Hva01 10AvH Elek1 1kelE Elek2 2kelE Elek3 3kelE Elek4 4kelE Elek5 5kelE
Bij een eventuele volgende editie worden de pipe-adressen gewijzigd in respectievelijk: 1_HvA, 1Elek, 2Elek, 3Elek, 4Elek en 5Elek.
Tweede druk (eerdere oplagen)
-
Pagina 15: aan de linkerzijde van figuur 2.4 staat:
studio.h
dit moet zijn:stdio.h
-
Pagina 109: op laatste regel van het eerste grijze blok met code staat:
b= a>>2; // b is 0x00001101 (11)
dit moet zijn:b= a>>2; // b is 0x00001011 (11)
-
Pagina 162: in de linker tabel van tabel 13.1 staat op de tweede regel:
leest een regel (string tot '\n')
dat moet zijn:
leest een regel (tot en met de end-of-line)
-
Pagina 262: in code 17.8 staat op regel 40:
PORTB.OUT = (PORTD.OUT & 0xF0) |
dat moet zijn:PORTB.OUT = (PORTB.OUT & 0xF0) |
-
Pagina 256: in code17.6 staat op regel 31:
if ( col==3 ) {
dit moet zijn:if ( col==4 ) {
-
Pagina 273: onderaan in het codefragment:
Pagina 274: bovenaan in het codefragment:PORTD = 'x'; // databyte is 'x'
dat moet in beide gevallen zijn:PORTD.OUT = 'x'; // databyte is 'x'
-
Pagina 350: in code 20.10 wordt de globale interrupt niet aangezet.
Voeg in code 20.10 na regel 37 toe:
sei();
-
Pagina 356: in code 21.2 staat op regel 22:
return SPIC.DATA;
dit moet zijn:return SPID.DATA;
-
Pagina 363: in code 21.7 staat op regel 23:
return USARTC1.DATA;
dit moet zijn:return USARTD1.DATA;
- Pagina 381: in code 21.19 moet regel 8 worden verwijderd.
-
Pagina 388: in het codefragment bovenaan de pagina staat:
bit_is_clear(PINA, PIN3_bm)
dit moet zijn:bit_is_clear(PORTA.IN, PIN3_bm)
-
Pagina 389: in code 22.2 staat op regel 9:
TCD0.CTRLA = TC_CLKSEL_DIV64_gc;
dit moet zijn:TCD0.CTRLA = TC_CLKSEL_DIV8_gc;
anders is de frequentie niet 2 Hz, zoals op pagina 389 staat, maar 0,25 Hz. - Pagina 407: in de eerste regel van de tweede alinea moet "... het meten van de tijdsduur ..." staan in plaats van "... het meteen van de tijdsduur ...".
-
Pagina 412: in code 23.3 staat op regel 45:
DACB.CTRLA = DAC_ENABLE_bm;
dit moet zijn:DACB.CTRLA = DAC_CH0EN_bm | DAC_ENABLE_bm;
-
Pagina 446: in code 23.38 moet in de linker en in de rechter code regel 1 vervangen worden door:
#include <avr/interrupt.h>
Bovendien moet in de linker code na regel 8 en in de rechter code na regel 9 worden toegevoegd:sei();
-
Pagina 446: in code 23.39 moet in de linker en in de rechter code regel 1 vervangen worden door:
#include <avr/interrupt.h>
Bovendien moet in de linker code en in de rechter code na regel 9 worden toegevoegd:sei();
-
Pagina 447: in code 23.40 moet regel 1 vervangen worden door:
#include <avr/interrupt.h>
Bovendien na regel 13 worden toegevoegd:sei();
-
Pagina 476: in code D.1 wordt de globale interrupt niet aangezet.
Voeg in code D.1 voor regel 3 toe:
#include <avr/interrupt.h>
en voeg na regel 11 toe:sei();
-
Pagina 517: in tabel van figuur J.3 staat:
RF_MISO PC2 de MOSI van de SPI, data van de Xmega naar de nRF24L01+ RF_MOSI PC3 de MISO van de SPI, data van de nRF24L01+ naar de Xmega SD_MISO PC6 de MOSI van de SPI, data van de Xmega naar de SD-kaart SD_MOSI PC7 de MISO van de SPI, data van de SD-kaart naar de Xmega
Dit moet zijn:RF_MISO PC2 de MISO van de SPI, data van de nRF24L01+ naar de Xmega RF_MOSI PC3 de MOSI van de SPI, data van de Xmega naar de nRF24L01+ SD_MISO PC6 de MISO van de SPI, data van de SD-kaart naar de Xmega SD_MOSI PC7 de MOSI van de SPI, data van de Xmega naar de SD-kaart