Inżynieria Wytwarzania Systemów Wbudowanych

Podobne dokumenty
Dokumentacja i systemy jakości

Inżynieria Wytwarzania Systemów Wbudowanych

Inżynieria Wytwarzania Systemów Wbudowanych

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Tablice, funkcje - wprowadzenie

Podstawy programowania skrót z wykładów:

Wstęp do programowania

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie strukturalne i obiektowe

Kompilator języka C na procesor 8051 RC51 implementacja

external Data Representation

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Język C - podstawowe informacje

Zmienne, stałe i operatory

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Co nie powinno być umieszczane w plikach nagłówkowych:

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

2 Przygotował: mgr inż. Maciej Lasota

Szablony funkcji i szablony klas

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie w elektronice: Podstawy C

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Tablice deklaracja, reprezentacja wewnętrzna

Algorytmy i struktury danych. wykład 1

Wykład 1

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Mikrokontroler ATmega32. Język symboliczny

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

PROGRAMOWANIE w C prolog

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

PMiK Programowanie Mikrokontrolera 8051

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

1 Podstawy c++ w pigułce.

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Podstawy programowania komputerów

Języki programowania obiektowego Nieobiektowe elementy języka C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

dr inż. Jarosław Forenc

1 Podstawy c++ w pigułce.

Język C zajęcia nr 11. Funkcje

ROZDZIAŁ 2. Operatory

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Język C, tablice i funkcje (laboratorium, EE1-DI)

Programowanie Komputerów

Wskaźniki. Informatyka

MATERIAŁY DO ZAJĘĆ II

Język ludzki kod maszynowy

Przesłanianie nazw, przestrzenie nazw

Język C++ Różnice między C a C++

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Typy danych. Przemysław Gawroński D-10, p lutego Wykład 1. (Wykład 1) Typy danych 25 lutego / 11

Wprowadzenie do szablonów klas

Java Podstawy. Michał Bereta

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Lab 9 Podstawy Programowania

Języki i metodyka programowania. Wprowadzenie do języka C

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Sun RPC/XDR. Dariusz Wawrzyniak 1

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Wstęp do programowania 1

Szablony. Szablony funkcji

Podstawy programowania

Wprowadzenie do szablonów szablony funkcji

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

LibreOffice Calc VBA

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Pliki. Informacje ogólne. Obsługa plików w języku C

Sun RPC/XDR 10. listopada Dariusz Wawrzyniak (IIPP) 1

external Data Representation

Języki i techniki programowania Ćwiczenia 2

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wprowadzenie do szablonów szablony funkcji

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie strukturalne język C - wprowadzenie

Funkcja (podprogram) void

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Wstęp do programowania

Podstawy programowania w języku C++

Transkrypt:

GUT Intel 2015/16 1/30 Inżynieria Wytwarzania Systemów Wbudowanych Wykład 3 Iwona Kochańska Katedra Systemów Elektroniki Morskiej WETI PG October 18, 2018

Dobre praktyki GUT Intel 2015/16 2/30

Przenośność (Portability) Przenośność (portability) - wysiłek, który może być wymagany dla przeniesienia oprogramowania z jednego systemu sprzętowego lub programowego do drugiego Dobra praktyka: pisz w takim stylu, który jest niezależny od konkretnego kompilatora używaj tylko standardowych elementów języka używaj tylko standardowych znaków i znaków specjalnych upewniaj się co do reprezentacji typów danych w systemie i zapisuj to w dokumentacji pisz w stylu niezależnym od środowiska, w którym wytwarzasz oprogramowanie wszystkie elementy zależne od implementacji powinny być udokumentowane, np.: reprezentacja liczb zmiennoprzecinkowych jak traktowane sa znaki reszty z dzielenia liczb całkowitych (C90) kolejność szukania plików wymienionych przez dyrektywy #include użycie innych znaków niż standardowe (alfanumeryczne łacińskie, _ { } [ ] # ( ) < > % : ;.? * + / ^ & =,, spacja, znaki nowej linii i GUT Intel 2015/16 3/30 powrotu karetki, tab)

Przenośność (Portability) Znaki modyfikacji (ucieczki), sekencja zmodyfikowana (znak modyfikacji + sekwencja po nim następujaca, której domyślne znaczenie zmienił znak modyfikacji) Standardowe znaki modyfikacji: Nie używaj innych niż standardowe znaków modyfikacji! GUT Intel 2015/16 4/30

