|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
I'm in the process of writing an autonomous code for our 'bot, but when I tried to compile, I was hit with a syntax error in the file I'd edited the auto code into. Common problem, yes, but the line reference was one of the original code lines. (I should also note that the ONLY editing I've done to the file was to add the autonomous code... no changes were made to any other line).
Here's the error message: Code:
Executing: "c:\mcc18\bin\mcc18.exe" -p=18F8520 "user_routines_fast_edit.c" -fo="user_routines_fast_edit.o" /i"C:\mcc18\h" -D_FRC_BOARD -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa- X:\USFirst-Klaube\C Programming\FrcCode\user_routines_fast_edit.c:111:Error: syntax error Code:
while (autonomous_mode) /* DO NOT CHANGE! */ While I'm at it, I might as well add a question: some of the files in the output window popped up as 'out of date'. PHP Code:
Thanks for the help in advance... ~kat |
|
#2
|
|||||
|
|||||
|
Re: Syntax Problems...
Quote:
As for your other problem, look for a { that hasn't been closed with a }, look for " that haven't been closed, or anything else. C compilers 'cascade down' if you forget to close a block, and it will give errors for unrelated lines if the problem was above it. I don't think I was very clear: If your code has an if (foo==bar) { and there isn't a } somewhere, that could be causing the problem. Oh, and look for lines without a ; at the end, they can do the same thing. Good luck. |
|
#3
|
||||
|
||||
|
Re: Syntax Problems...
The out-of-date message shouldn't be anything that you manually have to fix. The compiler program should update the files itself, so just ignore those messages. If the compiler doesn't do it itself, however, I have no idea what to do.
|
|
#4
|
|||
|
|||
|
Re: Syntax Problems...
Quote:
~kat |
|
#5
|
|||||
|
|||||
|
Re: Syntax Problems...
Quote:
|
|
#6
|
||||||
|
||||||
|
Re: Syntax Problems...
Quote:
As Bharat said, we can't tell you for sure unless you post the entire file. |
|
#7
|
|||
|
|||
|
Re: Syntax Problems...
I'll post the entire file.. but there's a new problem. I'm not sure anymore what to call a "line" of code, seeing as a friend of mine pointed out to me that, when counting code lines, I should ignore the comments, just as the compiler does. So I went back to count comment lines, and lo and behold... there weren't enough lines (the way I counted them) to justify a 'line 111'. *hangs head in shame* and now we see the depth of her ignorance. *sigh* anywho. If anyone could clarify just what constitutes a line of code, it'd be much appreciated.
So... onto business. Here's the entire code: Code:
/*******************************************************************************
* FILE NAME: user_routines_fast.c <FRC VERSION>
*
* DESCRIPTION:
* This file is where the user can add their custom code within the framework
* of the routines below.
*
* USAGE:
* You can either modify this file to fit your needs, or remove it from your
* project and replace it with a modified copy.
*
* OPTIONS: Interrupts are disabled and not used by default.
*
*******************************************************************************/
#include "ifi_aliases.h"
#include "ifi_default.h"
#include "ifi_utilities.h"
#include "user_routines.h"
/*** DEFINE USER VARIABLES AND INITIALIZE THEM HERE ***/
/*******************************************************************************
* FUNCTION NAME: InterruptVectorLow
* PURPOSE: Low priority interrupt vector
* CALLED FROM: nowhere by default
* ARGUMENTS: none
* RETURNS: void
* DO NOT MODIFY OR DELETE THIS FUNCTION
*******************************************************************************/
#pragma code InterruptVectorLow = LOW_INT_VECTOR
void InterruptVectorLow (void)
{
_asm
goto InterruptHandlerLow /*jump to interrupt routine*/
_endasm
}
/*******************************************************************************
* FUNCTION NAME: InterruptHandlerLow
* PURPOSE: Low priority interrupt handler
* If you want to use these external low priority interrupts or any of the
* peripheral interrupts then you must enable them in your initialization
* routine. Innovation First, Inc. will not provide support for using these
* interrupts, so be careful. There is great potential for glitchy code if good
* interrupt programming practices are not followed. Especially read p. 28 of
* the "MPLAB(R) C18 C Compiler User's Guide" for information on context saving.
* CALLED FROM: this file, InterruptVectorLow routine
* ARGUMENTS: none
* RETURNS: void
*******************************************************************************/
#pragma code
#pragma interruptlow InterruptHandlerLow save=PROD /* You may want to save additional symbols. */
void InterruptHandlerLow ()
{
unsigned char int_byte;
if (INTCON3bits.INT2IF && INTCON3bits.INT2IE) /* The INT2 pin is RB2/DIG I/O 1. */
{
INTCON3bits.INT2IF = 0;
}
else if (INTCON3bits.INT3IF && INTCON3bits.INT3IE) /* The INT3 pin is RB3/DIG I/O 2. */
{
INTCON3bits.INT3IF = 0;
}
else if (INTCONbits.RBIF && INTCONbits.RBIE) /* DIG I/O 3-6 (RB4, RB5, RB6, or RB7) changed. */
{
int_byte = PORTB; /* You must read or write to PORTB */
INTCONbits.RBIF = 0; /* and clear the interrupt flag */
} /* to clear the interrupt condition. */
}
/*******************************************************************************
* FUNCTION NAME: User_Autonomous_Code
* PURPOSE: Execute user's code during autonomous robot operation.
* You should modify this routine by adding code which you wish to run in
* autonomous mode. It will be executed every program loop, and not
* wait for or use any data from the Operator Interface.
* CALLED FROM: main.c file, main() routine when in Autonomous mode
* ARGUMENTS: none
* RETURNS: void
*******************************************************************************/
int counter = 0;
short end_program = 0;
void User_Autonomous_Code(void)
{
/* Initialize all PWMs and Relays when entering Autonomous mode, or else it
will be stuck with the last values mapped from the joysticks. Remember,
even when Disabled it is reading inputs from the Operator Interface.
*/
pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
pwm09 = pwm10 = pwm11 = pwm12 = pwm13 = pwm14 = pwm15 = pwm16 = 127;
relay1_fwd = relay1_rev = relay2_fwd = relay2_rev = 0;
relay3_fwd = relay3_rev = relay4_fwd = relay4_rev = 0;
relay5_fwd = relay5_rev = relay6_fwd = relay6_rev = 0;
relay7_fwd = relay7_rev = relay8_fwd = relay8_rev = 0;
/* program note: pwm01 and pwm02 are the WHEEL MOTORS. pwm03 and pwm04 are the ARM MOTORS.
there is no piston used on the robot. */
while(autonomous_mode) /* DO NOT CHANGE! */
{
if(statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
if(end_program ! = 1) /* if program has not ended */
{
counter++; /* increment counter approx. 60 times per second */
if(counter < 121) /* if less than 2 seconds have passed */
{
pwm01=pwm02=pwm03=pwm04=127; /* stop */
}
else if(counter > 120 && counter < 240) /* if 2-4 seconds have passed */
{
pwm01=155; /* right motor forward */
pwm02=27; /* left motor backward */
pwm03=pwm04=127; /*arm motors off */
}
else if(counter > 240 && counter < 360) /* if 4-6 seconds have passed */
{
pwm01=pwm02=pwm03=127; /* stop */
pwm04=200; /* upper arm joint raises */
}
else if(counter > 360 && counter < 480) /* if 6-8 seconds have passed */
{
pwm01=pwm02=pwm03=127; /* stop */
pwm04=0; /* upper arm joint lowers */
}
else if(counter > 480 && counter < 600) /* if 8-10 seconds have passed */
{
pwm01=27; /* right motor backward */
pwm02=155; /* left motor forward */
pwm03=pwm04=127; /* stop */
}
else if(counter > 600 && counter < 720) /* if 10-12 seconds have passed */
{
pwm01=pwm02=155; /* both wheel motors forward */
pwm03=pwm04=127; /* stop */
}
else if(counter > 720 && counter < 780) /* if 12-13 seconds have passed */
{
pwm01=155; /* right motor forward */
pwm02=27; /* left motor backward */
pwm03=pwm04=127; /* stop */
}
else if(counter > 780 && counter < 900) /* if 13-15 seconds have passed */
{
pwm01=pwm02=155; /* wheels forward */
pwm03=pwm04=127; /* stop */
}
else /* if more than 15 seconds have passed */
{
pwm01=pwm02=pwm03=pwm04=127; /* stop */
end_program = 1; /* end program */
}
}
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
}
/*******************************************************************************
* FUNCTION NAME: Process_Data_From_Local_IO
* PURPOSE: Execute user's realtime code.
* You should modify this routine by adding code which you wish to run fast.
* It will be executed every program loop, and not wait for fresh data
* from the Operator Interface.
* CALLED FROM: main.c
* ARGUMENTS: none
* RETURNS: void
*******************************************************************************/
void Process_Data_From_Local_IO(void)
{
/* Add code here that you want to be executed every program loop. */
}
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
|
|
#8
|
||||
|
||||
|
Re: Syntax Problems...
The compiler actually says the physical line number, so the one with 111 next to it in MPLAB is the one that the compiler is complaining about. Most compilers are like this, although a few aren't, which is probably where your friend got confused.
![]() I'm at school right now, so I'm too busy to look at the code... when I get home. ![]() |
|
#9
|
|||||
|
|||||
|
Re: Syntax Problems...
Quote:
if(end_program != 1) /* if program has not ended */ |
|
#10
|
|||
|
|||
|
Re: Syntax Problems...
Quote:
![]() Code:
Error - section 'InterruptVectorLow' type is non-overlay and absolute but occurs in more than one input file. I'm a little confused as to what this error message means, and how can I fix it? |
|
#11
|
|||||
|
|||||
|
Re: Syntax Problems...
Quote:
|
|
#12
|
||||
|
||||
|
Re: Syntax Problems...
Quote:
Code:
else if(counter > 120 && counter < 240) /* if 2-4 seconds have passed */
{
pwm01=155; /* right motor forward */
pwm02=27; /* left motor backward */
pwm03=pwm04=127; /*arm motors off */
}
else if(counter > 240 && counter < 360) /* if 4-6 seconds have passed */
{
pwm01=pwm02=pwm03=127; /* stop */
pwm04=200; /* upper arm joint raises */
}
-Kevin |
|
#13
|
|||||
|
|||||
|
Re: Syntax Problems...
Quote:
I would prefer to fix this by doing something less error-prone like this: Code:
if(counter < 121) /* if less than 2 seconds have passed */
{...}
else if(counter < 240) /* if 2-4 seconds have passed */
{...}
else if(counter < 360) /* if 4-6 seconds have passed */
{...}
else if(counter < 480) /* if 6-8 seconds have passed */
{...}
else if(counter < 600) /* if 8-10 seconds have passed */
{...}
else if(counter < 720) /* if 10-12 seconds have passed */
{...}
else if(counter < 780) /* if 12-13 seconds have passed */
{...}
else if(counter < 900) /* if 13-15 seconds have passed */
{...}
else /* if more than 15 seconds have passed */
{...}
}
Quote:
![]() |
|
#14
|
|||
|
|||
|
Re: Syntax Problems...
Awesome-ness. Thank you all so much for the help!
Until next problem... ![]() ~kat |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| If you're having MPLAB problems, LOOK HERE. | Jeremy_Mc | Programming | 0 | 20-01-2004 18:06 |
| Do you all have problems with.... | Munkaboo | Website Design/Showcase | 19 | 03-03-2003 19:51 |
| Any problems with PBASIC 2.5 Editor v2.0 | Carl Owenby | Programming | 7 | 10-02-2003 10:00 |
| Joystick problems | archiver | 2001 | 3 | 24-06-2002 02:40 |