Programowanie między asemblerem a językiem C Podstawy oprogramowania wbudowanego

Programowanie między asemblerem a językiem C Podstawy oprogramowania wbudowanego
Daniel W. Lewis

Kategoria: Języki programowania, Asembler
Wydawnictwo: READ ME

Ilość stron: 300
ISBN: 83-7243-412-3
Programowanie między asemblerem a językiem C Podstawy oprogramowania wbudowanego

Książka "Programowanie między asemblerem a językiem C Podstawy oprogramowania wbudowanego" stanowi znakomitą alternatywę dla tradycyjnych tekstów uniwersyteckich na temat organizacji komputera i programowania w języku asemblera. Asembler występuje w niej tak, jak jest on najczęściej wykorzystywany w praktyce - jako narzędzie do implementowania niewielkich, szybkich i wyspecjalizowanych procedur wywoływanych z programu głównego napisanego w języku wysokiego poziomu, takiego jak C.

Na bazie oprogramowania osadzonego książka wprowadza techniki programowania wielowątkowego, systemy z wywłaszczaniem i bez wywłaszczania , dzielone zasoby oraz szeregowanie, dostarczając w ten sposób solidne podstawy do dalszej nauki systemów operacyjnych, systemów czasu rzeczywistego i projektowania opartego na mikroprocesorach.

Spis treści: 

Przedmowa

Rozdział 1 Wstęp

  • 1.1 Co to jest system wbudowany?
  • 1.2 Czym wyróżnia się projektowanie oprogramowania wbudowanego?
  • 1.3 Co oznacza "system czasu rzeczywistego"?
  • 1.4 Co oznacza "wielozadaniowość"?
  • 1.5 Jaka jest moc procesorów wbudowanych?
  • 1.6 Jakie języki programowania są wykorzystywane?
  • 1.7 Co to jest "jądro czasu rzeczywistego"?
  • 1.8 Na czym polega wyjątkowość tworzenia aplikacji wbudowanej?
  • 1.9 Jak duże są typowe programy wbudowane?
  • 1.10 Oprogramowanie używane w tej książce
  • Zadania

Rozdział 2 Reprezentacja danych

  • 2.1 Liczby dwójkowe o stałej precyzji
  • 2.1.1 Pozycyjne systemy liczbowe
  • 2.1.2 Konwersja zapisu binarnego na dziesiętny
  • 2.1.3 Konwersja zapisu dziesiętnego na binarny
  • 2.1.4 Zliczanie
  • 2.1.5 Stała precyzja i przekraczanie zakresu
  • 2.1.6 Reprezentacja heksadecymalna
  • 2.2 Dwójkowa reprezentacja liczb całkowitych
  • 2.2.1 Liczby całkowite ze znakiem
  • 2.2.2 Dodatnia i ujemna reprezentacja tej samej wartości bezwzględnej
  • 2.2.3 Interpretowanie wartości uzupełnienia dwójkowego liczby
  • 2.2.4 Więcej o zakresie i nadmiarze
  • 2.2.5 Uzupełnienie dwójkowe i złożoność sprzętowa
  • 2.3 Binarna reprezentacja liczb rzeczywistych
  • 2.3.1 Reprezentacja stałoprzecinkowa
  • 2.3.2 Zapis stałoprzecinkowy z użyciem uniwersalnego formatu 16.16
  • 2.3.3 Zapis stałoprzecinkowy z użyciem uniwersalnego formatu 32.32
  • 2.3.4 Reprezentacja zmiennoprzecinkowa
  • 2.4 Reprezentacja tekstu przy użyciu kodu ASCII
  • 2.5 Liczby dziesiętne kodowane binarnie (BCD)
  • Zadania