Przenośność (Portability) Typ char a znak (signed/unsigned) w przeciwieństwie do typu int typ char nie ma domyślnie okreslonego znaku - to zależy od kompilatora. jesli chcesz wykorzytać char do przechowywania wartości liczbowej, określaj jawnie, czy jest to signed char czy unsigned char, najlepiej tworzac nowa definicję typu GUT Intel 2015/16 5/30

Przenośność (Portability) Wartości typu enum w języku C typ wyliczeniowy powinien reprezentować wartości int Język C++ pozwala na wartości long int w typie wyliczeniowym GUT Intel 2015/16 6/30

Przenośność (Portability) Pojedyncze bity nie używaj pojedynczych bitów (bit fields) jesli już musisz użyć pojedynczych bitów, rób to w sposób taki, by pozycja bitu w słowie nie miała znaczenia. Używaj masek bitowych i operatorów & i Różnice w interpretacji pojedynczych bitów w słowie moga wynikać z: 1. Różnicy między typem signed a unsigned 2. Kolejności bitów w słowie 3. Rzeczywistej reprezentacji pola bitowego w jednostce pamięci GUT Intel 2015/16 7/30

Przenośność (Portability) Format #include niektóre kompilatory zrozumieja format #include inny niż z użyciem i <>, ale większość zgłosi bład. Unikaj innych rozwiazań niz standardowe i <>. typu GUT Intel 2015/16 8/30

Przenośność (Portability) Format #include używaj < > dla plików nagłówkowych dostarczanych wraz z kompilatorem używaj dla plików nagłówkowych innych niż dostarczanych wraz z kompilatorem GUT Intel 2015/16 9/30

Przenośność (Portability) Format #include Standard języka C nie definiuje, jak interpretować znaki \ lub /* w łańcuchu znaków ograniczonym przez < > lub Zachowanie znaku : jest również specyficzne dla kompilatora GUT Intel 2015/16 10/30

Przenośność (Portability) Format #include Nigdy nie podawaj bezwzględnej ścieżki do pliku nagłówkowego GUT Intel 2015/16 11/30

Przenośność (Portability) Kod assemblera w kodzie C/C++ Nie wszystkie kompilatory obsługuja funkcję asm (string),która pozwala na dołaczenie do kodu instrukcji assemblera. Lepiej jest używać funkcji inline zdefiniowanej jako makro preprocesora GUT Intel 2015/16 12/30

Przenośność (Portability) Dyrektywy #pragma - funkcje specyficzne dla kompilatora Dyrektywy pragma umożliwiaja definiowanie funkcji specyficznych dla kompilatora Nie wołaj takich specyficznych funkcji bezpośrednio - definiuj dla nich makra GUT Intel 2015/16 13/30

Przenośność (Portability) Typy proste Rozmiar i reprezentacja prostych typów (int i floating point) zależa od kompilatora Definiuj własne typy, nawet dla typów prostych Standard C99 proponuje następuj ace nazwy (jeśli używasz C90, użyj tych nazw do zdefiniowania typów prostych): GUT Intel 2015/16 14/30

Dobre praktyki Wydajność (efficiency) - ilość przetwarzanych zasobów i kodu, które program potrzebuje do wykonywania swoich funkcji Pisz tak, by brać pod uwagę ilość zasobów i wymagania czasowe wobec działania progrmu GUT Intel 2015/16 15/30

Wydajność Wywołanie funkcji a makro Częste wywołania funkcji moga spowalniać działanie systemu Zadania krytyczne czasowo moga być realizowane przez makra, ale z zachowaniem szczególnej ostrożności - działanie makr zależy od implementacji Liczne wywołania makr zwiększaja rozmiar pliku binarnego GUT Intel 2015/16 16/30

Przenośność (Portability) Niezmienne elementy w instrukcjach iteracyjnych Nie umieszczaj w instrukcjach iteracyjnych elementów, które sa niezmienne Kompilator w procesie optymalizacji nie musi zoptymalizować wszystkiego. Wówczas taka stała instrukcja wołana iteracyjnie spowalnia działanie systemu. GUT Intel 2015/16 17/30

