Funkcja OUTB 2 C

Funkcja OUTB 2 C
„CPU ma kilka połączeń z zewnętrznym sprzętem, w tym LCD i dyski twarde. Procesory są wykorzystywane do przesyłania danych do i z peryferyjnych. Ta całkowita szybkość przesyłania danych transakcji może wahać się od bitów do terabajtów. Gdy dane są wysyłane między procesorem a peryferyjnym, procesor zapewnia liczne porty, często znane jako wejście i wyjście lub IO. Porty te są używane przez procesor do zarządzania różnymi inteligentnymi urządzeniami. Pracując w dowolnym języku programowania, możesz użyć wielu funkcji i zmiennych z wykorzystaniem niektórych numerów portów lub informacji dotyczących portów. W ten sposób biblioteka Linux POSIX C wymyśliła również takie funkcje. Niektóre funkcje C Funkcje należą do rodziny wejściowych i wyjściowych niskiego poziomu POSIX do wykonywania operacji wejściowych i wyjściowych niskiego poziomu. Funkcja Posix OUSB () 2 C jest jednym z nich.

Wydaje się, że OUTB jest enkapsulacją funkcji tylko dla polecenia montażowego tego samego oznaczenia, które jest używane do komunikacji z peryferyjami z portu, takimi jak maszyna do pisania w systemach kompatybilnych z PC IBM, które korzystają z zakresu adresu we/wy 0x60-0x6f. W tym artykule będziemy omawiać użycie funkcji OSB () C podczas korzystania z Ubuntu 20.04 system operacyjny Linux. Aby zrozumieć działanie funkcji OUSB (), najpierw musisz przyjrzeć się post-mapowanemu we/wy."

Co to jest mapowane na porcie we/wy?

Mapione na pamięć we/wy to dwa powszechne sposoby łączenia układów komputerowych do urządzeń zewnętrznych. Niemniej jednak wszystkie podejścia wydają się równoważne, jeśli chodzi o peryferie. Mapowane porty we/wy jest dostępne za pomocą określonego zestawu poleceń procesora i wyraźnej, wyspecjalizowanej przestrzeni adresowej. Polecenia Intel można zobaczyć na procesorach komputerowych Intel.

Aby nadać urządzeniom we/wy inną przestrzeń adresową od zwykłej pamięci, do punktu dostępu do punktu dostępu do procesu dodano dodatkowy styk „we/wy”, albo cała magistra. Jest to technika komunikacji CPU-Peripheral, która jest stosowana, gdy wymagane są unikalne polecenia, ponieważ procesor musi komunikować się z pamięcią RAM i peryferyjnymi. Jest to często określane jako izolowane we/wy, ponieważ adres we/wy jest odrębny od przechowywania pierwotnego. Alternatywnym i najpopularniejszym sposobem są obecnie mapowane na pamięć we/wy, w których nie wymaga żadnych dodatkowych poleceń, ponieważ wszystko ma tę samą przestrzeń adresową. Mapowane na pamięć we/wy jest dostępne niemal w taki sam sposób, jak pamięć programu i/lub pamięć użytkownika, ponieważ jest ona wciągnięta w tę samą przestrzeń adresową.

Operacje wejściowe i wyjściowe portu niskiego poziomu są obsługiwane przez tę grupę metod POSIX. Metody B-Suffix to procedury szerokości bajtu, metody W-Suffix to procedury szerokości słowa, a metody _p-suffix opóźniają się do momentu zakończenia we/wy. Operacje OUT* wykonują wyjście portów, a procesy w* wprowadza porty wprowadzania portów. Chociaż mogą być nadal używane w trybie użytkownika, są ogólnie przeznaczone do użytku wewnętrznego.

#włączać
void oSB (niepodpisana wartość char, niepodpisany krótki port);

Musimy użyć kompilatora O, O2 lub równoważnego. Ponieważ metody są określone jako makra wbudowane, czasowe odniesienia do czasu połączenia mogą wynikać z optymalizacji. Aby poinstruować jądro, aby pozwolił programowi w trybie użytkownika korzystać z zainteresowanych portów we/wy, możesz użyć poleceń IOperM (2) lub, opcjonalnie, iopl (2). Jeśli tego nie wykonasz, program otrzyma usterkę segmentacji. Funkcje specyficzne dla sprzętu, takie jak OUTB () i towarzysze w przeciwieństwie do tego, jak większość systemów DOS, parametr wartości jest zapewniany jako pierwszy, a parametr portu następuje.

Przykład

Rzućmy okiem na użycie funkcji OUSB () w programie C. Ten program będzie niewielką demonstracją, w jaki sposób możemy go używać w dowolnym kodzie programu C bez patrzenia na jego wyjście, i.mi., Przez większość czasu nie wyjdzie tak, jak chcemy. Musimy więc najpierw utworzyć plik C w naszym systemie operacyjnym Linux. Otwórz terminal powłoki za pomocą „Ctrl+Alt+T”.

Następnie skorzystaj z instrukcji dotykowej Linuksa wraz z nazwą pliku „OUTB.c ”do stworzenia za pomocą„.C ”rozszerzenie na końcu. Ten plik można znaleźć w bieżącym katalogu roboczym systemu Linux, i.mi., "dom". Otwórz eksplorator pliku i dwukrotnie dotknij pliku, aby go otworzyć.

Pusty plik zostanie otwarty na ekranie. Zapisz w nim kod Phise-Beelow C funkcji OUTB () i naciśnij przycisk Zapisz, aby zapisać. Rozpoczęliśmy ten kod C przy użyciu niektórych głównych nagłówków C. Po pierwsze, dodaliśmy „konfigurację.H ”nagłówek do skonfigurowania kodu C. „SYS/IO.H ”jest głównym nagłówkiem wymaganym do użycia i wykonywania funkcji OUSB () w programie C. Więc dodaliśmy to również. Następnie SYS/IOCTL.H i Linux/Parport.Nagłówek H został wykorzystany do korzystania z informacji związanych z portem. Standardowe stdio.H i stdlib.H nagłówki są używane do korzystania ze standardowych wejściowych i wyjściowych w programie.

Inicjalizacja zmiennej ADDR uruchomiła funkcję Main (). Funkcja IOperM () służy do ustawienia bitów uprawnień do portu i przekazywania wyniku do wyniku zmiennego. Funkcja otub () ma wykonywać wyjście portów. Możesz uruchomić ten program w swoim systemie z kompilatorem GCC.

Wniosek

Jeśli chodzi o korzyści i wady, wymiana informacji i autobusów adresowych może sprawić, że dostęp do pamięci jest powolny, ponieważ urządzenia peryferyjne działają wolniej niż RAM. Z drugiej strony elastyczność we/wy oferowana przez platformy mapowane na pamięć zmniejsza ilość wewnętrznej logiki potrzebnej przez procesor, umożliwiając wdrożenie szybszych, tańszych i wydajnych procesorów. Równolegle do systemów RISC uzasadnieniem jest zmniejszenie zawiłości w celu uzyskania bardziej ukierunkowanego i niezawodnego systemu, który jest na przykład przydatny dla urządzeń osadzonych. Ten przewodnik zawiera jeden z podstawowych przykładów wykazania idei funkcji OUTB w języku C.