Kamis, 17 November 2011

Copy string ke member struct

Hari ini mau tulis mengenai cara kopi string ke member struct yg berbentuk array of char. Misalkan ada struct yang bentuknya begini :

typedef struct {
      char member1[10];
      char member2 [15];
}st;

lalu ada string (array of char) seperti ini :

char buff[70] = "Hari ini kita belajar programing bahasa C dengan bahasan struct";

lalu untuk mengkopinya, kita menggunakan memcpy, berikut cuplikan codenya :

st myST;
memcpy(myST.member1, &buff[0], 9);
memcpy(myST.member2, &buff[10], 14);
printf("member1  %s", myST.member1);
printf("member2  %s", myST.member2);

outputnya :

member1 Hari ini k
member2 ita belajar pro

Tapi jika codenya kita salah tulis size num, misalnya :

memcpy(myST.member1, &buff[0], 10);
printf("member1  %s", myST.member1);

maka yg nantinya ke print

member1 Hari ini kita belajar prog

bisa dilihat walaupun yg ingin kita kopi 10 tapi yg ke kopi malah 25, itu karena setiap member dalam struct itu saling berhubungan. Jadi bisa dibilang ukurannya adalah jumlah size dari 2 member dalam struct tersebut.

*sekedar info panjang buff diatas itu 63

Jumat, 22 Juli 2011

Kirim data melalui RS232 dengan C

 Assalamualaikum
Hari ini saya mau nulis tentang gmn caranya ngirim data melalui RS232 menggunakan bahasa C. Caranya sangat mudah sekaliiii....download dlu fungsinya di sini

Nah ini contoh kode yg saya buat :

#include <stdio.h>
#include"RS-232/rs232.h"

void pack(char packbuff[]){
unsigned char buff[255];
int i;

buff[0] = 0x10; //stx 2B
buff[1] = 0x02;
buff[2] = 0x01; //cmd 2B
buff[3] = 0x00;
buff[4] = 0x00; //SN 1B
buff[5] = 0x00; //RFU 2B
buff[6] = 0x00;
buff[7] = 0x00; //bno 2B
buff[8] = 0x00;
buff[9] = 0x00; //dlen 2B
buff[10] = 0x06;
buff[11] = 0x03; //data
buff[12] = 0x05;
buff[13] = 0x05;
buff[14] = 0x41;
buff[15] = 0x42;
buff[16] = 0x43;
buff[17] = 0x44; //LRC
buff[18] = 0x10; //ETX 2B
buff[19] = 0x03;

for(i = 0; i < 20; i++){
packbuff[i] = buff[i];
}

}

int main(){
int ret, size;
unsigned char sbuff[20];
unsigned char rbuff[255];

/* OPEN COM PORT */
ret = OpenComport(16, 38400);
if (ret != 0){
printf("FAIL OPEN COM PORT\n");
goto lbl_END;
}

pack(sbuff);

/* SEND DATA */
ret = SendBuf(16, sbuff, 20);
if (ret < 0){
printf("FAIL SEND DATA\n");
goto lbl_END;
}


ret = PollComport(16, rbuff, size);

printf("size %d\n", strlen(rbuff));

/* Close COM PORT */
CloseComport(16);

lbl_END:
return 0;
}

Kalau diliat kodenya sangat mudah bukan, waktu itu saya coba gunakan untuk ngirim data dari PC ke PC. Kalau kurang lengkap bisa liat di sini, Oh iya saya juga sudah tulis di web linux jakarta
Sekian dari saya
Wassalamuaalikum