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:
    foutcorrect
    Hva0110AvH
    Elek11kelE
    Elek22kelE
    Elek33kelE
    Elek44kelE
    Elek55kelE
    Het voorbeeld uit paragraaf E.1 gebruikt ook de string HvA01. Dat maakt in dat geval niet uit. Iedere string voldoet, zolang de pipe-adressen in code E.2 en E.4 identiek zijn.
    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