[SOLVED] .tmpdata cant fit the section

Status
Not open for further replies.

dhakeparag81

Full Member level 2
Joined
Jun 6, 2012
Messages
131
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,298
Location
INDIA
Activity points
2,406
Hello there,


I m expanding my current project for that i have to add number of variables, but after adding some variables and code i tried to build and then come to know build not successful.
Linker report error
"Error - section '.tmpdata' can not fit the section. Section '.tmpdata' length=0x0000006a
Errors : 1
"
Is there any having faced this problem/know how to resolve it?
plz let me know or guide to find out solution.

I wrote code for pic18f87k22.



I have attached images of error.
 
Last edited by a moderator:

You could split the original table/arrays you just added, turning easiest to linker fit it in smaller parts in the available section.
 

Tnx for reply,

Actually i wrote an expression which is very long.
so i split it up into two parts it solve my problem.

Code:
	if((data_array[0] == data_read_eeprom(0x0010)) && (data_array[1] == data_read_eeprom(0x0020))&& (data_array[2] == data_read_eeprom(0x0030)) 
		&&	(data_array[3] == data_read_eeprom(0x0070)) &&	(data_array[4] == data_read_eeprom(0x0040)) && (data_array[6] == data_read_eeprom(0x0080))
		&& (data_array[7] == data_read_eeprom(0x0090)) && (data_array[8] == data_read_eeprom(0x00A0)) && (data_array[11] == data_read_eeprom(0x00B0)) && 
		(data_array[12] == data_read_eeprom(0x00C0)) && (data_array[13] == data_read_eeprom(0x00D0)) && (data_array[9] == data_read_eeprom(0x00E0))&& 
		(data_array[15] == data_read_eeprom(0x00F0))&& (data_array[16] == data_read_eeprom(0x00F2))&& (data_array[17] == data_read_eeprom(0x00F4))&& 
		(data_array[18] == data_read_eeprom(0x00F6)) && (data_array[19] == data_read_eeprom(0x00F8))&& (data_array[20] == data_read_eeprom(0x00FA))
		&& (data_array[21] == data_read_eeprom(0x00FC)) && (data_array[22] == data_read_eeprom(0x00FE))&& (data_array[24] == data_read_eeprom(0x0012))
		&& (data_array[25] == data_read_eeprom(0x0014)) && (data_array[26] == data_read_eeprom(0x0120)) && (data_array[27] == data_read_eeprom(0x0122))&& 
		(lift_park_time == data_read_eeprom(0x0124)) && (data_array[29] == data_read_eeprom(0x0126)) && (data_array[30] == data_read_eeprom(0x0128)) && 
		(data_array[31] == data_read_eeprom(0x0130)) && (data_array[32] == data_read_eeprom(0x0132)) && (data_array[33] == data_read_eeprom(0x0134)) && 
		(data_array[34] == data_read_eeprom(0x0136))&& (data_array[35] == data_read_eeprom(0x0138)) && (data_array[36] == data_read_eeprom(0x0140)) && 
		(data_array[43] == data_read_eeprom(0x0154)) && (data_array[44] == data_read_eeprom(0x0156)) && (data_array[59] == data_read_eeprom(0x0164))&& 
		(data_array[60] == data_read_eeprom(0x0166)) && (data_array[61] == data_read_eeprom(0x0168)) && (data_array[62] == data_read_eeprom(0x0170)) && 
		(data_array[63] == data_read_eeprom(0x0172)) && (data_array[64] == data_read_eeprom(0x0174)) && (data_array[65] == data_read_eeprom(0x0176)) && 
		(data_array[66] == data_read_eeprom(0x0178)) && (data_array[67] == data_read_eeprom(0x0180)) && (data_array[68] == data_read_eeprom(0x0182)) &&
		 (data_array[69] == data_read_eeprom(0x0184)) && (data_array[70] == data_read_eeprom(0x0186)) && (data_array[71] == data_read_eeprom(0x0188)) && 
		 (data_array[72] == data_read_eeprom(0x0190)) && (data_array[73] == data_read_eeprom(0x0192)) && (data_array[74] == data_read_eeprom(0x0194)) &&
		  (data_array[75] == data_read_eeprom(0x0196)) && (data_array[76] == data_read_eeprom(0x0198)))
		  {
				data_array[10]=0x0002;
			
	}
	
	else
		data_array[10] = 0x0006;  
	}

