So, I’ve been playing around with a 16F877, and I got my hands on one of the kit gyros, and am trying to write my own code for it. I’ve got it mostly working, but I need to display a 16 bit integer to figure out what constitutes a 90 degree turn. But, the PIC doesn’t want to do it. I can’t for the life of me get it to output a 16 bit integer (that I can understand) to the debugger using a printf. I’ve tried %ld, but it didn’t give me the right number. Is there some other trick (or formatting) I can use?
%ld is for 32-bit numbers. For a normal int value, just use %d.
More important then knowing the type of PIC is what compiler you are using.
In C18 %ld prints in hex and expects a long (32 bits) while an int is 16 bits
In a compiler for your computer, both an int and a long are 32 bits, and both %d and %ld would print the same thing with both.
Other compilers (especially embedded compilers) will all have small variations like that, that you can only learn about by reading the manual.
I’m using CCS. I ended up solving it by making all of the variables 32 bit integers, which obviously isn’t the best solution. I think the problem came when I was doing 8 bit integer math and then set the result equal to a 32 or 16 bit integer. Is there a way to go about doing that?
The piece of code in question was:
Originally, angle was 16 bit integer, and instant was an 8 bit integer. But I couldn’t get a useful number, so I changed angle to a 32 bit integer, which I knew I had the syntax right, but it was still a funny number. After I changed instant to a 32 bit number it worked fine. I think I probably have to cast it somehow, but I don’t really have a grasp on what casting exactly does, and why it works.
on a side not, you could also have done: