|
|
View previous topic :: View next topic |
Author |
Message |
topfuel Guest
|
Compiler puts code out of sequence |
Posted: Tue Sep 13, 2005 7:14 pm |
|
|
I am new to C for PIC's, I have experience with assembly though. I have done a few products with PICs using MPLAB in assembly.
This is the first time I have used CCS C with MPLAB.
I am rewriting assembly code into C for preexisting hardware.
Pretty simple stuff, just a keypad and LCD and a few D I/O lines.
I got the LCD working in C but when I added additional code for the keypad, weird things happened. If I single step through the code all the sudden it branches off into the middle of some other unrelated code.
If I compile and look at the dissasembly view in MPLAB, I can see that the code is fragmented. Here is an exceprt from the dissasembly view that shows where it is acting up. At line 226 there is a gap until line 22A. Line 226 does not have a goto so the program just goes to 227 which is wrong.
Can anyone explain this?
Chris
77: Main()
78: {
00021A 184 CLRF 0x4
00021B 301F MOVLW 0x1f
00021C 583 ANDWF 0x3, F
00021D 1683 BSF 0x3, 0x5
00021E 141F BSF 0x1f, 0
00021F 149F BSF 0x1f, 0x1
000220 151F BSF 0x1f, 0x2
000221 119F BCF 0x1f, 0x3
000222 3007 MOVLW 0x7
000223 09C MOVWF 0x1c
000224 81C MOVF 0x1c, W
000225 1283 BCF 0x3, 0x5
000226 130D BCF 0xd, 0x6
79: //Setup ports and periphials enable interrupt from timer 0
80:
81: SETUP_TIMER_0 (RTCC_DIV_16|RTCC_INTERNAL);
00022A 1683 BSF 0x3, 0x5
00022B 801 MOVF 0x1, W
00022C 39C0 ANDLW 0xc0
00022D 3803 IORLW 0x3
00022E 081 MOVWF 0x1 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Sep 13, 2005 7:51 pm |
|
|
This is CCS's answer, from their FAQ:
http://www.ccsinfo.com/faq/?9
Main CCS FAQ page:
http://www.ccsinfo.com/faq/
Also to see all the CCS library code, edit the .H file for your PIC
and comment out the #nolist statement at the top of the file.
Then you will see math routines, etc., in the .LST file. |
|
|
topfuel Guest
|
that does not explain what I am seeing. |
Posted: Wed Sep 14, 2005 5:30 am |
|
|
Thanx for the Faq link.
However I don't think that explains what I am seeing.
The code excerpt that I included shows address 226 as the last sequential line number. What I did not show is that 227 is in the middle of another function. So it goes from main into the middle of a functionl.
How can that be correct?
Chris |
|
|
Thiago Esteves Guest
|
|
Posted: Wed Sep 14, 2005 8:38 am |
|
|
Hi Chris,
Post your full code, version compiler, etc and this way
We could help you. But, I think that the next line isn't the
next instruction of your C code, now, the compiler mount
the code of the "best way" that it can.
The Line 227 is in some place of your program with another
instruction, Probability, the C code use this way to call the Lines
Like a "Call" in Assembler, But it call the line without a "Call"
in assembler.
If you still have doubts, post your code and we could help you
Best regards
PS: Sorry By my english
Thiago Cesar
Campinas - S�o Paulo - Brasil
www.scienex.com.br
[email protected] |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|