Przedmowa 7
1. Podstawy 11
1.1. Mikrokontroler STM32F107 12
1.2. Struktura przykładów 13
1.3. Przykład 1a - miganie diodami świecącymi 15
1.3.1. Plik ex_led.c 16
1.3.2. Pliki util_delay.h i util_delay.c 17
1.3.3. Pliki boardled.h i boardled.c 17
1.3.4. Pliki stm32f10x_gpio.h i stm32f10x_rcc.h 18
1.3.5. Pliki stm32f10x.h, system_stm32f10x.h i core_cm3.h 19
1.3.6. Plik libstm32f10x.a 19
1.3.7. Plik stm32f10_conf.h 20
1.3.8. Pliki board_def.h i board_defs.h 21
1.3.9. Plik stdint.h 22
1.3.10. Plik startup_stm32_cld.c 22
1.4. Kompilowanie przykładów 23
1.5. Wejścia i wyjścia binarne 26
1.6. Wyświetlacz ciekłokrystaliczny 30
1.7. Przykład 1b - test wyświetlacza ciekłokrystalicznego 33
1.7.1. Pliki board_lcd.h i board_lcd_ks0108.c 34
1.7.2. Pliki font5x8.h i font5x8.c 37
1.7.3. Pliki util_lcd.h i utillcd.c 37
1.7.4. Plik ex_lcd.c 38
1.8. Organizacja pamięci programu 38
1.8.1. Sekcje 38
1.8.2. Procedura startowa 42
1.8.3. Skrypt konsolidatora 45
1.9. Styl pisania i komentowania tekstu źródłowego 49
2. Intersieci 51
2.1. Model warstwowy 52
2.2. Ethernet 54
2.3. IP – protokół intersieci 60
2.4. ARP - tłumaczenie adresów sieciowych na adresy sprzętowe 66
2.5. Sieć testowa 67
2.6. Przykład 2 – monitor sieci 69
2.6.1. Pliki boardinit.h i boardinit.c 70
2.6.2. Pliki util_led.h i util_led.c 79
2.6.3. Plik ex_eth.c 80
3. Stos TCP/IP 83
3.1. Przegląd implementacji 84
3.2. Biblioteka lwIP 86
3.2.1. Dopasowanie do architektury mikrokontrolera – plik cortex-m3.h 86
3.2.2. Parametry konfiguracyjne – plik lwipopts.h 93
3.2.3. Kompilowanie – plik liblwip4.a 100
3.2.4. Kody błędów 101
3.2.5. Struktura pbuf 101
3.2.6. Struktura netif 104
3.3. DMA 106
3.4. Przykład 3a – pierwsza wersja sterownika Ethernetu 109
3.4.1. Pliki util_time.h i util_time.c 109
3.4.2. Pliki util_eth.h i util_eth.c – inicjowanie interfejsu sieciowego 112
3.4.3. Plik util_eth.c – wysyłanie ramek ethernetowych 117
3.4.4. Plik util_eth.c – odbieranie ramek ethernetowych 118
3.4.5. Pliki util_lwip.h i util_lwip.c – inicjowanie interfejsu sieciowego 120
3.4.6. Pliki util_lwip.h i util_lwip.c – budziki 122
3.4.7. Pliki board_conf.h i board_conf.c 124
3.4.8. Pliki util_lcd_ex.h i util_lcd_ex.c 125
3.4.9. Plik ex_ip.c 125
3.5. Przykład 3b – sterownik Ethernetu bez kopiowania 127
3.5.1. Plik util_eth_nc.c – inicjowanie interfejsu sieciowego 127
3.5.2. Plik util_eth_nc.c – wysyłanie ramek ethernetowych 130
3.5.3. Plik util_eth_nc.c – odbieranie ramek ethernetowych 130
3.6. Przykład 3c – eksperymentalny sterownik Ethernetu bez kopiowania 132
3.6.1. Plik util_eth_zc.c – inicjowanie interfejsu sieciowego 133
3.6.2. Plik util_eth_zc.c – wysyłanie ramek ethernetowych 134
3.7. Testy sterowników 136
3.8. ICMP – komunikaty kontrolne i komunikaty o błędach 137
3.8.1. Sprawdzanie osiągalności odbiorcy 138
3.8.2. Powiadamianie o nieosiągalności odbiorcy 139
3.8.3. Kontrola przepływu 139
3.8.4. Przekroczenie czasu 140
3.8.5. Problem z parametrem 140
3.9. DHCP – konfigurowanie ustawień sieciowych węzła 141
4. Programowanie w modelu klient-serwer 143
4.1. Numer portu 145
4.2. TCP 146
4.2.1. Podstawowe własności 146
4.2.2. Nagłówek 147
4.2.3. Otwieranie połączenia 149
4.2.4. Przesyłanie danych 152
4.2.5. Zamykanie połączenia 153
4.2.6. Funkcje biblioteczne 154
4.2.7. Funkcje zwrotne 160
4.3. UDP 162
4.3.1. Podstawowe własności 162
4.3.2. Nagłówek 162
4.3.3. Inicjowanie klienta i serwera 163
4.3.4. Przesyłanie danych 163
4.3.5. Funkcje biblioteczne 164
4.3.6. Funkcja zwrotna 166
4.4. Uwagi końcowe 166
5. Serwer TCP 169
5.1. Protokół warstwy aplikacji 170
5.1.1. Projekt protokołu 170
5.1.2. Projekt implementacji protokołu 172
5.2. Przykład 5a - pierwsza wersja serwera TCP 178
5.2.1. Pliki tcpserver.h i tcp_server.c 178
5.2.2. Plik ex_tcpd.c 185
5.2.3. Testowanie przykładu 186
5.3. Przykład 5b - serwer TCP z nadzorcą 188
5.3.1. Pliki utilwdg.h i utilwdg.c 189
5.3.2. Plik ex_tcpd_wdg.c 190
5.3.3. Testowanie przykładu 191
6. Klient TCP 193
6.1. Projekt protokołu 194
6.2. Przykład 6a - pierwsza wersja klienta TCP 197
6.2.1. Tryby o obniżonym poborze mocy 198
6.2.2. Pliki utilrtc.h i utilrtc.c 198
6.2.3. Pliki tcpclient.h i tcpclient.c 202
6.2.4. Plik utilerror.h 210
6.2.5. Plik ex_tcp_client.c 211
6.2.6. Testowanie przykładu 212
6.3. Przykład 6b - klient TCP z obsługą rejestrów zapasowych 214
6.3.1. Pliki utilbkp.h i utilbkp.c 214
6.3.2. Plik tcp_client_bkp.c 216
6.3.3. Plik ex_tcp_clnt_bkp.c 217
6.3.4. Testowanie przykładu 217
7. Serwer UDP 219
7.1. Projekt protokołu 220
7.2. Przykład 7 – prosty serwer UDP 221
7.2.1. Pliki udp_server.h i udp_server.c 221
7.2.2. Plik ex_udpd.c 224
7.2.3. Testowanie przykładu 225
8. Klient UDP 227
8.1. DNS 228
8.2. SNTP 229
8.3. Przykład 8 - automatyczna synchronizacja zegara czasu rzeczywistego 232
8.3.1. Pliki sntp_client.h i sntp_client.c 232
8.3.2. Plik ex_sntp.c 238
8.3.3. Testowanie przykładu 240
8.3.4. Uwagi końcowe 241
9. Rozgłaszanie UDP 243
9.1. Przykład 9a - rozgłaszanie datagramów UDP 244
9.1.1. Plik ex_send_bcast.c 244
9.1.2. Testowanie przykładu 247
9.2. Przykład 9b - odbieranie datagramów UDP 247
9.2.1. Plik ex_recv_bcast.c 248
9.2.2. Testowanie przykładu 249
10. Serwis WWW 251
10.1. Komunikacja między klientem a serwerem WWW 252
10.1.1. URI 252
10.1.2. HTTP 253
10.1.3. HTML 256
10.2. Przykład 10 – prosty serwis WWW 259
10.2.1. Pliki http_parser.h i http_parser.c 259
10.2.2. Pliki http_server.h, http.h i http_application.h 265
10.2.3. Plik httpserver.c – obsługa HTTP 266
10.2.4. Plik http_server.c - obsługa połączenia TCP 271
10.2.5. Plik httpapplication.c 273
10.2.6. Plik stm32_logo.h 277
10.2.7. Plik ex_httpd.c 278
10.2.8. Testowanie przykładu 278
Dodatek. Narzędzia GNU 281
Literatura 286