CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Anything wrong with $99 CCS pic C compiler?

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
thaque
Guest







Anything wrong with $99 CCS pic C compiler?
PostPosted: Sat Jan 01, 2005 3:04 pm     Reply with quote

A few things about this compiler is driving me crazy.
1) A program with just a serial port and a PWM turns out to be 4KB long????
2) I add one increment command, such as , variable++, the number of bytes jumps up by 200 bytes.
3) In many situations, I cannt download the hex codes into my PIC16F877. For example, if i use printf command with %c format, but works with %X.

Any one knows what's going on here?
TH
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sat Jan 01, 2005 3:42 pm     Reply with quote

I think you are using floating point.

Solution: Don't do that. Use integers.
thaque
Guest







Anything wrong with $99 CCS pic C compiler
PostPosted: Sat Jan 01, 2005 9:24 pm     Reply with quote

No, that's not it. No floating point here. A simple program, writing and reading back a single byte into an external eeprom (2464), when compiled with PIC C, the hex file becomes 4K byte long. Is this normal? I use +O8 +Y9 compiler options. Will any other setup reduce the size? I think PIC16F877 has only 8K flash. What should i do? look for another compiler?
TH
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

Please provide additional info
PostPosted: Sat Jan 01, 2005 9:35 pm     Reply with quote

It would appear something is wrong with what you are doing. I have written DOZENS of programs for the 16F876/866 and have not seen any of the kind of thing you are describing.

What version of compiler are you using? Is it the demo?

Post the program you are using so we might be able to spot any problems..
thaque
Guest







Anything wrong with $99 CCS pic C compiler
PostPosted: Sat Jan 01, 2005 11:02 pm     Reply with quote

No, its not evaluation version. I bought it for $99. Here are the codes. Dont worry about whether it does anything meaningful. I have 2 include files, "16f877.h" and "2464.c" , where all the eeprom functions are. When compiled, its size becomes around 4K. Other problem that's bothering me is the line "write_ext_eeprom(address+i,msg[i]);". When I use '+i' to increment the address, the size jumps up by 200 bytes than when I dont use.
Thanks.

init_ext_eeprom();
output_high(PIN_C0);
address = 0x10;
do
{
printf("\r\nRead or Write: ");
cmd=getc();
putc(cmd);

if(cmd=='W')
{
for(i=0;i<5;i++)
{
write_ext_eeprom(address+i,msg[i]);
}
}
if(cmd=='R')
{
value=read_ext_eeprom(address);
printf("\r\n %X",value);
}
} while ( (cmd=='R') || (cmd=='W') );
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Jan 02, 2005 2:51 am     Reply with quote

Below, I've posted a test program based upon your posted code.
When compiled with PCM vs. 3.214, the Hex file is 2767 bytes.
The actual ROM usage, as shown at the top of the .LST file, is not much:
Code:
 ROM used: 483 words (6%)

If the "+i" is removed in the write_ext_eeprom() line below,
the ROM usage goes down to 478 words. I don't see the
huge code size or the huge changes that you're reporting.

Code:
#include <16F877.h>
#fuses XT, NOWDT, PUT, BROWNOUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

#include <24256.c>

void main()
{
int16 address;
int8 cmd;
int8 i;
int8 msg[20];
int8 value;

init_ext_eeprom();
output_high(PIN_C0);
address = 0x10;
do
{
printf("\r\nRead or Write: ");
cmd=getc();
putc(cmd);

if(cmd=='W')
  {
   for(i=0;i<5;i++)
      {
       write_ext_eeprom(address+i,msg[i]);
      }
  }

if(cmd=='R')
  {
   value=read_ext_eeprom(address);
   printf("\r\n %X",value);
   }
} while ( (cmd=='R') || (cmd=='W') );

}
Guest








Anything wrong with $99 CCS pic C compiler
PostPosted: Sun Jan 02, 2005 9:34 am     Reply with quote

Thanks a lot guys for your responses. I'm using CCS PCM C compiler version 3.077. You are right. I should've looked at LST file sooner. My list file says, ROM used 602 bytes, RAM used 20 bytes. But my hex file size is 3340 bytes. This raises more questions.
1) Where do the remaining 2738 bytes go? what are they used for? for programmer? but I use a third party programmer. This extra 2738 bytes are sent to my programmer for absolutely no reason.
2) I compile my program inside MPLAB. Can I compile outside MPLAB? will that help?
3) The list file also generates Assembly codes. If I piece them togethter, can I use the Assembler to make the hex file? My programmer is writen for Hex codes generated by assembler, not C compiler. Does this matter? I had no trouble before when I used assembler. For programming convenience i'm trying move to C.

Please one more response will be enough for me. Thanks again.
TH
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Jan 02, 2005 12:38 pm     Reply with quote

I can test it with vs. 3.077 on Monday and give you an answer
about the Hex file size then.
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Sun Jan 02, 2005 1:05 pm     Reply with quote

I did a Google search and found a link in a forum about DsPIC that should cover your issues about the Intel hex file size. I am including the link below:

http://forum.microchip.com/tm.asp?m=61920


BTW I searched on "hex file format" to find the link....

regards,
drh



Joined: 12 Jul 2004
Posts: 192
Location: Hemet, California USA

View user's profile Send private message

PostPosted: Sun Jan 02, 2005 1:14 pm     Reply with quote

The .HEX file contains address and record type information. It will always be larger than ROM size. If you search the internet for "Intel Hex File", you will find more info.
Here is one example www.cs.net/lucid/intel.htm
_________________
David
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Sun Jan 02, 2005 1:53 pm     Reply with quote

Are you just looking at the size of the .HEX file as reported by your computer, in bytes? It's not a very useful guide because:

Intel hex format needs 2 bytes to store one byte of code data, and 4 bytes to store a single 14-bit data word for this type of processor.

The file encodes data in text lines, and although there are only 8 data words per line, each line starts with a colon (one character), a number of bytes (encoded as 2 characters) an address (4 characters) a code (2 characters) then the data (8 * 4 characters, if it's a full line) and a checksum (2 characters) and then a linefeed. Written down without going to check, so I may have got it wrong! But anyway, the hex file isn't efficient on space, but you aren't supposed to care. So stop caring.
thaque
Guest







Anything wrong with $99 CCS pic C compiler
PostPosted: Sun Jan 02, 2005 2:22 pm     Reply with quote

PCM Programmer, no thanks, you donot have to try with version 3.077. I think I got a better picture of my problem after discussing with you all. Yes, i am aware of Intel Hex file format. But one explanation doesn't seem right. There are 6 bytes of start, number, address, type, and checksum, in one line of intel format. But one line also includes 16 bytes of data. Therefore, the number of data bytes will always be higher than extra bytes. As opposed to one explanation. Just a thought. Thanks to you all.
TH
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Jan 02, 2005 2:46 pm     Reply with quote

Alright, I'll skip the 3.077 test. With regard to your other questions:
Quote:
2) I compile my program inside MPLAB. Can I compile outside MPLAB? will that help?

No, it won't help. Use MPLAB.

Quote:
3) The list file also generates Assembly codes. If I piece them
together, can I use the Assembler to make the hex file?

I suppose, but there's no point in doing this.

Quote:
My programmer is writen for Hex codes generated by assembler, not C compiler. Does this matter? I had no trouble before when I used assembler. For programming convenience i'm trying move to C.

It will almost certainly work with Hex files generated by a compiler.
The only possible problem would be if your programmer doesn't like
the comment that CCS puts at the end of its Hex files. ie:
Code:
;PIC16F877

Most modern programmers don't complain about this.
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Tue Jan 04, 2005 3:38 pm     Reply with quote

The need for arguing about the topic may no longer exist, but this is very misleading: "one line [of the hex file] also includes 16 bytes of data..."

Yes, it's true that there are 16 data bytes in most lines (but if there aren't that many, all the overhead still exists). However, each text character in the hex file encodes only 4 bits, and the '877 processor uses a 14 bit data word. Each word (WORD, not BYTE) is therefore stored as 2 bytes, and each byte is broken down to 2 characters. Because of the 14-versus-16-bit mismatch, the top 2 bits of the character containing the highest-order 4 bits will always be 0, and that character will therefore always be 0, 1, 2 or 3. To make things even more fun, the two characters that encode a byte are written with the high-order character at the left, just as numbers are normally written, but the BYTE containing the highest-order data in a WORD is written at the right, because the file is "Intel little-endian" in format. Programming a computer to read a hex file isn't too difficult, but trying to do it yourself will have you screaming quite quickly.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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