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 223 Gleichung 8-6
    • falsch: ... = E(I-t_Dmax,i) = ....
    • richtig: ... = E(I-t_Dmax,i) * t_Emax,i = ...
  • 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 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 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