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: 19553
|
|
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: 19553
|
|
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. |
|
|
|