Links:
Home
Code zum Buch

Moderne Realzeitsysteme kompakt - 1. Auflage

Eine Einführung mit Embedded Linux

  • Codebeispiel 4-13:

    In Zeile 12 wurde auf die Struktur result ohne Dereferenzierung zugegriffen. Außerdem fehlt im Orginal "return result".

    #define NANOSECONDS_PER_SECOND 1000000000
    
    struct timespec * diff_time( struct timespec before, struct timespec after,
        struct timespec *result )
    {
        if (result==NULL)
            return NULL;
    
        if ((after.tv_sec<before.tv_sec) ||
            ((after.tv_sec==before.tv_sec) &&
            (after.tv_nsec<=before.tv_nsec))) { /* after before before */
            result->tv_sec = result->tv_nsec = 0;
            return result;
        }
        result->tv_sec = after.tv_sec - before.tv_sec;
        result->tv_nsec= after.tv_nsec- before.tv_nsec;
    
        if (result->tv_nsec<0) {
            result->tv_sec--;
            /* result->tv_nsec is negative, therefore we use "+" */
            result->tv_nsec = NANOSECONDS_PER_SECOND+result->tv_nsec;
        }
        return result;
    }
    
  • Codebeispiel 4-22: Hier ist versehentlich der Code aus Beispiel 4-21 abgedruckt. Der korrekte Code für shm_reader.c:
    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/mman.h>
    
    int main( int argc, char **argv, char **envp )
    {
            int sd;
            char *shm_adr;
    
            sd = shm_open( "/foo", O_RDWR, 0755 );
            if (sd < 0) {
                    perror("shm_open");
                    return -1;
            }
            ftruncate( sd, 1024 );
    
            shm_adr=(char *)mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,sd,0);
            if (shm_adr==NULL) {
                    perror( "mmap" );
                    shm_unlink( "/foo" );
                    return -1;
            }
            printf("Shared Mem on adr %p\n", shm_adr );
            printf("Found: \"%s\"\n", shm_adr );
    
            return 0;
    }
    
  • Seite 119 im Struktogramm
    • falsch: fiff_useconds
    • richtig: diff_useconds
  • Seite 227 Gleichung 8-6
    • Im Text wird korrekt als Startwert für die Iteration die Summe der maximalen Ausführungszeiten tEmax,k der Tasks mit gleicher oder höherer Priorität benannt. In den nachfolgenden Beispielen wird dann jedoch mit der maximalen Verarbeitungszeit einer Task gestartet. Das führt grundsätzlich ebenfalls zu den korrekten Ergebnissen, ist aber nur suboptimal und widerpsricht dem Text.
    • Startwert für Jobs der Priorität 2 (M) ist 15ms, für Jobs der Priorität 3 (G) 30ms.
  • Seite 223 Gleichung 8-6
    • falsch: ... = E(I-t_Dmax,i) = ....
    • richtig: ... = E(I-t_Dmax,i) * t_Emax,i = ...
  • Seite 229 Tabelle
    • falsch: Der Wert für t^l=65 -gt; t^l+1=75
    • richtig: Der Wert für t^l=65 -gt; t^l+1=80
  • Seite 233 im Text unter Abbildung 8-3
    • falsch: "Rechnerisch muss dafür Gleichung 8-7 für die Intervalle I = 20 ms, 30 ms, 40 ms, 60 ms, 80 ms, 90 ms, 100 ms, 120 ms bestimmt werden."
    • richtig: "Rechnerisch muss dafür Gleichung 8-7 für die Intervalle I = 20 ms, 30 ms, 40 ms, 60 ms, 80 ms, 90 ms, 100 ms bestimmt werden."
  • Seite 235 im Text in der Rechnung unten auf der Seite
    • falsch: "I ist zu untersuchen im Bereich 0 < I < kgV(20ms,30ms,40ms) + max(0ms,0ms,0ms) = 120ms"
    • richtig: "I ist zu untersuchen im Bereich 0 < I < kgV(20ms,30ms,40ms) + max(0ms,0ms,10ms) = 130ms"
  • Seite 236 Tabelle: Es fehlt die Berechnung von I = 120 ms
  • Seite 237 oben
    • falsch: "Diese Matrix enthält in der letzten Spalte bereits die Priorität einer Ressource."
    • richtig: "Diese Matrix enthält in der letzten Zeile bereits die Priorität einer Ressource."
  • Seite 242 letzter Satz im 1. Abschnitt
    • falsch: "Die Spalte bezüglich der Ressourcenpriorität wird ausgelassen."
    • richtig: "Die Zeile bezüglich der Ressourcenpriorität wird ausgelassen."
  • Seite 248 das Beispiel unter Gleichung 8.18 hat folgende ausführliche Schreibweise
    • t^1 = 0 + [15/30]*3 + [15/40]*12 + [15/70]*15 + [15/100]*15
    • t^2 = 0 + [45/30]*3 + [45/40]*12 + [45/70]*15 + [45/100]*15
    • t^3 = 0 + [60/30]*3 + [60/40]*12 + [60/70]*15 + [60/100]*15
    • Die Kurzschreibweise von 15 im Buch wurde gewählt, da wir nur das Intervall [0,100] für eine mögliche Lösung von T4 betrachten.
  • Seite 249: Tabelle enthält die falschen Blockierzeiten für T3 und T4, richtig wäre T3=9 und T4=9

Copyright © 2014 Michael Mächtel + Jürgen Quade -- Impressum