Rozdział 3 Maksymalne wykorzystywanie C

  • 3.1 Typy całkowite
  • 3.2 Mieszane typy danych
  • 3.3 Pomocne deklaracje typedef i define
  • 3.4 Operowanie bitami w pamięci
  • 3.4.1 Sprawdzanie bitów
  • 3.4.2 Ustawianie, zerowanie i odwracanie bitów
  • 3.4.3 Wyciąganie bitów
  • 3.4.4 Wstawianie bitów
  • 3.5 Operowanie bitami w portach we/wy
  • 3.5.1 Porty we/wy tylko do zapisu
  • 3.5.2 Podział portów ze względu na pisanie i czytanie
  • 3.5.3 Podział portów ze względu na sekwencyjny dostęp
  • 3.5.4 Podział portów ze względu na bity w zapisywanych danych
  • 3.6 Dostęp do urządzeń we/wy mapowanych w pamięci
  • 3.6.1 Dostęp do danych przy użyciu wskaźnika
  • 3.6.2 Tablice, wskaźniki i operator "adres"
  • 3.7 Struktury
  • 3.7.1 Struktury upakowane
  • 3.7.2 Pola bitowe
  • 3.8 Dostęp wariantowy
  • 3.8.1 Rzutowanie adresu obiektu
  • 3.8.2 Korzystanie z unii
  • Zadania

Rozdział 4 Spojrzenie programisty na budowę komputera

  • 4.1 Pamięć
  • 4.2 Jednostka centralna (CPU)
  • 4.2.1 Jednostka arytmetyczna i logiczna (ALU)
  • 4.2.2 Pozostałe rejestry
  • 4.2.3 Jednostka sterująca
  • 4.3 Wejście/wyjście (we/wy)
  • 4.4 Wprowadzenie do architektury Intela
  • 4.4.1 Formaty instrukcji
  • 4.4.2 Argumenty instrukcji
  • 4.4.3 Ograniczenia dotyczące argumentów
  • 4.4.4 Rejestry
  • 4.4.5 Stos
  • 4.5 Architektura trybu rzeczywistego procesorów Intela
  • 4.5.1 Adresowanie segmentowe
  • 4.5.2 Tryby adresowania
  • 4.6 Architektura trybu chronionego procesorów Intela
  • 4.6.1 Rejestry segmentowe i Globalna tablica deskryptorów
  • 4.6.2 Płaski model pamięci
  • 4.6.3 Tryby adresowania
  • 4.7 Prefiksy przesłaniające argumenty i rozmiar adresu
  • 4.8 Instrukcje procesorów Intela do przetwarzania danych
  • 4.8.1 Instrukcje przenoszenia danych, instrukcje stosu i instrukcje we/wy
  • 4.8.2 Instrukcje arytmetyczne
  • 4.8.3 Instrukcje działające na bitach
  • 4.8.4 Instrukcje przesunięcia bitów
  • Zadania

Rozdział 5 Łączenie języka C i asemblera

  • 5.1 Programowanie w asemblerze
  • 5.2 Konwencje korzystania z rejestrów
  • 5.3 Typowe użycie opcji adresowania
  • 5.3.1 Dostęp do danych, których adres jest stałą
  • 5.3.2 Dostęp do danych, których adres jest zmienną
  • 5.4 Instrukcje wyboru kolejności
  • 5.4.1 Warunki złożone
  • 5.4.2 Instrukcje if-then-else
  • 5.4.3 Budowanie pętli
  • 5.4.4 Szybsze pętle przy użyciu instrukcji łańcuchowych
  • 5.5 Wywoływanie procedur i powracanie
  • 5.6 Przekazywanie parametrów
  • 5.7 Pobieranie parametrów
  • 5.8 Wszystko jest przekazywane przez wartość
  • 5.9 Zmienne tymczasowe
  • Zadania

Rozdział 6 Programowanie wejścia/wyjścia

  • 6.1 Instrukcje we/wy procesorów Intela
  • 6.2 Synchronizacja, prędkość przesyłania i opóźnienie
  • 6.3 Pętle oczekujące z odpytywaniem
  • 6.4 We/wy sterowane przerwaniami
  • 6.4.1 Reakcja sprzętowa
  • 6.4.2 Procedura obsługi przerwania
  • 6.4.3 Programowalne kontrolery przerwań
  • 6.4.4 Bufory i kolejki
  • 6.4.5 Pisanie procedur obsługi przerwań w asemblerze
  • 6.4.6 Pisanie procedur obsługi przerwań w C
  • 6.4.7 Przerwania niemożliwe do zamaskowania
  • 6.4.8 Przerwania programowe
  • 6.4.9 Wyjątki
  • 6.5 DMA - bezpośredni dostęp do pamięci
  • 6.5.1 Podwójne buforowanie
  • 6.6 Porównanie metod
  • Zadania

