??? 05/03/10 11:44 Read: times |
#175612 - Passing a pointer to a function |
Dear Seniors,
I have created a Keil project file that has a number of files (.c and .h). I am using a file called eeprom.c. This file writes and reads data from at24c256 using i2c.c file. Now my uC.c that is the main file calls functions from the eeprom.c and passes values to it. Now the problem is that when i pass the pointer to the first character of an array to the function that is there in eeprom.c, i get an an error saying 'Argument' : conversion : pointer to non-pointer (marked with <<). /**************************EEPROM.C**************************************/ #include<reg51.h> #include<generic.h> #include<serial.h> #include<main.h> #include<I2C.h> #include<eeprom.h> unsigned char i = 0,j = 0,k = 0; unsigned char add_L_1 = 0,add_L_2 = 0,add_H_1 = 0,add_H_2 = 0; bit write_now =0,s_add_rd_flag = 0; unsigned char read_add_L = 0,read_add_H = 0,write_add_L = 0,write_add_H = 0; /*=============================================================================*/ unsigned char single_address_read(unsigned int single_read_add) { unsigned char single_read_data = 0; GREEN_LED = 0; read_add_L = single_read_add; read_add_H = single_read_add >> 8; i2c_transmit_start(); i2c_transmit_byte(0xA0); i2c_transmit_byte(read_add_H); i2c_transmit_byte(read_add_L); i2c_transmit_restart(); i2c_transmit_byte(0xA1); single_read_data = i2c_receive_byte(I2C_ACK); i2c_transmit_stop(); GREEN_LED = 1; return(single_read_data); } void single_address_write(unsigned int single_write_add,unsigned char single_write_data) { YELLOW_LED = 0; write_add_L = single_write_add; write_add_H = single_write_add >> 8; msec_wait(1); i2c_transmit_start(); i2c_transmit_byte(0xA0); i2c_transmit_byte(write_add_H); i2c_transmit_byte(write_add_L); i2c_transmit_byte(single_write_data); i2c_transmit_stop(); YELLOW_LED = 1; } void burst_mode_write(unsigned int start_address_1, unsigned char no_of_places_1, (unsigned char)(*p) )<< { YELLOW_LED = 0; add_L_1 = start_address_1; add_H_1 = start_address_1 >> 8; msec_wait(10); i2c_transmit_start(); i2c_transmit_byte(0xA0); i2c_transmit_byte(add_H_1); i2c_transmit_byte(add_L_1); for(i = 0; i < no_of_places_1; i++,p++) {i2c_transmit_byte(*p);} i2c_transmit_stop(); YELLOW_LED = 1; } void burst_mode_read(unsigned int start_address_2, unsigned char no_of_places_2, unsigned char *p)<< { GREEN_LED = 0; add_L_2 = start_address_2; add_H_2 = start_address_2 >> 8; i2c_transmit_start(); i2c_transmit_byte(0xA0); i2c_transmit_byte(add_H_2); i2c_transmit_byte(add_L_2); i2c_transmit_restart(); i2c_transmit_byte(0xA1); for(j = 0; j < (no_of_places_2-1); j++,p++) { *p = i2c_receive_byte(I2C_NAK); } *p = i2c_receive_byte(I2C_ACK); i2c_transmit_stop(); GREEN_LED = 1; } /************************************************************************/ /**************************main.c**************************************/ #include<reg51.h> #include<generic.h> #include<serial.h> #include<main.h> #include<I2C.h> #include<eeprom.h> unsigned char add_L = ' ',add_H = ' '; unsigned char dta; bit single_read = 0,single_write = 0,burst_read = 0,burst_write = 0; unsigned char data_to_eeprom[64] = 0;//{1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10}; unsigned char data_from_eeprom[64]= 0; unsigned char loca_data_1 = 33,loca_data_2 = 33; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ void serial_interrupt(void) interrupt 4 { if(TI) { TI = 0; } if(RI) { if(SBUF == '!') single_read = 1;//function called to read a single byte else if(SBUF == '@') single_write = 1;//function called to write a single byte else if(SBUF == '#') burst_read = 1;//function called to read in bust mode else if(SBUF == '$') burst_write = 1;//function called to write in bust mode RI = 0; } } void main(void) { sec_wait(1); initialize_serial(); msec_wait(100); while(1) { if(single_read == 1) { SBUF = single_address_read(1280);//single byte read using a static address for testig single_read = 0; } if(single_write == 1) { single_address_write(1280, loca_data_1);//single byte write using a static address for testig single_write = 0; if(loca_data_1 < 127) loca_data_1++; else loca_data_1 = 0; } if(burst_read == 1) { burst_mode_read(1280, 5, &data_from_eeprom); SBUF = data_from_eeprom[0];msec_wait(1); SBUF = data_from_eeprom[1];msec_wait(1); SBUF = data_from_eeprom[2];msec_wait(1); SBUF = data_from_eeprom[3];msec_wait(1); SBUF = data_from_eeprom[4];msec_wait(1); burst_read = 0; } if(burst_write == 1) { data_to_eeprom[0] = loca_data_2; data_to_eeprom[1] = loca_data_2; data_to_eeprom[2] = loca_data_2; data_to_eeprom[3] = loca_data_2; data_to_eeprom[4] = loca_data_2; loca_data_2++; burst_mode_write(1280, 5, &data_to_eeprom); burst_write = 0; } } } /************************************************************************/ |
Topic | Author | Date |
Passing a pointer to a function | 01/01/70 00:00 | |
'C' textbook time! | 01/01/70 00:00 | |
Char-red | 01/01/70 00:00 | |
Typo![]() | 01/01/70 00:00 | |
Corrected code | 01/01/70 00:00 | |
'C' textbook time! | 01/01/70 00:00 | |
Array name is already a pointer. | 01/01/70 00:00 |