Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

C++ Interfacing. Bloodshed Dev C++ Compiler C GNU(GPL) dengan library MingW (porting dari GCC) Dapat dikombinasikan dengan Cygwin maupun kompiler lain.

Presentasi serupa


Presentasi berjudul: "C++ Interfacing. Bloodshed Dev C++ Compiler C GNU(GPL) dengan library MingW (porting dari GCC) Dapat dikombinasikan dengan Cygwin maupun kompiler lain."— Transcript presentasi:

1 C++ Interfacing

2 Bloodshed Dev C++ Compiler C GNU(GPL) dengan library MingW (porting dari GCC) Dapat dikombinasikan dengan Cygwin maupun kompiler lain yang dasarnya dari GCC Fitur : - Support GCC-based compilers - Integrated debugging (using GDB) - Project Manager - Customizable syntax highlighting editor - Class Browser - Code Completion - Function listing - Profiling support - Quickly create Windows, console, static libraries and DLLs - Support of templates for creating your own project types - Makefile creation - Edit and compile Resource files - Tool Manager - Print support - Find and replace facilities - CVS support

3

4 Struktur program C++ Program yang baik :  Kepala program: mendeskripsikan sekilas info tentang programnya  Deklarasi library, header file, konstanta, prototipe fungsi/prosedur dengan jelas  Pisahkan fungsi/prosedur tambahan sebagai file terpisah -> program utama lebih pendek  Berikan komentar yang jelas dan deskriptif untuk setiap bagian program

5 /* titel : tes c++ untuk interface author : xxx tgl :... deskripsi : bla...bla..bla... */ //lib #include //global var - const #define Port_data 0x378 #define Port_ctrl Port_data++ #define Port_status Port_ctrl++ //proto func/sub /* ----Prototypes of Inp and Outp--- */ typedef short _stdcall (*inpfuncPtr)(short portaddr); typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); //main program int main() { //var library HINSTANCE hLib; oupfuncPtr Out32; inpfuncPtr Inp32; //Load the library hLib = LoadLibrary("inpout32.dll"); //get the address of the function Out32 = (oupfuncPtr) GetProcAddress(hLib, "Out32"); Inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); //use the function Out32(Port_data, 1); _sleep(1000); Out32(Port_data, 0); getch(); return 0; }

6 Mengakses Port Metode :  Direct : Mengakses port secara langsung dengan mengakses alamat registernya (sederhana) Terbatas pada WIN98, WIN NT melarang akses langsung sebuah port Linux hanya membutuhkan privilege access dari admin  Indirect Mengakses port sebagai sebuah file (kompleks) Windows => membutuhkan bantuan DLL eksternal Linux=> secara default semua hardware pada Linux diakses sebagai sebuah file

7 Akses Port C++ Dengan Inpout32.dll Inpout32.dll merupakan library yang diperuntukkan untuk akses port secara bebas Untuk semua versi Windows Bisa dipakai oleh semua bahasa pemrograman yang mengenal akses librari eksternal Prototipe fungsi : void _stdcall Out32(short PortAddress, short data); short _stdcall Inp32(short PortAddress);

8 Mengakses Inpout32.dll Deklarasikan pointer fungsinya : /* ----Prototypes of Inp and Outp--- */ typedef short _stdcall (*inpfuncPtr)(short portaddr); typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); Deklarasi variabel pointer fungsinya : HINSTANCE hLib; oupfuncPtr Out32; inpfuncPtr Inp32; Load library inpout32.dll hLib = LoadLibrary("inpout32.dll"); Ambil alamat fungsinya Out32 = (oupfuncPtr) GetProcAddress(hLib, "Out32"); Inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); Free DLL dari memori FreeLibrary(hLib);

9 Mengakses Port Paralel Mendefinisikan alamat port yang dipakai #define Port_data 0x378// port data #define Port_status0x379// port status #define Port_ctrl 0x37a// port control Mengeluarkan data ke Port Data Out32(Port_data, 1); //mengeluarkan data 1 ke port data Out32(Port_data, 0x3a); //mengeluarkan data 3AH ke port data Membaca Port Status sebagai input int ReadPortStatus(); //read port status int ReadPortStatus() { int dt1; dt1 = Inp32(Port_status); //ambil data dr port status dt1 ^= 128; //invert bit ke-7(s7 inverted) dt1 >>= 3; //shift 3bit kekiri, port status hardwired s3-s7 return dt1; }

10 Mengeluarkan data ke Port Control void WritePortControl(int adata); void WritePortControl(int adata) { Out32(Port_ctrl, adata ^ 0x0b); //bit 0,1,3 inverted } Membaca Port Data sebagai input  Hanya pada mode ECP atau EPP  Langkah : Set port data dengan 0xFF Set bit ke-5 port control menjadi 1 untuk mengaktifkan port data sebagai input Set bit ke-5 port control menjadi 0 untuk menghentikan pembacaan port data

11 void StartReadPortData(); void StopReadPortData(); int ReadPortData(); //start baca dari port data void StartReadPortData() { Out32(Port_data, 0xff); //set port data = 0xff Out32(Port_ctrl, 0x20); //set port ctrl.5 = 1 } //stop baca dari port data void StopReadPortData() { Out32(Port_ctrl, 0); //set port ctrl.5 = 0 } //baca dari port data int ReadPortData() { return Inp32(Port_data); //read port data }

12 Inpout32.dll Dengan Delphi Inpout32.dll dapat dipakai pada pemrograman lain, contohnya Delphi Kelebihan dibanding C++ :  Inisialisasi DLL lebih mudah  Bahasa mudah dimengerti daripada C  GUI based -> lebih mudah menambahkan kontrol apapun -> lebih menarik  Penggunaan memori seefisien C

13 Mengakses Port Paralel Inisialisasi fungsi : procedure Out32(wAddr:word;bOut:byte); stdcall; external 'inpout32.dll' function Inp32(wAddr:word):integer; stdcall; external 'inpout32.dll' Mendefinisikan alamat port yang dipakai Const Port_data = $378;//port data Port_status = Port_data + 1;// port status Port_control = port_status + 1;// port control Mengeluarkan data ke Port Data Out32(Port_data, 1); //mengeluarkan data 1 ke port data Out32(Port_data, $3a); //mengeluarkan data 3AH ke port data Membaca Port Status sebagai input Function ReadPortStatus: integer; Var integer : dt1; begin dt1 = Inp32(Port_status); //ambil data dr port status dt1 := dt1 xor 128; //invert bit ke-7(s7 inverted) dt1 := dt1 shr 3; //shift 3bit ke kanan, port status hardwired s3-s7 result dt1; end;

14 Mengeluarkan data ke Port Control Procedure WritePortControl(adata: integer) begin Out32(Port_ctrl, adata xor $0b); //bit 0,1,3 inverted end; Membaca Port Data sebagai input //start baca dari port data Procedure StartReadPortData begin Out32(Port_data, $ff); //set port data = 0xff Out32(Port_ctrl, $20); //set port ctrl.5 = 1 end; //stop baca dari port data Procedure StopReadPortData begin Out32(Port_ctrl, 0); //set port ctrl.5 = 0 end; //baca dari port data Function ReadPortData: integer begin result Inp32(Port_data); //read port data end;

15


Download ppt "C++ Interfacing. Bloodshed Dev C++ Compiler C GNU(GPL) dengan library MingW (porting dari GCC) Dapat dikombinasikan dengan Cygwin maupun kompiler lain."

Presentasi serupa


Iklan oleh Google