Rozdział 7 Oprogramowanie współbieżne

  • 7.1 Systemy wielopoziomowe
  • 7.1.1 Stan wątku i serializowanie
  • 7.1.2 Zarządzanie opóźnieniem
  • 7.1.3 Zapobieganie przepełnieniu przerwań
  • 7.1.4 Przenoszenie działań na drugi plan
  • 7.2 Programowanie wielowątkowe
  • 7.2.1 Współbieżne wykonywanie niezależnych wątków
  • 7.2.2 Przełączanie kontekstu
  • 7.2.3 Wielozadaniowość bez wywłaszczania (kooperacyjna)
  • 7.2.4 Wielozadaniowość z wywłaszczaniem
  • 7.3 Zasoby dzielone i sekcje krytyczne
  • 7.3.1 Wyłączanie przerwań
  • 7.3.2 Wyłączanie przełączania zadań
  • 7.3.3 Blokady wirujące
  • 7.3.4 Muteksy
  • 7.3.5 Semafory
  • Zadania

Rozdział 8 Szeregowanie zadań

  • 8.1 Stany wątków
  • 8.2 Wątki oczekujące
  • 8.3 Przełączanie kontekstu
  • 8.4 Szeregowanie zadań metodą cykliczną
  • 8.5 Szeregowanie oparte na priorytetach
  • 8.5.1 Inwersja priorytetów
  • 8.5.2 Protokół PIP
  • 8.5.3 Protokół PCP
  • 8.6 Przypisywanie priorytetów
  • 8.6.1 Szeregowanie sterowane terminami
  • 8.6.2 Szeregowanie na podstawie RMA
  • 8.7 Zakleszczenie
  • 8.8 Kontrolne liczniki zegarowe
  • Zadania

Rozdział 9 Zarządzanie pamięcią

  • 9.1 Obiekty w języku C
  • 9.2 Zasięg
  • 9.2.1 Udoskonalanie zasięgu lokalnego
  • 9.2.2 Udoskonalanie zasięgu globalnego
  • 9.3 Czas życia
  • 9.4 Alokacja automatyczna
  • 9.4.1 Klasa pamięci "Rejestr"
  • 9.5 Alokacja statyczna
  • 9.6 Trzy programy pomagające odróżnić alokację statyczną od automatycznej
  • 9.6.1 Tworzenie obiektu
  • 9.6.2 Inicjalizacja obiektu
  • 9.6.3 Usuwanie obiektu
  • 9.7 Alokacja dynamiczna
  • 9.7.1 Fragmentacja
  • 9.7.2 Pule alokacji pamięci
  • 9.8 Alokacja automatyczna o zmiennym rozmiarze (alloca)
  • 9.8.1 Tablice o zmiennym rozmiarze
  • 9.9 Funkcje rekurencyjne a alokacja pamięci
  • Zadania

Rozdział 10 Pamięć dzielona

  • 10.1 Rozpoznawanie obiektów dzielonych
  • 10.1.1 Dzielone dane globalne
  • 10.1.2 Dzielone dane prywatne
  • 10.1.3 Funkcje dzielone
  • 10.2 Funkcje wielobieżne
  • 10.3 Dane "tylko do odczytu"
  • 10.3.1 Kwalifikator typu "const"
  • 10.4 Odradzane metody kodowania
  • 10.4.1 Funkcje, które zachowują wewnętrzny stan lokalnych obiektów statycznych
  • 10.4.2 Funkcje zwracające adres lokalnego obiektu statycznego
  • 10.5 Dostęp do pamięci dzielonej
  • 10.5.1 Konsekwencje wielkości słowa procesora
  • 10.5.2 Dostęp typu "tylko odczyt" i "tylko zapis"
  • 10.5.3 Kwalifikator typu "volatile"
  • Zadania

