Outb 2 C -funksjon

Outb 2 C -funksjon
“CPU har flere tilkoblinger til ekstern maskinvare, inkludert LCD -er og harddisker. CPU -ene brukes til å overføre data inn og ut av periferiutstyr. Denne totale transaksjonsdataoverføringsgraden kan variere fra biter til terabyte. Når data sendes mellom en CPU og en perifert, gir CPU mange porter, ofte kjent som inngang og utgang, eller IO. Disse portene brukes av CPU for å administrere forskjellige smarte enheter. Mens du jobber på ethvert programmeringsspråk, kan du ha brukt mange funksjoner og variabler som bruker noen portnummer eller informasjon angående porter. Akkurat slik kom Linux Posix C -biblioteket med slike funksjoner også. Noen av C-funksjonene-funksjonen tilhører inngangs- og utgangsfamilien på lavt nivå for en POSIX for å utføre inngangs- og utgangsoperasjoner på lavt nivå. Outb () 2 c -funksjonen til posix er en av dem.

Outb ser ut til å være en funksjonsinnkapsling for bare en monteringskommando over den samme betegnelsen som brukes til å kommunisere med port-kartlagte periferiutstyr, for eksempel skrivemaskinen på IBM PC-kompatible systemer, som bruker I/O-adresseområdet 0x60-0x6F. Innenfor denne artikkelen vil vi diskutere bruken av Outb () C -funksjonen mens vi bruker Ubuntu 20.04 Linux operativsystem. For å forstå arbeidet med Outb () -funksjonen, må du se på den post-kartlagte I/O først.”

Hva er port-kartlagt I/O?

Memory-Mapped og Port-Mapped I/O er de to vanlige måtene som datamaskinbrikker lenker til eksterne enheter. Likevel ser alle tilnærminger ut til å være likeverdige når det gjelder periferien. Port kartlagt I/O er tilgjengelig via et spesifikt sett med CPU -kommandoer og et distinkt, spesialisert adresseom. Kommandoene inn og ut kan sees på Intel Computer Processors.

For å gi I/O -enheter en annen adresseplass fra vanlig lagring, ble enten en ekstra "I/O" -pinne lagt til tilgangspunktet til CPU, eller en hel buss ble satt av til I/O. Det er en CPU-til-perifert kommunikasjonsteknikk som brukes når det kreves unike kommandoer fordi prosessoren må kommunisere med RAM og periferiutstyr. Dette blir ofte referert til som isolert I/O siden adressen for I/O er atskilt fra den for primærlagring. Den alternative og mest populære måten for tiden er minnekartlagt I/O, der det ikke kreves ekstra kommandoer siden alt deler samme adresseplass. Kartlagt til minnet I/O er tilgjengelig på nesten samme måte som programminne og/eller brukerminne siden det trekkes inn i samme adresseområde.

Portinngang og utgangsoperasjoner på lavt nivå håndteres av denne gruppen av POSIX-metoder. Prosedyrene for B-Suffix er bytebredde, W-Suffix-metodene er ordbreddeprosedyrer, og _P-SUFFIX-metodene forsinker til I/O er ferdig. Out* -operasjonene utfører portutgang, mens IN* -prosessene gjør portinngang. Selv om de fremdeles kan brukes i brukermodus, er de generelt designet for indre kjernebruk.

#inkludere
void outb (usignert røyeverdi, usignert kort port);

Vi må bruke O, O2 eller en tilsvarende kompilator. Fordi metodene er spesifisert som inline makroer, kan problematiske referanser for tilkoblingstid resultere hvis optimalisering ikke er aktivert. For å instruere kjernen om å la brukermodusprogrammet bruke de berørte I/O-portene, kan du bruke ioperm (2) eller, valgfritt, IOPL (2) -kommandoene. Hvis du ikke utfører dette, vil programmet få en segmenteringsfeil. Maskinvarespesifikke funksjoner som Outb () og ledsagere i motsetning til hvordan de fleste DOS-systemer fungerer, er verdiparameteren først gitt, og portparameteren følger.

Eksempel

La oss se på bruken av Outb () -funksjonen i C -programmet. Dette programmet vil være en liten demonstrasjon av hvordan vi kan bruke det i hvilken som helst C -programkode uten å se på utdataene, i.e., Det meste av tiden vil det ikke sende ut slik vi vil. Så vi må lage en C -fil i vårt Linux -operativsystem først. Åpne skallterminalen via bruk av “Ctrl+Alt+T”.

Etter det, bruk Linuxs berøringsinstruksjon sammen med navnet på en fil “Outb.C ”som skal opprettes med“.C ”forlengelse på slutten. Denne filen finner du i den gjeldende arbeidskatalogen til Linux -systemet ditt, i.e., "hjem". Åpne filutforskeren og dobbeltkaps på filen for å åpne den.

Den tomme filen vil bli åpnet på skjermen din. Skriv ut den viste below C-koden til outb () -funksjonen i den og trykk på lagre-knappen for å lagre den. Vi har startet denne C -koden med bruk av noen hovedoverskrifter av C. For det første har vi lagt til “Config.h ”header for å konfigurere C -koden. “SYS/IO.H ”er den viktigste overskriften som kreves for bruk og utførelse av Outb () -funksjonen i C -programmet. Så vi har lagt det til også. Etter det, SYS/IOCTL.H og Linux/PARPORT.H Header er blitt brukt til bruk av portrelatert informasjon. Standard STDIO.H og stdlib.H -overskrifter brukes til å benytte seg av standardinngang og output i programmet.

Initialiseringen av ADDR -variabelen har lansert Main () -funksjonen. Ioperm () -funksjonen brukes til å stille inn porttillatelse for porttilgang og gi resultatet til det variable resultatet. Outb () -funksjonen er her for å utføre portutgang. Du kan kjøre dette programmet på systemet ditt med GCC -kompilatoren.

Konklusjon

Når det gjelder fordelene og ulempene, kan utveksling av informasjon og adressebusser gjøre minnetilgangen trege når perifere enheter fungerer saktere enn RAM. I/O-fleksibiliteten som tilbys av minnekartiserte plattformer, reduserer derimot mengden intern logikk som er nødvendig av prosessoren, noe. Parallelt med RISC -systemer er begrunnelsen å redusere intrikat for å oppnå et mer fokusert og pålitelig system, noe som er nyttig for innebygde enheter, for eksempel. Denne guiden har et av de grunnleggende eksemplene for å demonstrere ideen om outb -funksjon på C -språk.