Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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;
		}
	}
}
/************************************************************************/


 



List of 7 messages in thread
TopicAuthorDate
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      

Back to Subject List