Rozdział 11 Inicjalizacja systemu

  • 11.1 Organizacja pamięci
  • 11.2 Procesor centralny
  • 11.2.1 Ustawianie płaskiego modelu pamięci
  • 11.2.2 Zmiana trybu na chroniony
  • 11.3 Środowisko runtime języka C
  • 11.3.1 Kopiowanie z pamięci ROM do RAM
  • 11.3.2 Zerowanie danych statycznych niezainicjalizowanych
  • 11.3.3 Konfigurowanie stogu
  • 11.4 Zegar systemowy
  • 11.4.1 Zegar 0: takt zegara
  • 11.4.2 Zegar 1: odświeżanie pamięci
  • 11.4.3 Zegar 2: częstotliwość głośnika
  • 11.5 System przerwań
  • 11.5.1 Inicjalizacja IDT
  • 11.5.2 Inicjalizacja urządzeń PIC 8259
  • 11.5.3 Instalowanie nowej procedury obsługi przerwania (ISR)

Dodatek A Zawartość CD-ROM-u

Dodatek B Kompilator C/C++ DJGPP

  • Instalacja
  • Kompilacja
  • Dokumentacja online

Dodatek C Asembler NASM

  • Instalacja
  • Uruchamianie NASM

Dodatek D Projekty programów

  • Pliki z dysku CD wymagane przez wszystkie aplikacje
  • Pliki z dysku CD wymagane przez aplikacje wielowątkowe bez wywłaszczania
  • Kompilacja i asemblacja aplikacji wbudowanej
  • Łączenie aplikacji wbudowanej
  • Uruchamianie aplikacji wbudowanej
  • Program 1: Poznawanie narzędzi kompilatora DJGPP
  • Program 2: Korzystanie ze stałoprzecinkowych liczb rzeczywistych
  • Program 3: Używanie makr i argumentów upakowanych
  • Program 4: korzystanie z plików "makefile"
  • Program 5: Kodowanie w asemblerze mnożenia o zwiększonej precyzji
  • Program 6: Kodowanie w asemblerze dzielenia o zwiększonej precyzji
  • Program 7: Pętla oczekująca z odpytywaniem oraz wejście/wyjście sterowane przerwaniami
  • Program 8: Prosta aplikacja wielowątkowa bez wywłaszczania
  • Program 9: Jądro z wywłaszczaniem i zasoby dzielone
  • Program 10: Unikanie nieograniczonej inwersji priorytetów
  • Program 11: Unikanie zakleszczenia

Dodatek E Biblioteka libepc

  • Organizacja pamięci i inicjalizacja
  • Funkcje ekranowe (display.c)
  • Funkcje okienkowe (window.c)
  • Funkcje klawiaturowe (keyboard.c)
  • Funkcje głośnikowe (speaker.c)
  • Funkcje zegarowe (timer.c, cycles.asm)
  • Funkcje dostępu do wektora przerwania (init-idt.c)
  • Funkcje dynamicznej alokacji pamięci (heap.c)
  • Funkcje stałoprzecinkowe (fixedpt.asm)
  • Skoki między funkcjami (setjmp.asm)
  • Inne funkcje (init-crt.c)

Dodatek F Program wstępnego ładowania

Języki programowania, Asembler


Podobne książki:


ABC Visual Basica 6 ABC Visual Basica 6 Doskonały podręcznik dla początkujących programistów! Jednak i doświadczeni użytkownicy znajdą w niej ciekawe informacje. Dzięki tej książce nauczysz się tworzyć programy sterowane zdarzeniami, poznasz podstawowe i zaawansowane techniki stosowane w...
 
C++ algorytmy i struktury danych C++ algorytmy i struktury danych Badanie struktur danych, elementarnych składników wykorzystywanych w informatyce, jest podstawą, w oparciu o którą możesz zdobywać cenne umiejętności. Znajomość struktur danych jest niezbędna studentom, którzy chcą programować czy też testować...
 
Delphi 4 Tworzenie systemów baz danych Księga eksperta Delphi 4 Tworzenie systemów baz danych Księga eksperta Książka "Delphi 4 Tworzenie systemów baz danych Księga eksperta" to zarówno podręcznik do nauki programowania aplikacji bazodanowych, jak i kompendium wiedzy o bibliotece VCL w części, która dotyczy baz danych. Studiując tę książkę można...