I want to send control codes to a printer they look like this :
unsigned char cntrl_codes[6] = { 0x0d, 0x14, 0x1b, 0x4c, 0x0d, 0x0d};
//this function takes two arguments // 1)the array // 2)time delay between successive codes void print(unsigned char* c,unsigned char del) { int x,y; y=strlen(c);//y++; for(x=0;x<y;x++) { putchar(c[x]); delay(del); } }
Does the strlen call give the result you want? There is no trailing zero in the initializer of the array. You have to pass the size of the array as an extra argument to the function. Besides that, I can't see why this function is ungraceful. You can declare it like this:
void print(unsigned char c[],unsigned char del)
1) strlen does not give correct result 2) trailing zero ... to make it NULL terminated ...why? 3) i want a generalized func that can take arrays of different lengths.... 4) so should I use 'strlen' in my main func to find size of array and then pass it as argument ? how would that change it ? Thanks Mandar Limaye
It is not clear what the problem is. You could define your control codes as a null terminated string if you prefer:
unsigned char cntrl_codes = "\0x0d\0x14\0x1b\0x4c\0x0d\0x0d";
strlen uses the trailing zero to find the length of the string. It could be implemented like this:
int strlen(const char* str) { int len = 0; while ( *str++ ) len++; return len; }
Try this:
void TxSerial(unsigned char *ptr) { while(*ptr!=0x0) { SBUF=*ptr; //Send one character while(!TI) //Wait for completion {} TI=0; //Clear Tx flag ptr++; } }
while(*ptr!=0x0)
Thanks All I am using a null-term array and it works fine.