solution

	if((data_array[0] == data_read_eeprom(0x0010)) && (data_array[1] == data_read_eeprom(0x0020))&& (data_array[2] == data_read_eeprom(0x0030)) 
		&&	(data_array[3] == data_read_eeprom(0x0070)) &&	(data_array[4] == data_read_eeprom(0x0040)) && (data_array[6] == data_read_eeprom(0x0080))
		&& (data_array[7] == data_read_eeprom(0x0090)) && (data_array[8] == data_read_eeprom(0x00A0)) && (data_array[11] == data_read_eeprom(0x00B0)) && 
		(data_array[12] == data_read_eeprom(0x00C0)) && (data_array[13] == data_read_eeprom(0x00D0)) && (data_array[9] == data_read_eeprom(0x00E0))&& 
		(data_array[15] == data_read_eeprom(0x00F0))&& (data_array[16] == data_read_eeprom(0x00F2))&& (data_array[17] == data_read_eeprom(0x00F4))&& 
		(data_array[18] == data_read_eeprom(0x00F6)) && (data_array[19] == data_read_eeprom(0x00F8))&& (data_array[20] == data_read_eeprom(0x00FA))
		&& (data_array[21] == data_read_eeprom(0x00FC)) && (data_array[22] == data_read_eeprom(0x00FE))&& (data_array[24] == data_read_eeprom(0x0012))
		&& (data_array[25] == data_read_eeprom(0x0014)) && (data_array[26] == data_read_eeprom(0x0120)) && (data_array[27] == data_read_eeprom(0x0122))&& 
		(lift_park_time == data_read_eeprom(0x0124)) && (data_array[29] == data_read_eeprom(0x0126)) && (data_array[30] == data_read_eeprom(0x0128)) && 
		(data_array[31] == data_read_eeprom(0x0130)) && (data_array[32] == data_read_eeprom(0x0132)) && (data_array[33] == data_read_eeprom(0x0134)) && 
		(data_array[34] == data_read_eeprom(0x0136))&& (data_array[35] == data_read_eeprom(0x0138)) && (data_array[36] == data_read_eeprom(0x0140)) && 
		(data_array[43] == data_read_eeprom(0x0154)) && (data_array[44] == data_read_eeprom(0x0156)) && (data_array[59] == data_read_eeprom(0x0164))&& 
		(data_array[60] == data_read_eeprom(0x0166)))
	{
		if((data_array[61] == data_read_eeprom(0x0168)) && (data_array[62] == data_read_eeprom(0x0170)) && 
		(data_array[63] == data_read_eeprom(0x0172)) && (data_array[64] == data_read_eeprom(0x0174)) && (data_array[65] == data_read_eeprom(0x0176)) && 
		(data_array[66] == data_read_eeprom(0x0178)) && (data_array[67] == data_read_eeprom(0x0180)) && (data_array[68] == data_read_eeprom(0x0182)) &&
		 (data_array[69] == data_read_eeprom(0x0184)) && (data_array[70] == data_read_eeprom(0x0186)) && (data_array[71] == data_read_eeprom(0x0188)) && 
		 (data_array[72] == data_read_eeprom(0x0190)) && (data_array[73] == data_read_eeprom(0x0192)) && (data_array[74] == data_read_eeprom(0x0194)) &&
		  (data_array[75] == data_read_eeprom(0x0196)) && (data_array[76] == data_read_eeprom(0x0198)))
		  {
				data_array[10]=0x0002;
			}
			else
			{
				data_array[10] = 0x0006;
			}	
		
	}
	
	else
		data_array[10] = 0x0006;  
	}
 

Doesn't look as a good approach.
You should correct your program logic or could use an approach with loop:

Code:
static const rom struct {
	unsigned char da;
	unsigned char ee;
//pairs of data_array[da] and data_read_eeprom(ee) indexes
} X1[] = {
	0,0x10,
	1,0x20,
	2,0x30,
	3,0x70,
	...
	27,0x0122,
	...
	76,0x198
};

char if_equals(void){
        short unsigned i;
	for(i=0;i<sizeof(X1)/sizeof(X1[0]);i++)
		if(data_array[X1[i].da] != data_read_eeprom(X1[i].ee)
			return 0;
	return 1;
}


...

	if(if_equals() && lift_park_time == data_read_eeprom(0x0124))
		data_array[10]=0x0002;
	else
		data_array[10] = 0x0006;
 
Last edited:

Tnx Xenos,

But u should use
Code:
unsigned int ee;
Instead of
Code:
unsigned char ee
see the address limit crosses the char range.

i didn't think about loop that time.
If i uses loop is that reduces my code size?
 

Yes size will get smaller, because you reduce a lot of eeprom_read function calls and a lot of inline comparisions.
Of cource you loose a little bit in speed.

If you have a known assignment of addresses in data array and eeprom (like a mathematical function), then you could even eliminate the static const rom array (this could be a better approach).

With eeprom and array addressing you are right. You should use 2 bytes sizes.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…