Sida 1 av 1

Varföt tar RAM minnet slut här

Postat: 17 december 2010, 00:23:41
av jfri
Skriver ett program till en PIC16F676 och har nedanstående allokeringar av RAM minnet. Enligt map filen så används address 0x20 till 0x53 dvs 52 bytes vilket stämmer om jag räknar ihop använda byte. Men Om jag bara använder ytterligare en byte (genom att res 4 bytes för Value_Ascii istället för tre) dvs totalt 53 byte så genererar länkaren felmeddelandet
Error - section 'ram2' can not fit the section. Section 'ram2' length=0x00000005
Varför? Det ska ju finnas 64 byte RAM i en 16F676 i address 0x20 till 0x5F. Så det borde väl inte vara några problem att allokera 0x20 till 0x54 (eller upp till 0x5F). Det ska ju finnas ytterligare 12 bytes kvar av tillgängligt RAM minne.
Koden för min allokering (detta är allt RAM jag allokerar)

Kod: Markera allt

ram1			udata_shr
count			res		1  
temp			        res		1 
Temp			res		1  
H_byte			res		1    
L_byte			res		1    
R0				res		1        
R1				res		1        
R2				res		1    
tempHi			res		1  
tempLo			res		1  
sign				res		1  
fsr0				res		1  
dly				res		1
Tic500uS		        res		2
Tic5s			        res		2
Tic500mS		        res		1  
Value_Ascii		res		3
User_status		res		1
UbatLo			res		1
UbatHi			res		1
IbatLo			res		1
IbatHi			res		1
VinLo			res		1
VinHi			        res		1
VutLo			res		1
VutHi			        res		1
TempLo		        res		1
TempHi			res		1
BCD_HI		        res		1  
BCD_LO		        res		1  
flank0			res		1  
flank1			res		1  
flank2			res		1  
W_Save		res		1  
STATUS_Save	res		1   
ACCdLO		res		1
ACCdHI		res		1
ACCcLO		res		1
ACCcHI		res		1
ACCaLO		res		1
ACCaHI		res		1
ACCbLO		res		1
ACCbHI		res		1

samt i en annan fil

ram2	  	udata_shr	
XmtReg	        res	1
Count		res	1
DlyCnt		res	1
offset		res	1
W_temp	        res	1

Re: Varföt tar RAM minnet slut här

Postat: 17 december 2010, 07:57:25
av Fagge
Vild gissning bara.
Stackpekaren använder ju också ramet då den ska hantera subrutiner...

Re: Varföt tar RAM minnet slut här

Postat: 17 december 2010, 09:09:23
av Icecap
Nej, stacken har ett eget minne som enbart används till stack!

Re: Varföt tar RAM minnet slut här

Postat: 17 december 2010, 10:29:34
av sodjan
Posta MAP filen. Eller kolla den själv... :-)
Jag kan snabbt ladda din kod i MPLAB och kolla,
men frukost/förmiddagskaffe kom just imellan...

Re: Varföt tar RAM minnet slut här

Postat: 17 december 2010, 12:22:19
av sodjan
Kolla i MPLAB under menyn "Project" -> "Build Configuration". Ändra från "Debug" till "Release".
Vid "Debug" används en annan LKR (automatiskt) där en del av minnen är reserverat för debuggern.

Jämför :

Kod: Markera allt

I den vanliga LKR'en (16F676.LKR):
SHAREBANK  NAME=gpr0     START=0x20     END=0x5F

I debug LKR'en  (16F676_G.LKR):
  SHAREBANK  NAME=gpr0     START=0x20     END=0x53
  SHAREBANK  NAME=dbgspr0  START=0x54     END=0x5F     PROTECTED
Så adresser över 53 (54 - 5F) är "reserverade"...