Wydajność Wskaźniki do struktur danych Nie przekazuj do funkcji całych struktur danych, tylko wskaźniki do nich GUT Intel 2015/16 18/30

Typowe błędy w oprogramowaniu systemów wbudowanych Instrukcje bez znaczenia dla działania programu moga prowadzić do błędnego rozumienia kodu instrukcja, która nigdy nie jest wykonywana return ret ; ret = ERROR ; instrukcja, której rezultat nigdy nie jest wykorzystany void func ( ) { int cnt ; } cnt = 0; return ; GUT Intel 2015/16 19/30

Typowe błędy w oprogramowaniu systemów wbudowanych Instrukcje bez znaczenia dla działania programu moga prowadzić do błędnego rozumienia kodu instrukcja, której rezultat nigdy nie jest wykorzystany int func ( ) { int cnt ; } return cnt ++; parametry do funkcji, które nigdy nie sa wykorzystane int func ( int in) { in = 0; /* Overwriting the parameter */ } GUT Intel 2015/16 20/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne wyrażenia i instrukcje błędne sprawdzanie, czy zmienna mieści się w zakresie wartości (w języku C poniższe wyrażenie zawsze reprezentuje wartość TRUE) if (0 < x < 10) porównanie zmiennej z wartościa poza zakresem zmiennej unsigned char uc; unsigned int ui; if ( uc == 256) switch (uc) { case 256: } if (ui < 0) GUT Intel 2015/16 21/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne wyrażenia i instrukcje porównywanie łańcuchów znaków za pomoca operatora == if ( str == " abc ") niezgodność między typem zwracanym przez funkcję a zwracana wartościa int func1 ( int in) { if (in < 0) return ; /* No good */ return in ; } GUT Intel 2015/16 22/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne odwołanie do pamięci odwołanie do pamięci poza zakresem tablicy char var1 [N]; for (i = 1; i <= N; i ++) { /* Accessing outside the array bounds */ var1 [i] = i; } var1 [ -1] = 0; /* error */ var1 [N] = 0; /* error */ GUT Intel 2015/16 23/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne odwołanie do pamięci Referencja do zmiennej lokalnej po wyjściu z funkcji int * func ( tag *p) { int x; /* The automatic variable memory area is referenced after the function return */ p-> mem = &x; return &x; } tag y; int *p; p = func (&y); *p = 10; *y. mem = 20; GUT Intel 2015/16 24/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne odwołanie do pamięci Referencja do pamięci, która została zwolniona struct stag { /* A list structure */ struct stag * next ;... }; struct stag * wkp ; /* Pointer to the list structure */ struct stag * top ; /* Start pointer to the list structure */... /* Process to free the list structure by its elements */ /* It will accesses to an already freed area at the third control expression in the for statement */ for ( wkp = top ; wkp!= NULL ; wkp = wkp -> next ) { free ( wkp ); } GUT Intel 2015/16 25/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne odwołanie do pamięci błędny rozmiar kopiowanego obszaru pamięci # define A 10 # define B 20 char char a[a]; b[b]; memcpy (a, b, sizeof (b )); GUT Intel 2015/16 26/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne wyrażenia logiczne użycie && zamiast if (x < 0 && x > 10) użycie zamiast && int i, data [10], end = 0; for (i = 0; i < 10! end ; i ++) { data [i] = Value_assigned ; /* risk of corrupting outside the ar if ( termination_condition ) { end = 1; } } Określaj ac warunek wykonania referencji do pamięci zawsze używaj operatora &&! GUT Intel 2015/16 27/30

Typowe błędy w oprogramowaniu systemów wbudowanych Niepoprawne wyrażenia logiczne użycie operatora bitowego zamiast logicznego if ( len1 & len2 ) Mylenie operatorów = i == if ( x = 0 ) GUT Intel 2015/16 28/30

Typowe błędy w oprogramowaniu systemów wbudowanych Używanie tej samej nazwy makra dla różnych definicji # define AAA 100 a = AAA ; # define AAA 10 b = AAA ; Zapis do pamięci oznaczonej jako const void func ( const int *p) { *p = 0; /* Writing into the const area ( error ) */ Nie każdy kompilator zgłosi bład! GUT Intel 2015/16 29/30

Literatura GUT Intel 2015/16 30/30