Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Problem with printf() (http://www.chiefdelphi.com/forums/showthread.php?t=62740)

Mr. Freeman 28-01-2008 20:22

Problem with printf()
 
I'm getting the weirdest syntax error ever. My code is as follows (This is in the user_routines.c file)
Code:

void Process_Data_From_Master_uP(void)
{
printf("lkjhjasfdkjhashddsfkjlkasdhfdlkjkljsadhfklkjasjdhf");

// for debugging
static int counter = 0;

When I remove the printf statement, the program compiles but the printf's that are farther down don't get printed. With the printf() statement in, the compiler returns a syntax error on the following line:
static int counter = 0;

The error returned is:
Code:

C:\2008_code_svn\08_bot_working\user_routines.c:199:Error: syntax error
Halting build on first failure as requested.
BUILD FAILED: Mon Jan 28 18:17:43 2008

I can't find anything wrong with this line or any above it. I don't know why I'm getting a syntax error. Any help would be much appreciated.

Dave Flowerday 28-01-2008 20:28

Re: Problem with printf()
 
Quote:

Originally Posted by Mr. Freeman (Post 687607)
I can't find anything wrong with this line or any above it. I don't know why I'm getting a syntax error. Any help would be much appreciated.

In ANSI C, you have to declare all variables before executing any other code in a block. I can't be certain if this is your problem, but try moving the "static int counter = 0;" line above the printf and see if it compiles.

If that is indeed the problem, I would have hoped that C18 would have given a better error message. Sadly, C18 seems to do a poor job with errors in general from what I have seen.

psy_wombats 28-01-2008 20:29

Re: Problem with printf()
 
The problem is that you are declaring a variable after you've begun to give commands. C doesn't like this, but isn't very informative when it spits up 'syntax error.' (At least I'm pretty sure.) Anyway, I don't know why the printfs further on aren't printing, but try using your printf after the counter is declared.

Mr. Freeman 29-01-2008 16:54

Re: Problem with printf()
 
Thanks for all of your help, but I'm still having trouble getting this working. I've moved the printf statement to below all the variable declarations. The code compiles fine with no errors or warnings, but the printf still doesn't work.

Our software mentor should be showing up in a few hours, so hopefully he'll be able to help if I can't get it working by then, but I'd like to solve this as soon as possible because it's holding up the testing of our robot.

Here is the code as it looks now. I'm pretty sure there isn't anything wrong with it, but I can't explain the fact that it doesn't work. I'd like to post more relevant sections, but I'm getting 0 errors and 0 warnings.

Code:

void Process_Data_From_Master_uP(void)
{

// for debugging
static int counter = 0;

        unsigned char byte_count;
        unsigned char data;
        unsigned char j;

printf("akjsdfusdhafkjsa");

        Getdata(&rxdata);


B_Dubbs 29-01-2008 17:38

Re: Problem with printf()
 
Make sure that you have included stdio.h at the begining of the program like so
Code:

#include <stdio.h>
If that doesn't work then try adding
Code:

-mL -nw=2066 -D_FRC_BOARD
to the build options menu MPLabC18 tab, then click use alternate settings and add that to the end so it looks like this:
Code:

-Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa- -mL -nw=2066 -D_FRC_BOARD
Hopefully this will help you with your problem.

Kevin Watson 29-01-2008 18:02

Re: Problem with printf()
 
Quote:

Originally Posted by Mr. Freeman (Post 688137)
Thanks for all of your help, but I'm still having trouble getting this working. I've moved the printf statement to below all the variable declarations. The code compiles fine with no errors or warnings, but the printf still doesn't work.

Our software mentor should be showing up in a few hours, so hopefully he'll be able to help if I can't get it working by then, but I'd like to solve this as soon as possible because it's holding up the testing of our robot.

Here is the code as it looks now. I'm pretty sure there isn't anything wrong with it, but I can't explain the fact that it doesn't work. I'd like to post more relevant sections, but I'm getting 0 errors and 0 warnings.

Code:

void Process_Data_From_Master_uP(void)
{
 
// for debugging
static int counter = 0;
 
    unsigned char byte_count;
    unsigned char data;
    unsigned char j;
 
printf("akjsdfusdhafkjsa");
 
    Getdata(&rxdata);


There is some weirdness with Microchip's implementation of the stdio library that necessitates the use of the return and new line characters at the end of a string. Try this:

printf("akjsdfusdhafkjsa\r\n");

-Kevin

Roger 29-01-2008 18:28

Re: Problem with printf()
 
That seems curious, Kevin. We've done printf's without "\r\n" at all, and it still works.

Kevin Watson 29-01-2008 20:39

Re: Problem with printf()
 
Quote:

Originally Posted by Roger (Post 688204)
That seems curious, Kevin. We've done printf's without "\r\n" at all, and it still works.

I'm not sure if printf() always needs to see \r\n, but I've experienced this problem in the past with the 2.4 compiler (I'm not sure about 3.1). I just threw up my hands and always use \r\n in my code.

-Kevin

Chaos in a Can 29-01-2008 23:33

Re: Problem with printf()
 
I've had some odd problems with printf myself, though I've never had a problem with \r\n.

When I used a printf with about seven %d's, something that should have shown up as a 1 or 0 was printing about 150.
It wasn't until I tried using separate printf's for each value that I found that it had either swapped or skipped some of the values and was printing an input from the joystick where it should have been printing a digital input.

Mr. Freeman 30-01-2008 00:12

Re: Problem with printf()
 
I'd like to thank everyone again for their help.

Here's how we solved it:
There was a lot of code not working in addition to the printf(). However, I discovered some printf()s that were actually working, in a different section of the code.
It turns out that we had to have the operator interface plugged in for that code to work. We scratched our heads for awhile about this and came to the conclusion (one of us finally remembered) that without a connection to the OI, the watchdog processor must set all PWMs & Relays to 127 & 0, respectively.

Upon further investigation and testing, we think that with no connection to the OI, the process_data_from_master_up() function never gets called from main.c
However, once a connection with the OI has been established and then lost, the RC keeps printing whatever it should have been printing before the connection to the OI was lost.

The reason we took so long to hook the OI up was that we were under the assumption that we had had this code working and printing before without an OI connection in the past. We now believe that perhaps we did have a connection to the OI at the time we were testing, but simply didn't remember that we hooked it up.

This thread has still yielded some good advice. I was not aware that putting commands before all vars were declared was incorrect, and I now have a couple things to try when my printf()s stop working in the future.

Again, thank you everyone for your help.

Alan Anderson 30-01-2008 07:54

Re: Problem with printf()
 
Quote:

Originally Posted by Chaos in a Can (Post 688492)
When I used a printf with about seven %d's, something that should have shown up as a 1 or 0 was printing about 150.
It wasn't until I tried using separate printf's for each value that I found that it had either swapped or skipped some of the values and was printing an input from the joystick where it should have been printing a digital input.

This is a symptom of not matching the format information with the size of the variable to be printed. %d wants an int. If you instead give it a char, it will also grab the next byte of data to go with it, and everything will be misaligned from that point on. It's a good idea to get in the habit of always explicitly casting your %d-printed variables as (int).


All times are GMT -5. The time now is 23:48.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi