| View previous topic :: View next topic   | 
	
	
	
		| Author | 
		Message | 
	
	
		
			hmmpic
 
 
  Joined: 09 Mar 2010 Posts: 314 Location: Denmark 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				| C statement placed wrong in the lst file... v5.95 & 5.94 | 
			 
			
				 Posted: Thu Sep 17, 2020 12:55 am     | 
				     | 
			 
			
				
  | 
			 
			
				C statement placed wrong in the lst file...
 
 
Small test c file and the generated lst file from version 5.95 and my old version 5.66.
 
In the latest 5.95 (and version 5.94 and maybe other) the c statement and generated assembler code are placed wrong.
 
 
Right: 5.66
 
Left: 5.95
 
 
Link to a pic.
 
http://s000.tinyupload.com/?file_id=03375643534854097575
 
 
 
Problem is random, some file look ok and other have the placement error...
 
 
Anyone see the same? | 
			 
		  | 
	
	
		  | 
	
	
		
			Ttelmah
 
 
  Joined: 11 Mar 2010 Posts: 19967
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 1:09 am     | 
				     | 
			 
			
				
  | 
			 
			
				The 'source line' placement, is only really for guidance. So it is deciding here 
 
to put it after the generated code, instead of before. Not really important.
 
Why are you worried about this?. Sometimes the lines are miles away from 
 
the actual assembler code. 
 
Must admit it'd seem to make more logic to keep it at least roughly in 
 
order, but it might actually give some quite interesting 'clues' about how
 
the optimiser approaches things. | 
			 
		  | 
	
	
		  | 
	
	
		
			hmmpic
 
 
  Joined: 09 Mar 2010 Posts: 314 Location: Denmark 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 1:22 am     | 
				     | 
			 
			
				
  | 
			 
			
				It have worked nice in my .66.
 
You cant compare file if the statement are placed random. 
 
The included compare tools in the pcw compiler cant too.
 
Must hard to read in fast view when it is placed in random...
 
Try to remove all \n and  space and other format guideline from a c file, most hard to read but it work:-) | 
			 
		  | 
	
	
		  | 
	
	
		
			PCM programmer
 
 
  Joined: 06 Sep 2003 Posts: 21708
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 1:23 am     | 
				     | 
			 
			
				
  | 
			 
			
				What PIC ?  I made your .LST fragments into a source file and it works
 
fine with an 18F46K22.  All addresses are in order:
 
 	  | Code: | 	 		  
 
CCS PCH C Compiler, Version 5.095, xxxxx     17-Sep-20 00:17
 
 
00000:  GOTO   MAIN
 
.................... 
 
.................... #include <18F46K22.h> 
 
 
.................... #device PIC18F46K22
 
.................... 
 
.................... #list
 
.................... 
 
.................... #use delay(internal=4M)
 
.................... #use rs232(baud=9600, UART1, ERRORS)
 
.................... 
 
.................... void StaticVar()
 
00004:  MOVLW  10
 
00006:  MOVWF  i8_NoStatic
 
.................... {
 
.................... int8 i8_NoStatic=0x10;
 
.................... static int8 i8_Static=0x20;
 
.................... 
 
.................... i8_NoStatic=0x11;
 
00008:  MOVLW  11
 
0000A:  MOVWF  i8_NoStatic
 
.................... i8_Static=0x21;
 
0000C:  MOVLW  21
 
0000E:  MOVWF  i8_Static
 
00010:  GOTO   005A (RETURN)
 
.................... }
 
.................... 
 
.................... void Calc()
 
.................... {
 
.................... const int8 MaxAD=245;
 
.................... const int8 Decimal=MaxAD * 0.5;
 
.................... const int16 StateStep=0x20;
 
.................... static int8 stateold=255;
 
.................... int8 ad,state;
 
.................... 
 
.................... if(ad > MaxAD) ad = MaxAD;
 
00014:  MOVF   ad,W
 
00016:  SUBLW  F5
 
00018:  BC    001E
 
0001A:  MOVLW  F5
 
0001C:  MOVWF  ad
 
0001E:  GOTO   005C (RETURN)
 
.................... 
 
.................... }
 
.................... 
 
.................... //==================
 
.................... void main()
 
00022:  CLRF   TBLPTRU
 
00024:  BCF    RCON.IPEN
 
00026:  MOVLW  50
 
00028:  MOVWF  OSCCON
 
0002A:  BCF    OSCTUNE.PLLEN
 
0002C:  BCF    OSCTUNE.INTSRC
 
0002E:  CLRF   rs232_errors
 
00030:  BCF    BAUDCON1.BRG16
 
00032:  MOVLW  19
 
00034:  MOVWF  SPBRG1
 
