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

>= and others

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



Joined: 20 Mar 2010
Posts: 193
Location: Auckland NZ

View user's profile Send private message

>= and others
PostPosted: Tue Dec 07, 2010 4:17 am     Reply with quote

there are serious issues with equations like if (a >= b) or if (a > b), etc...

I have noticed it few times, the code compiles mad in such cases, if I use (a == b) then it works like a baby, main issue is 18F45j11, 18F4520 seems to be a bit better, I had issues with 16F690 too in this subject. I have noticed it a cross of many pics and it has nothing to do with a program, most simple comparation operations are killing whole program. I am not going to post any program for very simple reason, all vars are int, and it should work. It goes mad when it is long int but this I have managed to fix by doing double loops like this one:
Code:

if (a == 255) {
b++;
}
if (b == 255) {
c do something
b = 0;
}

Compiler is unable to deal properly with 0xFFFF so I have to do such tricks.

This is real loop which hangs whole program...
Code:

   if (timer_debauncing_tick > 9) {
      ready_to_send = 1;
      debouncing_delay = 0;
   }

All problems seem to come up after I reach 70% of my program space...

If I change it to == then there is no problem.

Very disappointing...I have read CCS manual in all possible directions and there is only one explanation to this:

CCS is buggy (as we know) or manual is not mentioning some things...
It is such waste of my time on such stupid things, it is hard to believe, like clocking bugs in many pics so I cannot use PLL, etc...
_________________
Help "d" others and then you shell receive some help from "d" others.
Ttelmah



Joined: 11 Mar 2010
Posts: 19506

View user's profile Send private message

PostPosted: Tue Dec 07, 2010 6:52 am     Reply with quote

Seriously, first post your compiler version.
Bugs like this, were 'common' with the early 4.xxx compilers, but on the 'mainstream' chips (PIC16/18), I have not seen anything like this in ages, _except_ for 'user error', with things like size of variables, numbers using unsigned types, and then going -ve, etc. etc...

Best Wishes
temtronic



Joined: 01 Jul 2010
Posts: 9225
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Dec 07, 2010 7:09 am     Reply with quote

Have you contacted CCS with the type/version of your compiler and a very small program that shows the problem? Is the problem specific to only some PICS? Perhaps to just a certain version of the compiler?

Telling us here is nice but please email CCS so they can look into it and 'patch' the compiler as required.
It is not uncommon for a new PIC's die to have a 'problem', so Microchip will release 'errata' info.This is a hardware issue, not the compiler.

As for the compiler being 'buggy', you should have been around when the Radio Shack TRS80s came out. Every two weeks they sent out a letter with 'patches' to the OS requiring you to use a diskeditor to fix it.Any typo on your part could and did create havoc!CCS has invested tens of thousands of manhours in their products that are very affordable.I've never met a code cutter who wrote a perfect program the very first time and I've been doing this since 1975.
I do not 'upgrade' any software unless there is a specific need on MY part.This includes, compilers,operating systems,etc. Just because 'they' upgrade doesn't mean the code will run on my system.Some upgrades only work for newer chips.When I do, I make sure I backup the previous and can return to it, if(when?) the new version fails!
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Dec 07, 2010 2:41 pm     Reply with quote

Don't post your "fix". Post a test program that shows the problem.
Also post your compiler version.

The test program should have the #include for the PIC, #fuses, #use
delay(), all necessary variable declarations, main(), and test code.
It should be as short as possible (No "wizard" code, if not needed to
show the problem).
Linuxbuilders



Joined: 20 Mar 2010
Posts: 193
Location: Auckland NZ

View user's profile Send private message

PostPosted: Sun Dec 12, 2010 3:07 am     Reply with quote

4.107, the funny thing is that I have downloaded an upgrade 114 and then what? then software which work on 107 without any problem on 18f4520 does not work on 114, I do not know what to think any more. It is like a ccs playground but on my cost...no fun no go...I think I will freeze my a... to one stable version and keep it going as long as possible, so far as it goes CCS is changing into Apple and Microsoft and lost all of its stability and trust, uses customers as testing ground.
_________________
Help "d" others and then you shell receive some help from "d" others.
FvM



Joined: 27 Aug 2008
Posts: 2337
Location: Germany

View user's profile Send private message

PostPosted: Sun Dec 12, 2010 5:17 am     Reply with quote

Quote:
software which work on 107 without any problem on 18f4520 does not work on 114

Things like this are happening quite often with PCD, apparently CCS also manages to release insufficiently tested compiler versions for the 8 Bit chips from time to time. At least PCD V4.114 is effectively useless because it has newly introduced bugs that can't handled by workarounds.
http://www.ccsinfo.com/forum/viewtopic.php?t=43918

If you are interested to find out the exact reason for the observed problem, you should make a test application, that allows to reproduce it, as PCM programmer suggested. However, if it only appears above 70% ROM utilization (unfortunately, this happens sometimes), it may be impratical.
JoeR



Joined: 26 Jul 2008
Posts: 3

View user's profile Send private message

PostPosted: Sun Dec 12, 2010 1:05 pm     Reply with quote

Hi,

I have this issue on PCH 4.073 on a PIC18F4550 with USB.

A simple test like "if (t3 > event_boundary)"
returns true when t3=-7 and event_boundary = 5

t3 and event_boundary are longs

Which version fixes these issues???

I do not really want to change compilers I have too much work invested, and this is my last problem. I managed the program down to 83% space.
I am trying to see what else I can eliminate to free up space.

any work arounds???

I've been chasing this for days, and its maddening.

Thanks.
Ttelmah



Joined: 11 Mar 2010
Posts: 19506

View user's profile Send private message

PostPosted: Sun Dec 12, 2010 1:57 pm     Reply with quote

It would, and it'd be right!....
A 'long', is unsigned.
-7 represented as an unsigned number, is 0xfff9, which _is_ larger than 5.

This is exactly the sort of thing I was 'expecting'. Wrong choice of number types, and not understanding the limitations these impose.

Best Wishes
JoeR



Joined: 26 Jul 2008
Posts: 3

View user's profile Send private message

PostPosted: Sun Dec 12, 2010 2:51 pm     Reply with quote

Oh geez, you're right. In my old age, my eyes did not parse the help file correctly. I will define the values properly and I am sure it will work right using signed values....

Sorry for the noise.
5440



Joined: 08 Feb 2009
Posts: 11

View user's profile Send private message

PostPosted: Wed Dec 22, 2010 3:02 pm     Reply with quote

So is this <= or >= statements a known bug?

I don't use any CCS functions as I like to roll my own.

I'm using 4.106 on a PIC18F2585 and finally found a "random" issue with my code that is currently only uses 3% ROM that involves a <= statement.

If I use an == statement, all seems fine, but my code will be less reliable in the future.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 22, 2010 3:11 pm     Reply with quote

If you want help, post a test program. Complete, but short, and that
compiles with errors. By complete, I mean it has the #include for the PIC
and the #fuses, and the #use delay, and all variable declarations and
#define statements, and a main().

The shorter, the better. Don't put in anything that isn't needed to show
the problem.
SherpaDoug



Joined: 07 Sep 2003
Posts: 1640
Location: Cape Cod Mass USA

View user's profile Send private message

PostPosted: Wed Dec 22, 2010 4:57 pm     Reply with quote

5440 wrote:
So is this <= or >= statements a known bug?

I don't use any CCS functions as I like to roll my own.

I'm using 4.106 on a PIC18F2585 and finally found a "random" issue with my code that is currently only uses 3% ROM that involves a <= statement.

If I use an == statement, all seems fine, but my code will be less reliable in the future.


It doesn't seem that it was a compiler bug at all, just a programmer error.
_________________
The search for better is endless. Instead simply find very good and get the job done.
scottc



Joined: 16 Aug 2010
Posts: 95

View user's profile Send private message

PostPosted: Wed Dec 29, 2010 4:14 pm     Reply with quote

I am using 4.116 and do see some weirdness with operators => and <=.

I don't know if its a bug but I have seen this before. Honestly I never really
paid attention to it as I could find a way to make my code work.

Here is an example of a small routine that works fine. KHZ is a INT Variable.
Code:

   if (bit_test(Enc_A,3) == bit_test(Enc_B,2)){     
   
   Khz++;
   if (khz>99)
   Khz=0;
   }
     else
   {
   Khz--;
   If (Khz>99)
   Khz=99;
   }

The following does not work and throws the following error with the included =>

"Assignment inside relational expression"
"A numeric expression must appear here.
Code:

   if (bit_test(Enc_A,3) == bit_test(Enc_B,2)){     
   
   Khz++;
   if (khz=>99)
   Khz=0;
   }
     else
   {
   Khz--;
   If (Khz=>99)
   Khz=99;
   }

It seems to me that I am testing to see if the value in Khz is equal to 99
or greater than 99 and if so I set Khz to zero should be ok. It makes sense
from a human readible standpoint, but it won't compile.

Can anyone help me out and explain why such an expression is not valid.

Thanks Scott.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 29, 2010 4:24 pm     Reply with quote

Look at a list of valid C operators:
http://academic.evergreen.edu/projects/biophysics/technotes/program/c_ops.htm#relational
scottc



Joined: 16 Aug 2010
Posts: 95

View user's profile Send private message

PostPosted: Wed Dec 29, 2010 4:36 pm     Reply with quote

Yep operator is not valid, should use

<= Less Than Or Equal To

Or

>= Greater Than Or Equal To

Code compiles fine Smile

Thank You PCM
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