Sari la conținut
ELFORUM - Forumul electronistilor

Cum lucrez cu functii C in C++Bulider??????????


Mar

Postări Recomandate

Da, vad ca nu m-am exprimat prea clar. Ma refeream la functiile WinAPI pentru accesul la portul serial / paralel. Cred ca se poate accesa orice port I/O prin WinAPI, deoarece exista componenta pt. C++Builder care rescrie functiile outport / inport din vechiul dos.h ca sa mearga sub Windows, dar nu m-am documentat prea mult pentru asta. Oricum, si driverele trebuie scrise de cineva, asa ca o modalitate trebuie sa existe.

Link spre comentariu
  • Răspunsuri 21
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • bogdanm

    8

  • Mar

    7

  • Cristiano

    5

Si n-a spus nimeni ca n-ar exista. Dar daca vrei sa te apuci de scris drivere ca sa accesezi porturile ... eu zic pas :) Componenta aia sigur foloseste undeva un driver pe Ring0, altfel nu are cum sa functioneze.

Link spre comentariu

Am intrat la adresa ta Cristiano dar nu pot sa citec\sc din exemple .Cind selectez unul imi apare "bine ai venit la Pico-Play" si altceva nimic.

Acolo e o colectie de link-uri catre componente pentru C++Builder / Delphi. Daca te-a interesat vreuna de acolo si nu merge, cauta alternative.Edit: pt. bogdanm: asa e, dar cred ca am deviat destul, aici e forum de electronica :d .
Link spre comentariu
  • 2 săptămâni mai târziu...
  • 2 săptămâni mai târziu...

Ca o obs. generala :In Windows este descurajata folosirea functiilor de acces direct la port,si daca in Win9x, Me acest lucru e inca posibil pe platforma NT ( 2000, Xp ) incercarea de a scrie direct la porturi va duce la aparitia unei exceptii de tip "privileged instruction".Majoritatea mediilor de programare au eliminat din bibliotecile lor standard, odata cu trecerea la Windows, functiile specifice pentru a nu exista anomalia urmatoare : un program care foloseste functii standard printre care cele de I/O la nivel de port sa functioneze in Windows 9x , in schimb in windows NT sa determine o exceptie.In Windows9x functiile se pot rescrie astfel ( pe 32 bit ):C/C++char inport( short PortAddr ){ char retval; asm { mov dx,PortAddr in al,dx mov retval , al } return retval;}void OutPort(short PortAddr, char Databyte){ asm { mov al,Databyte mov dx,PortAddr out dx,al }}Daca primul impuls este acela de a cauta sa treceti peste aceasta limitare, trebuie sa stiti ca ea este totusi de bun simt, atat timp cat exista mai multe device-uri si mai multe programe ce pot rula simultan, deci sistemul de operare ( multitasking ) trebuie sa aiba controlul asupra lor asa cum are controlul asupra memoriei, discului, etc. In caz contrar riscati sa aveti surprize extrem de neplacute....De aceea ccesul la hardware trebuie facut prin drivere specializate, si desi exista drivere generice care permit pana la urma accesul la toate porturile, acest lucru trebuie evitat. De ex pentru accesarea portului serial in windows, exista structura DCB si functii aferente care functioneaza perfect.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări