TECHNIKA JĄDROWA. Sterowniki sprzętowe stanowią sporą. Nowe jądro 2.6 programowanie jądra i sterowników odcinek 6
|
|
- Michalina Adamska
- 7 lat temu
- Przeglądów:
Transkrypt
1 Nowe jądro 2.6 programowanie jądra i sterowników odcinek 6 TECHNIKA JĄDROWA Do nowości w jądrze 2.6 należy model urządzeń i system plików sys. Pokażemy, jak wykorzystać je we własnych modułach jądra. EVA-KATHARINA KUNST I JÜRGEN QUADE Sterowniki sprzętowe stanowią sporą część jądra. Linux 2.6 udostępnia jednolite interfejsy do ich programowania i wykorzystywania: model urządzeń i system plików sys. Informacje na ich temat są lakoniczne. Nic dziwnego, te składniki są zupełnie nowe i trwa ich rozwój. Każdy, kto chce we własnych sterownikach urządzeń obsługiwać nowy model, musi sam wyszukać zmienne, interfejsy i semantykę wywołań w kodzie źródłowym Linuksa. W drzewie jądra znajdują się pewne pliki tekstowe, które opisują nowy model sterowników (zobacz Documentation/driver-model), lecz w pewnych szczegółach odbiegają one od faktycznej implementacji. Także nazewnictwo jest bałaganiarskie. I tak nowy model urządzeń pojawia się w dyskusji programistów raz jako device model (model urządzeń), a raz jako driver model (model sterownika). Model urządzeń stanowi zarazem zestaw funkcji API jądra, a także system wykonawczy, który zarządza strukturami sterowników w jądrze. Porządkowanie za pomocą sysfs Linus Torvalds przyjął model urządzeń w nowym jądrze, choć nie jest on jeszcze zupełnie dojrzały, gdyż wielu programistów wiąże duże nadzieje z nowymi składnikami. Model wprowadza pewien porządek do krainy sterowników, ułatwia zarządzanie energią, a także zamiast systemu plików urządzeń (devfs) zarządza plikami urządzeń [1]. Rysunek 1: System plików sys kategoryzuje informacje modelu urządzeń i przedstawia je w postaci drzewa katalogów. Dla każdego obiektu, na przykład sterownika, istnieje osobny katalog. Atrybuty obiektów, chociażby dane na temat stanu sterownika, są udostępniane w postaci plików. NUMER 19 SIERPIEŃ - WRZESIEŃ
2 Technika jądrowa Rysunek 2: Jeśli sterownik ma obsługiwać własne atrybuty lub jeśli nie zgłasza się on w podsystemie sterowników (takim jak PCI, USB), programista musi jawnie użyć modelu urządzenia. Model urządzeń odzwierciedla relacje procesorów systemu z układami sterującymi, a tych z kolei z kartami rozszerzeń i pozostałym sprzętem. Obok struktury sprzętu model odzwierciedla także należące do niego składniki programowe, na przykład sterowniki urządzeń. Na podstawie informacji zgromadzonych w modelu urządzenia jądro jest w stanie obsługiwać strukturalne zarządzanie energią. Istnieje więc kolejność, w jakiej system operacyjny wyłącza sprzęt: najpierw muszą zostać wyłączone urządzenia przyłączone do magistrali, zanim w stan oszczędzania energii przejdzie sama magistrala, a następnie procesor. System plików sys jest wirtualny tak jak system plików proc: jego katalogi i pliki są tworzone dynamicznie i nie znajdują się faktycznie na dysku twardym. Drzewo katalogów generowane przez system plików sys odbija strukturę sprzętów i jego oprogramowania wewnątrz samego systemu. Użytkownik styka się z modelem urządzeń za pośrednictwem systemu plików sys (sysfs). Dlatego też musi dołączyć system plików sys do drzewa katalogów. mount -t sysfs sysfs /sys Aby otrzymać informacje z systemu plików sys, można posłużyć się jego własnym zestawem funkcji API, biblioteką libsysfs [4]. Przy stosowaniu przestarzałego już systemu devfs poprzez udev (zobacz [1]) system plików sys odgrywa decydującą rolę. Rysunek 1 pokazuje, na jakie kategorie dzielą się sterowniki i urządzenia oraz jakie dodatkowe interfejsy są dostępne, na przykład do ładowania oprogramowania układowego [2]. Obiekty pod wieloma postaciami Zgodnie z różnymi kategoriami te same urządzenia i sterowniki pojawiają się w systemie plików sys w wielu miejscach. Jedna karta sieciowa PCI jest szufladkowana przez model urządzenia jako magistrala (PCI), ale też jako urządzenie sieciowe. Występowanie plików w wielu miejscach jest realizowane za pomocą dowiązań symbolicznych. System plików sys pokazuje nie tylko strukturę urządzenia. Liście drzewa są również pseudoplikami, które można odczytać i zapisać. Tak jak w systemie plików proc, można tu czytać i ustawiać atrybuty sprzętu i oprogramowania. Możliwości wykorzystania są niemalże nieograniczone np. nazwa producenta, numer wersji, stan urządzenia, statystyka transferu karty sieciowej... Automatyczna rejestracja Włączanie i wyłączanie urządzeń oraz sterowników przy zastosowaniu modelu urządzeń następuje często niejawnie. To zadanie przejmują podsystemy PCI, USB i podsys- 52 NUMER 19 SIERPIEŃ - WRZESIEŃ
3 Listing 1: Sterownik urządzenia wirtualnego 01 #include <linux/fs.h> 02 #include <linux/version.h> 03 #include <linux/module.h> 04 #include <linux/init.h> 05 #include <linux/device.h> 06 #include <linux/completion.h> #define DRIVER_MAJOR MODULE_LICENSE ("GPL"); static struct file_operationsu Fops; 13 static DECLARE_COMPLETIONU ( DevObjectIsFree ); 14 static int Frequenz; //zmiennau stanu urządzenia static void mydevice_releaseu ( struct device *dev ) 17 { 18 complete( &DevObjectIsFree ); 19 } struct platform_device mydevice = { 22.name = "MyDevice", 23.id = 0, 24.dev = { 25.release = mydevice_release, 26 } 27 }; static struct device_driveru mydriver = { 30.name = "MyDevDrv", 31.bus = &platform_bus_type, 32 }; static ssize_t ReadFreqU ( struct device *dev, char *buf ) 35 { 36 sprintf(buf, "Częstość: %d",u Frequenz ); 37 return strlen(buf)+1; 38 } static ssize_t WriteFreq( structu device *dev, const char *buf,u size_t count ) 41 { 42 Frequenz = simple_strtoulu ( buf, NULL, 0 ); 43 return strlen(buf)+1; 44 } static DEVICE_ATTR( freq,u S_IRUGO S_IWUGO, ReadFreq, WriteFreq ); static int init DrvInit(void) 50 { 51 if(register_chrdev(driveru _MAJOR, "MyDevice", &Fops) == 0) { 52 driver_register(&mydriver);u // rejestrowanie sterownika 53 platform_device_registeru ( &mydevice );// rejestrowanieu urządzenia 54 mydevice.dev.driver = &mydriver;u // połączenie ich ze sobą 55 device_bind_driveru ( &mydevice.dev ); // połączenieu sterownika z urządzeniem 56 device_create_fileu ( &mydevice.dev, &dev_attr_freq );U // atrybuty 57 return 0; 58 } 59 return -EIO; 60 } static void exit DrvExit(void) 63 { 64 device_remove_file( &mydevi-u ce.dev, &dev_attr_freq ); 65 device_release_driveru ( &mydevice.dev ); 66 platform_device_unregisteru ( &mydevice ); 67 driver_unregister(&mydriver); 68 unregister_chrdevu (DRIVER_MAJOR,"MyDevice"); 69 wait_for_completionu ( &DevObjectIsFree ); 70 } module_init( DrvInit ); 73 module_exit( DrvExit ); tem sieciowy (zobacz Rysunek 2). Kiedy tylko sterownik wywoła funkcję register_chrdev (), przedstawioną w [3], jądro tworzy wpis. Jednak programista jądra powinien jawnie obsługiwać model urządzenia. Jeśli zaś programista chce utworzyć atrybuty do odczytu i zapisu, powinien użyć do tego celu modelu urządzenia. W innych wypadkach model urządzenia jest obligatoryjny, mianowicie wtedy, gdy: urządzenia nie są podłączane przez USB, PCI lub swoisty, standardowy system magistrali; zostaje dołączony nowy system magistrali lub są definiowane nowe klasy urządzeń. Programista we własnym kodzie musi także zgłosić sterownik i urządzenie w modelu urządzenia, a także udostępnić sensowne atrybuty. Zgłaszanie sterowników w modelu urządzenia Kiedy sterownik zgłasza się w podsystemie PCI, USB lub IDE, jest on automatycznie umieszczany w systemie plików sys, przyporządkowany odpowiedniemu obiektowi magistrali. To samo dotyczy magistrali I2C (między układami sprzętowymi), EISA i Microchannel. We wszystkich innych wypadkach sterownik musi albo zdefiniować nowy system magistrali, albo podłączyć się pod tak zwaną magistralę platformy. Ponieważ wewnątrz modelu urządzeń każdy sterownik musi mieć przyporządkowany system magistrali, magistrala platformy stanowi pojemnik dla wszystkich sterowników, które nie należą do innych magistrali. Przyłączenie sterownika do magistrali platformy przebiega standardowo: najpierw programista definiuje i inicjuje obiekt, a więc strukturę danych w języku C. Następnie przekazuje obiekt do jądra, które załatwia resztę. Kiedy sterownik nie jest już używany, musi się wyrejestrować z jądra. Na Listingu 1 zdefiniowana jest struktura danych struct device_driver i inicjuje ona elementy name i bus (wiersz 29-32). Typ danych struct device_driver i symbol platform_bus_type zostały zdefiniowane w pliku nagłówkowym linux/device.h. Przy inicjacji sterownik przekazuje obiekt do jądra przez wywołanie funkcji driver_register () (wiersz 52). Po przetworzeniu funkcji driver_register () w zamontowanym systemie plików sys pojawia się nowy katalog /sys/bus/platform/drivers/mydevdrv/. Funkcja driver_unregister () usuwa później ten wpis (wiersz 67). NUMER 19 SIERPIEŃ - WRZESIEŃ
4 Technika jądrowa Rysunek 3.:Moduł sterownika musi zdefiniować obiekty dla sterownika i dla każdego urządzenia, a następnie przekazać modelowi urządzeń. Zgłaszanie urządzeń Moduły muszą nie tylko zgłaszać sterownik w czasie działania systemu modelu urządzenia, lecz także samo urządzenie, jeśli nie zostanie automatycznie rozpoznane przez sterownik i podsystem PCI, USB lub inny. Takie urządzenia są określone w modelu jako urządzenia platformy lub systemowe. Urządzenia systemowe są w istocie cegiełkami samego komputera, a więc procesor, kontroler przerwań czy też czasomierz. Te wpisy znajdują się w katalogu /sys/devices/system/. Wszystkie pozostałe urządzenia są urządzeniami platformy. Dla nich tworzone są wpisy w katalogu /sys/devices/legacy/. Moduł definiuje urządzenie jako obiekt i inicjuje je przy zgłaszaniu, tak samo jak w wypadku sterowników (zobacz Listing 1, wiersz 21-27). Kod musi zawierać jednak poza tym funkcję release () (wiersz 16). Jest ona wywoływana przez jądro, kiedy model urządzenia nie potrzebuje już obiektu urządzenia. Moduł musi znowu sprawdzić, czy obiekt zwolnił pamięć należącą do obiektu po wywołaniu funkcji release (). Najłatwiej zrobić to za pomocą obiektu Completion [1] (wiersz 13, 18 i 69), co jest oczekiwane przy dezinicjacji sterownika. Funkcja platform_device_register() przekazuje obiekt modelowi urządzenia (wiersz 53). Wówczas jądro tworzy katalog /sys/devices/legacy/mydevice/. Podprogram platform_device_unregister() umożliwia później usunięcie wpisu katalogu (wiersz 66). Punkty dowiązania Łatwo zarejestrować obiekty sterowników i urządzeń w modelu urządzenia lecz oba obiekty nie pozostają ze sobą w żadnym związku. Tak więc model urządzeń nie wie, że urządzenie jest używane przez przykładowy sterownik i na odwrót, iż ten sterownik jest odpowiedzialny za właśnie zdefiniowane urządzenie. To powiązanie tworzy funkcja device_bind_driver (). Parametrem tej funkcji jest adres obiektu urządzenia. Przed jej wywołaniem adres obiektu sterownika mydriver musi jednak zostać wprowadzony do obiektu urządzenia mydevice. mydevice.dev.driver = &mydriver; device_bind_driver(&mydevice.dev ); Model urządzenia tworzy dowiązanie z katalogu /sys/bus/platform/drivers/mydriver do /sys/devices/legacy/mydevice. Definiowanie własnych atrybutów Wcześniej model urządzeń zmieniał wpisy katalogów w systemie plików sys. Naprawdę atrakcyjną możliwością jest prosty odczyt i zapis parametrów oraz stanów urządzenia i sterownika poprzez pliki atrybutów. Do tego konieczne są dwie rzeczy. Po pierwsze, należy zdefiniować funkcje wywoływane przez jądro, kiedy użytkownik odczytuje lub zapisuje atrybut. Po drugie, pliki atrybutów muszą zostać utworzone w systemie plików sys (zobacz ramka). Funkcje odczytu plików atrybutów zawsze mają dwa parametry. Pierwszy określa przynależny obiekt, na przykład obiekt urządzenia lub sterownika. Drugi parametr to adres obszaru pamięci, w którym powin- 54 NUMER 19 SIERPIEŃ - WRZESIEŃ
5 ny być przechowywane dane atrybutów. Ponieważ przez system plików sys nie mogą być wymieniane duże ilości danych, ten bufor ma wielkość ograniczoną do jednej strony pamięci. Ta stała granica sprawia, że jego użycie jest łatwiejsze niż w wypadku systemu plików proc. Dane, które są wymieniane między sterownikiem a obszarem użytkownika, powinny być zakodowane w ASCII. Dzięki temu za pomocą programów systemowych można w łatwy sposób uzyskać dostęp do atrybutów. Tak więc polecenie echo 1 > /sys/legacy/mydevice/attr zapisuje wartość 1 w atrybucie attr, podczas gdy polecenie cat /sys/legacy/mydevice/attr odczytuje i podaje odpowiednią wartość. Funkcje zapisu, oprócz wspomnianych dwóch parametrów, mają też trzeci, wskazujący liczbę zapisywanych bajtów. Poza tym funkcje odczytu i zapisu przekazują dane wewnątrz obszaru jądra. Za przesłanie do obszaru użytkownika odpowiada sam model urządzenia. Gdy funkcje dostępu do plików atrybutów są zdefiniowane, w systemie plików sys muszą zostać utworzone pliki. Makra DRI- VER_ATTR () i DEVICE_ATTR () definiują i inicjują obiekty, które następnie funkcje driver_create_file () i device_create_file () przekazują do modelu urządzenia. Nazwy obiektów utworzonych za pomocą makr DRIVER_ATTR () i DEVICE_ATTR () pojawiają się w pierwszym parametrze z przedrostkiem driver_attr_ lub device_attr_. Tak więc w następującym wierszu zostaje zdefiniowany obiekt driver_attr_version: static DRIVER_ATTR( version,u S_IRUGO, ShowVersion, NULL ); Drugi parametr określa prawa dostępu do pliku atrybutów. Plik nagłówkowy linux/stat.h deklaruje możliwe wartości (zobacz Tabela 1). Ponieważ ten przykład korzysta tylko z funkcji odczytu ShowVersion (), makro ustawia także tylko prawa odczytu (tutaj dla użytkownika, grupy i pozostałych). Ostatni parametr ma wartość NULL; nie wskazuje więc na funkcję zapisu, która w przeciwnym razie w tym miejscu by się pojawiała. Znaczenie parametru dotyczy odpowiednio makra DEVICE_ATTR () (zobacz Ramka Programowanie atrybutów i Listing 1). Funkcje driver_remove_file() i device_remove_file() usuwają utworzone pliki, kiedy sterownik na przykład już nie będzie korzystał z urządzenia. Pliki atrybutów także dla PCI W wypadku urządzeń PCI struktury danych struct pci_driver i struct pci_dev zawierają zawsze struct device_driver i struct device. Nic łatwiejszego więc utworzyć także dla nich pliki atrybutów. Podczas inicjacji sterownika funkcja driver_create_file () tworzy pliki atrybutów, zaś przy inicjacji urządzenia funkcja device_create_file () odpowiednie pliki urządzenia. Listing 2: Programowanie atrybutów 01 static ssize_t ReadFreqU ( struct device *dev, char *buf ) 02 { } static ssize_t WriteFreqU ( struct device *dev, const charu *buf, size_t count ) 07 { } static DEVICE_ATTR( freq,u S_IRUGO S_IWUGO, ReadFreq,U WriteFreq ); static int DeviceProbe(... ) 14 { device_create_file( &MyDevice.U dev, &dev_attr_freq ); } static int DeviceRemove(... ) 21 { device_remove_file(&mydevice.u dev, &dev_attr_freq ); } Programowanie atrybutów Makro DEVICE_ATTR () (Listing 2, wiersz 11) z użyciem pliku freq definiuje strukturę danych dev_attr_freq (przedrostek dev_attr_ zostaje dołączony do nazwy zmiennej). Zapewnia ono dostęp z prawami do odczytu i zapisu oraz tworzy funkcje dostępu. Podczas inicjacji urządzenia w funkcji DeviceProbe () funkcja device_create_file () (wiersz 16) tworzy plik atrybutu. Jądro wywołuje funkcję WriteFreq (), kiedy aplikacja zapisuje dane w pliku atrybutu freq. Dane do zapisania znajdują się już w obszarze jądra. Kiedy aplikacja odczytuje plik atrybutów freq, jądro wywołuje funkcję Read- Freq (). Żądane dane mogą być bezpośrednio zapisane w buforze buf. Funkcja zwraca liczbę odczytanych bajtów. Podczas dezinicjacji urządzenia w funkcji DeviceRemove () funkcja device_remove_file () (wiersz 23) usuwa plik atrybutu z systemu plików sys. Kopf: Symbol S_IRWXU S_IRUSR S_IWUSR S_IXUSR S_IRWXG S_IRGRP S_IWGRP S_IXGRP S_IRWXO S_IROTH S_IWOTH S_IXOTH S_IRWXUGO S_IALLUGO S_IRUGO S_IWUGO S_IXUGO Tabela 1: Prawa dostępu Znaczenie Odczyt, zapis i wykonywanie dla użytkownika Odczyt dla użytkownika Zapis dla użytkownika Wykonywanie dla użytkownika Odczyt, zapis i wykonywanie dla grupy Odczyt dla grupy Zapis dla grupy Wykonywanie dla grupy Odczyt, zapis i wykonywanie dla pozostałych Odczyt dla pozostałych Zapis dla pozostałych Wykonywanie dla pozostałych Kombinacja <I>S_IRWXU S_IRWXG S_IRWXO<I> Kombinacja <I>S_ISUID S_ISGID S_ISVTX S_IRWXUGO<I> Kombinacja <I>S_IRUSR S_IRGRP S_IROTH<I> Kombinacja <I>S_IWUSR S_IWGRP S_IWOTH<I> Kombinacja <I>S_IXUSR S_IXGRP S_IXOTH<I> NUMER 19 SIERPIEŃ - WRZESIEŃ
6 Technika jądrowa Listing 3: Nowe klasy urządzeń 01 #include <linux/fs.h> 02 #include <linux/version.h> 03 #include <linux/module.h> 04 #include <linux/init.h> 05 #include <linux/device.h> MODULE_LICENSE("GPL"); static void GameDeviceReleaseU ( struct device *dev ); 10 int GameClassHotplug( structu class_device *dev, char **envp, 11 int num_envp, char *buffer,u int buffer_size ); 12 void GameClassRelease( structu class_device *dev ); static struct device_driveru GameDriver = { 15.name = "GameDriver", 16.bus = &platform_bus_type, 17 }; 18 struct platform_device GameDevice = { 19.name = "GameDevice", 20.id = 0, 21.dev = { 22.release = GameDeviceRelease, 23 } 24 }; 25 static struct class GameClass = { 26.name = "GameClass", 27.hotplug = GameClassHotplug, 28.release = GameClassRelease, 29 }; static struct class_deviceu GameClassDevice = { 32.class = &GameClass, 33 };html2ps version 1.0 beta3 34 static struct file_operationsu Fops; 35 static DECLARE_COMPLETIONU ( DevObjectIsFree ); static void GameDeviceReleaseU ( struct device *dev ) 38 { 39 complete( &DevObjectIsFree ); 40 } int GameClassHotplug( structu class_device *dev, char **envp, 43 int num_envp, char *buffer,u int buffer_size) 44 { 45 printk("gameclasshotplug( %pu )\n", dev ); 46 return 0; 47 } 48 void GameClassRelease( structu class_device *dev ) 49 { 50 printk("gameclassrelease( %pu )\n", dev ); 51 } static int init DrvInit(void) 54 { 55 if(register_chrdev(240,u "gamedevice", &Fops) == 0) { 56 driver_register(&gamedriver); 57 platform_device_registeru ( &GameDevice ); 58 GameDevice.dev.driver =U &GameDriver; 59 device_bind_driveru ( &GameDevice.dev ); 60 class_register( &GameClass ); 61 GameClassDevice.dev =U &GameDevice.dev; 62 strlcpy( (void *)&GameClassU Device.class_id, 63 "GameClassDevice", 16 ); 64 class_device_registeru ( &GameClassDevice ); 65 return 0; 66 } 67 return -EIO; 68 } static void exit DrvExit(void) 71 { 72 class_device_unregisteru ( &GameClassDevice ); 73 class_unregister( &GameClass ); 74 device_release_driveru ( &GameDevice.dev ); 75 platform_device_unregisteru ( &GameDevice ); 76 driver_unregister(&gamedriver); 77 unregister_chrdev(240,u "gamedevice"); 78 wait_for_completionu ( &DevObjectIsFree ); 79 } module_init( DrvInit ); 82 module_exit( DrvExit ); driver_create_file( &pcidrv.driver, &driver_attr_mytext ); device_create_file( &pcidev->dev, &dev_attr_mytext ); Klasy urządzeń Procedura zgłaszania urządzenia w klasie urządzeń jest znana: kiedy sterownik zgłosi się w podsystemie na przykład podsystemie sieciowym ten realizuje rejestrację w modelu urządzeń. Jeśli zaś nie ma żadnego odpowiedniego podsystemu, programista sterownika sam musi się o to zatroszczyć. Tak jest w wypadku urządzeń należących do klas input lub pcmcia_socket. W tym celu programista jądra definiuje obiekt, inicjuje go i przekazuje modelowi urządzeń. Przekazanie następuje podczas inicjacji urządzenia, na przykład w wypadku sprzętu podłączonego do magistrali PCI w funkcji detekcji. Wówczas należy postępować w następujący sposób: Nazwy katalogów, w których później pojawiają się wpisy, kopiujemy do składowej class_id. Adres obiektu sterownika pci_drv.driver (typ struct device_driver) wpisujemy do struktury dev (typ struct device). Adres obiektu urządzenia dev->dev (typ struct device) wstawiamy do obiektu klasy urządzenia myclass, a mianowicie do składowej myclass.dev. Adres obiektu klasy input_class (zdefiniowanej wstępnie w pliku <linux/input.h>), w której katalogu zostanie utworzony podkatalog class_id, zapisujemy w obiekcie klasy urządzenia myclass, a mianowicie w składowej myclass.class. Kiedy obiekt jest tak zainicjowany, funkcja class_device_register() przekazuje go do jądra. static struct class_deviceu myclass;... strlcpy((void *)&myclass.class_id, "MyDev", 6 ); dev->dev.driver = &pci_drv.driver; myclass.dev = &dev->dev; myclass.class = &input_class; class_device_register( &myclass ); Model urządzenia tworzy następnie katalog MyDev i ustawia dowiązania do odpowiednich obiektów urządzenia i sterownika. 56 NUMER 19 SIERPIEŃ - WRZESIEŃ
7 /sys/class/input `-- MyDev -- device -> ->>../../../devices/u pci0000:00/0000:00:08.0 `-- driver -> ->>../../../bus/pci/drivers/pci_drv Także urządzenie klasy może mieć atrybuty. W stosunku do zaprezentowanej już metody programowanie różni się jedynie przedrostkiem nazwy makr i funkcji (CLASS zamiast DRIVER lub DEVICE). Ciekawsze jest definiowanie własnej klasy. W tym celu należy zaimplementować funkcje hotplug i release, a następnie przekazać je za pomocą obiektu klasy do modelu urządzenia Linuksa. Funkcja hotplug jest wywoływana, kiedy tylko sterownik zgłosi się w klasie, zaś funkcja release wtedy, gdy się z niej wyrejestruje. Na Listingu 3 przedstawiono kompletny przykład sterownika, który tworzy klasę urządzenia o nazwie GameClass, urządzenie klasy GameDevice i urządzenie wirtualne GameClassDevice. Definiowanie innych magistrali zewnętrznych Definicja własnej magistrali jest jeszcze mniej skomplikowana niż utworzenie nowej klasy. W tym celu programista definiuje obiekt magistrali, inicjuje go przy użyciu nazwy i rejestruje funkcją bus_register(): struct bus_type can = {.name = "CAN", };... static int init MyModulInitU (void) {... bus_register( &can ); Koncepcja modelu urządzenia ma jasną strukturę, lecz ponieważ należący do niej kod jądra nie jest jeszcze całkowicie dojrzały, niewielkie błędy programistów prowadzą szybko do zawieszenia systemu wówczas pozostaje tylko zresetowanie komputera. W następnym odcinku Praca się jednak opłaci, bo model urządzenia ma przyszłość. Nie tylko z powodu coraz ważniejszego zarządzania energią, lecz także dlatego, że system plików przejmie wiele dotychczasowych zadań systemu plików proc. Ten jednak nie zostanie całkowicie zastąpiony. Dlatego też w następnym odcinku Techniki jądrowej pokażemy, jak działa system plików proc i w jaki sposób programuje się dla niego własne moduły. (ofr) INFO [1] Greg Kroah-Hartmann, udev A Userspace Implementation of devfs : [2] Podręcznik Estrada Sainz: Firmware Class. Dokumentacja w źródłach jądra w pliku Documentation/firmware_class. [3] Eva-Katharina Kunst i Jürgen Quade Technika jądrowa, odcinek 4, Linux Magazine nr 17 (czerwiec 2005). [4] Libsysfs, składnik zestawu Linux Diagnostic Tool : AUTORZY Eva-Katharina Kunst, dziennikarka i Jürgen Quade, profesor w Hochschule Niederrhein, należą od czasu powstania Linuksa do fanów oprogramowania Open Source.
Linux Kernel III. Character devices
Linux Kernel III Character devices Urządzenia systemu Linux (I) Character device Block device Network device Do urządzenia piszemy jak do pliku, Dozwolone działania: open, close, read, write, Np. /dev/tty1.
pod adres portu przekazany jako drugi parametr.
Technika jądrowa KNOW HOW Jądro 2.6 programowanie jądra i sterowników TECHNIKA JĄDROWA W ostatnim odcinku Techniki jądrowej omawialiśmy znakowe sterowniki urządzeń wirtualnych. W dzisiejszym odcinku pokazujemy,
Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:
Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.
Laboratorium 4: Systemy plików procfs i sysfs (dwa zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 4: Systemy plików procfs i sysfs (dwa zajęcia) dr inż. Arkadiusz Chrobot 1 kwietnia 2019 Spis treści Wprowadzenie 1 1. System plików procfs 1 1.1. Opis API.............................................
Tablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Kernel Kompilacja jądra
Kernel Kompilacja jądra systemu Co to jest jądro systemu operacyjnego Jądro systemu operacyjnego jest rozpowszechniane na licencji GNU General Public License (GPL) określonej przez konsorcjum Free Software
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU
Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale
Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.
Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania
Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Pliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Modułowy programowalny przekaźnik czasowy firmy Aniro.
Modułowy programowalny przekaźnik czasowy firmy Aniro. Rynek sterowników programowalnych Sterowniki programowalne PLC od wielu lat są podstawowymi systemami stosowanymi w praktyce przemysłowej i stały
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Rejestr HKEY_LOCAL_MACHINE
Rejestr HKEY_LOCAL_MACHINE Poddrzewo HKEY_LOCAL_MACHINE zawiera dane konfiguracyjne lokalnego systemu. Informacje tutaj przechowywane są wykorzystywane przez aplikacje i sterowniki urządzeń, a także przez
Linux Kernel II. Hello kernel - jak napisać pierwszy moduł
Linux Kernel II Hello kernel - jak napisać pierwszy moduł Przypomnienie (I) Moduły uruchamiane są i działają w przestrzeni Kernela (Kernel space), Moduły piszemy w języku C, Moduły działają inaczej niż
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Metody dostępu do danych
Metody dostępu do danych dr inż. Grzegorz Michalski Na podstawie materiałów dra inż. Juliusza Mikody Jak działa JDO Podstawowym zadaniem JDO jest umożliwienie aplikacjom Javy transparentnego umieszczenia
Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY
Różne właściwości Funkcje tak samo jak zmienne mają swoje miejsce w pamięci, gdzie są zapisane. Można więc uzyskać ich adres. Podobnie jak adres tablicy jest zwracany przez jej nazwę, podaną bez nawiasu
Wykład PASCAL - Pliki tekstowe
Podstawy programowania Wykład PASCAL - Pliki tekstowe 1 dr Artur Bartoszewski - Podstawy prograowania, sem. 1- WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą,
Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat
Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie
Argumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.
Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o. 29.06.2015 2 Spis treści 1. Wymagania...4 2. Uprawnienia systemowe...4 3. Uprawnienie
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Podział programu na moduły
Materiały Podział programu na moduły Informatyka Szczegółowe informacje dotyczące wymagań odnośnie podziału na moduły: http://www.cs.put.poznan.pl/wcomplak/bfiles/c_w_5.pdf Podział programu na moduły pozwala
Działanie systemu operacyjnego
Działanie systemu operacyjnego Budowa systemu komputerowego Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej Pamięć
Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli
CONFidence 13/05/2006. Jarosław Sajko, PCSS Jaroslaw.sajko@man.poznan.pl
IPTables Hacking CONFidence 13/05/2006 Jarosław Sajko, PCSS Jaroslaw.sajko@man.poznan.pl 1 Zamiast planu 2 ZB PCSS Praca operacyjna w ramach ogólnopolskiej szerokopasmowej sieci PIONIER oraz zasobów Centrum
Podstawy Rejestru systemu. Poddrzewa
Podstawy Rejestru systemu Rejestr systemu Windows jest przechowywany w kilku różnych plikach na komputerze. Pliki te są nazywane hives (ule) i umieszczone są w folderach \Windows\system32\config i \Documents
1.Wstęp. 2.Generowanie systemu w EDK
1.Wstęp Celem niniejszego ćwiczenia jest zapoznanie z możliwościami debuggowania kodu na platformie MicroBlaze oraz zapoznanie ze środowiskiem wspomagającym prace programisty Xilinx Platform SDK (Eclipse).
Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy
Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy 2015-12-18 1 Języki i paradygmaty - 9 Architektura ADO.NET - zestaw abstrakcyjnych klas, które udostępniają
Programowanie obiektowe i C++ dla matematyków
Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać
Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)
Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych
Acronis Universal Restore
Acronis Universal Restore Update 4 PODRĘCZNIK UŻYTKOWNIKA Spis treści 1 Czym jest narzędzie Acronis Universal Restore...3 2 Instalowanie narzędzia Acronis Universal Restore...3 3 Tworzenie nośnika startowego...3
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej I NIC sieci Pamięć operacyjna Przerwania Przerwania
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 14: Programowanie współbieżne w C Definicja programowania współbieżnego Programowanie współbieżne jest tworzeniem programów, których wykonanie powoduje uruchomienie
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Zad. 3: Układ równań liniowych
1 Cel ćwiczenia Zad. 3: Układ równań liniowych Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Definiowanie właściwego interfejsu klasy. Zwrócenie uwagi na dobór odpowiednich
Wykład 3: Implementacja programów wbudowanych
Systemy wbudowane Wykład 3: Implementacja programów wbudowanych Problemy implementacji oprogramowania wbudowanego Szeregowanie zadań System operacyjny Obsługa przerwań 10/16/2010 S.Deniziak:Systemy wbudowane
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Szablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
Przejrzystość, intuicyjny charakter i łatwość oprogramowania sterowników FATEK.
Darmowe oprogramowanie narzędziowe sterowników PLC FATEK. Przejrzystość, intuicyjny charakter i łatwość oprogramowania sterowników FATEK. WinProllader jest prostym interfejsem użytkownika służącym do programowania
Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus
Laboratorium 2: Dynamiczny przydział pamięci w przestrzeni jądra Linuksa (jedne zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 2: Dynamiczny przydział pamięci w przestrzeni jądra Linuksa (jedne zajęcia) dr inż. Arkadiusz Chrobot 9 marca 2017 Spis treści Wprowadzenie 1 1. Alokatory pamięci 1 2. Alokator strefowy 2
C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU
Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale
Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:
Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji
IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com
IdyllaOS www.idyllaos.org Prosty, alternatywny system operacyjny Autor: Grzegorz Gliński Kontakt: milyges@gmail.com Co to jest IdyllaOS? IdyllaOS jest to mały, prosty, uniksopodobny, wielozadaniowy oraz
Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.
Kod szkolenia: Tytuł szkolenia: PS/LINUX Programowanie systemowe w Linux Dni: 5 Opis: Adresaci szkolenia Szkolenie adresowane jest do programistów tworzących aplikacje w systemie Linux, którzy chcą poznać
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1
Zdalne wywołanie procedur Krzysztof Banaś Systemy rozproszone 1 RPC Komunikacja za pomocą gniazd jest wydajna, gdyż korzystamy z funkcji systemowych niewygodna, gdyż musimy wyrażać ją za pomocą jawnego
WIZUALIZACJA I STEROWANIE ROBOTEM
Maciej Wochal, Opiekun koła: Dr inż. Dawid Cekus Politechnika Częstochowska, Wydział Inżynierii Mechanicznej i Informatyki, Instytut Mechaniki i Podstaw Konstrukcji Maszyn, Koło Naukowe Komputerowego Projektowania
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)
O autorze (9) Podziękowania (10) Wstęp (11) Pobieranie przykładów (12) Czego będę potrzebował? (12) Korzystanie z tej książki (12) Rozdział 1. Programowanie Arduino (15) Czym jest Arduino (15) Instalacja
RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )
III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc
Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017
JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Zasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33
Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
Wskaźniki. Informatyka
Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)
Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany
Oprogramowanie modułu przycisk UNIV
Oprogramowanie modułu przycisk UNIV 1.0.1.31 1. Cechy: 8-mio kanałowy moduł przycisku. Moduł wysyła wiadomość, gdy przycisk jest wciśnięty i kolejną, kiedy przycisk jest zwolniony. Czas reakcji modułu
Futex (Fast Userspace Mutex) Łukasz Białek
Futex (Fast Userspace Mutex) Łukasz Białek Futex informacje podstawowe Stworzony w 2002 roku przez Hubertusa Franke, Matthew Kirkwooda, Ingo Molnára i Rustiego Russella. Jest mechanizmem w Linuxie, który
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:
Pliki W celu wykonania jakiejkolwiek operacji na istniejącym pliku, plik ten musi zostać otwarty, natomiast jeśli plik jeszcze nie istnieje, to musi zostać utworzony. Plik może zostać otwarty w trybie:
Architektura komputerów. Układy wejścia-wyjścia komputera
Architektura komputerów Układy wejścia-wyjścia komputera Wspópraca komputera z urządzeniami zewnętrznymi Integracja urządzeń w systemach: sprzętowa - interfejs programowa - protokół sterujący Interfejs
Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011
Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt
Budowa systemów komputerowych
Budowa systemów komputerowych Krzysztof Patan Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski k.patan@issi.uz.zgora.pl Współczesny system komputerowy System komputerowy składa
Wykład 4. Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy. Bazy danych 2
Wykład 4 Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy 2017-02-24 Bazy danych 2 W4 1 Architektura ADO.NET (Active Data Objects) Zestaw abstrakcyjnych
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej sieci Pamięć operacyjna Przerwania Przerwania Przerwanie
Zad. 5: Układ równań liniowych liczb zespolonych
Zad. 5: Układ równań liniowych liczb zespolonych 1 Cel ćwiczenia Wykształcenie zdolności abstrahowania operacji arytmetycznych od konkretnych typów. Unaocznienie problemów związanych z programowaniem uogólnionym
Konstruktor destruktor Programowanie obiektowe
Konstruktor destruktor Programowanie obiektowe Klasa w osobnym pliku Pracując w scalonym środowisku programistycznym mamy okno z nazwami wszystkich swoich klas ustawionych alfabetycznie Tworząc klasę w
Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści
Arduino dla początkujących. Kolejny krok Autor: Simon Monk Spis treści O autorze Podziękowania Wstęp o Pobieranie przykładów o Czego będę potrzebował? o Korzystanie z tej książki Rozdział 1. Programowanie
Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Laboratorium 6: Tasklety i kolejki prac (jedne zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 6: Tasklety i kolejki prac (jedne zajęcia) dr inż. Arkadiusz Chrobot 10 kwietnia 2017 Spis treści Wprowadzenie 1 1. Tasklety 1 1.1. Opis API............................................. 1
Laboratorium 7: Liczniki czasu (jedne zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 7: Liczniki czasu (jedne zajęcia) dr inż. Arkadiusz Chrobot 22 kwietnia 2017 Spis treści Wprowadzenie 1 1. Liczniki czasu niskiej rozdzielczości 1 1.1. Opis API.............................................
Komputery przemysłowe i systemy wbudowane
Komputery przemysłowe i systemy wbudowane Systemy operacyjne w systemach wbudowanych 2 KSEM WETI PG October 7, 2015 System operacyjny System operacyjny (OS) - opcjonalny w systemach wbudowanych. zbiór
SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)
(opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie
Zaawansowane programowanie w języku C++ Klasy w C++
Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń
Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS
System operacyjny UNIX system plików System plików systemu UNIX (s5fs) System plików ma strukturę drzewa. Na samym szczycie znajduje się korzeń (root), symbolicznie przedstawiany jako /. Z punktu widzenia
Programowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Prezentacja systemu RTLinux
Prezentacja systemu RTLinux Podstawowe założenia RTLinux jest system o twardych ograniczeniach czasowych (hard real-time). Inspiracją dla twórców RTLinux a była architektura systemu MERT. W zamierzeniach
Komunikacja i wymiana danych
Budowa i oprogramowanie komputerowych systemów sterowania Wykład 10 Komunikacja i wymiana danych Metody wymiany danych Lokalne Pliki txt, csv, xls, xml Biblioteki LIB / DLL DDE, FastDDE OLE, COM, ActiveX
Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane
Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt
Programowanie obiektowe Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt Operator new, new[] Operator new oraz new[] służy do rezerwacji obszarów z zapasie pamięci
Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak
Kompilator języka C na procesor 8051 RC51 implementacja
Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub
Wprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków
Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................