00036:  MOVLW  A6
 
00038:  MOVWF  TXSTA1
 
0003A:  MOVLW  90
 
0003C:  MOVWF  RCSTA1
 
0003E:  MOVLB  F
 
00040:  CLRF   x38
 
00042:  CLRF   x39
 
00044:  CLRF   x3A
 
00046:  CLRF   x3B
 
00048:  CLRF   x3C
 
0004A:  CLRF   CM2CON1
 
0004C:  CLRF   CM2CON0
 
0004E:  CLRF   CM1CON0
 
00050:  MOVLW  20
 
00052:  MOVWF  05
 
00054:  SETF   06
 
.................... {          
 
.................... StaticVar();
 
00056:  MOVLB  0
 
00058:  BRA    0004
 
.................... Calc();
 
0005A:  BRA    0014
 
.................... 
 
.................... 
 
.................... while(TRUE);
 
0005C:  BRA    005C
 
.................... }
 
.................... 
 
0005E:  SLEEP
 
 | 	  
 
Test program:
 
 	  | Code: | 	 		  #include <18F46K22.h> 
 
#use delay(internal=4M)
 
#use rs232(baud=9600, UART1, ERRORS)
 
 
void StaticVar()
 
{
 
int8 i8_NoStatic=0x10;
 
static int8 i8_Static=0x20;
 
 
i8_NoStatic=0x11;
 
i8_Static=0x21;
 
}
 
 
void Calc()
 
{
 
const int8 MaxAD=245;
 
const int8 Decimal=MaxAD * 0.5;
 
const int16 StateStep=0x20;
 
static int8 stateold=255;
 
int8 ad,state;
 
 
if(ad > MaxAD) ad = MaxAD;
 
}
 
 
//======================================
 
void main()
 
{          
 
StaticVar();
 
Calc();
 
 
while(TRUE);
 
} | 	 
  | 
			 
		  | 
	
	
		  | 
	
	
		
			hmmpic
 
 
  Joined: 09 Mar 2010 Posts: 314 Location: Denmark 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 1:29 am     | 
				     | 
			 
			
				
  | 
			 
			
				I see the same on some file no problem and other have problem...
 
 
Test code and PIC.
 
 
 	  | Code: | 	 		  
 
//#include <18f26k22.h>
 
#include <12f1840.h>
 
 
#use delay(clock=8M,int)
 
#ID CHECKSUM_PROGRAM
 
#ID CHECKSUM
 
 
 
 
void StaticVar(){
 
 int8 i8_Nostatic=0x10;
 
 static int8 i8_Static=0x20;
 
 
 
 I8_Nostatic=0x11;
 
 i8_Static=0x21;
 
}
 
 
 
 
void Calc(){
 
 const int8 MaxAD = 245;//ad res 0..255 but pot only get about 245 for max.
 
 const int8 Decimal= MaxAD*0.5;//245*0,5=122 samme som at lægge 0.5 til.
 
 const int16 StateStep=20;//max step
 
 
 
 static int8 stateold=255;
 
 int8 ad,state;
 
   
 
 if (ad>MaxAD) {ad=MaxAD;}
 
 
 
 state = (ad*StateStep+Decimal)/MaxAD;//245*0,5=122 samme som at lægge 0.5 til.
 
}
 
 
 
void main(void){
 
 StaticVar();
 
 
 
 Calc();
 
}
 
 | 	 
  | 
			 
		  | 
	
	
		  | 
	
	
		
			hmmpic
 
 
  Joined: 09 Mar 2010 Posts: 314 Location: Denmark 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 1:38 am     | 
				     | 
			 
			
				
  | 
			 
			
				| When using the #ID CHECKSUM_PROGRAM then the problem is there! | 
			 
		  | 
	
	
		  | 
	
	
		
			Ttelmah
 
 
  Joined: 11 Mar 2010 Posts: 19967
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 1:58 am     | 
				     | 
			 
			
				
  | 
			 
			
				Question.. How can you have two #ID statements?. Makes no sense.
 
Presumably the second will override the first.
 
 
However it looks as if when you specify #ID CHECKSUM_PROGRAM, the
 
compiler is re-ordering the fie when it calculates the checksum. :( | 
			 
		  | 
	
	
		  | 
	
	
		
			hmmpic
 
 
  Joined: 09 Mar 2010 Posts: 314 Location: Denmark 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Sep 17, 2020 2:08 am     | 
				     | 
			 
			
				
  | 
			 
			
				Right!
 
The c code file are for error testing only!
 
It was me reporting some of the bug fix for the 5.95 and one fix was the #ID statement for checksum. Therefore not a production file just for compiler testing. | 
			 
		  | 
	
	
		  | 
	
	
		 |