Troubleshooting Define Commands in C for Robot Motor Control

  • Thread starter Thread starter Lancelot59
  • Start date Start date
AI Thread Summary
The discussion centers on troubleshooting a define command in C for robot motor control. The user encountered a syntax error due to incorrectly using an equals sign in the #define directive for THROTTLE. The correct syntax should be #define THROTTLE fast without the equals sign, as the preprocessor directive only performs text replacement. This mistake led to the compiler misinterpreting the command, resulting in errors when attempting to pass THROTTLE to functions. Clarifying this syntax issue resolved the problem, allowing the code to compile correctly.
Lancelot59
Messages
640
Reaction score
1
This is once again for my robot. My current issue is with a define command:

I have the following function defined in motor_control.c:

Code:
//*****************************************************************************
//Motor Control Functions
//*****************************************************************************
void forward(void)			//Go striaght forward
{
	motorR(THROTTLE,TRIM);
	motorL(THROTTLE,TRIM);
}
The throttle value controls speed, trim offsets the speed variable. Although it probably will be eliminated.

Anyhow, I have throttle defined in a header called system_config.h:

Code:
#define THROTTLE = fast 	//Default forward throttle value to use

The value for "fast" has been enumerated in the header for motor_control.c

I have included the system_config.h file in the motor_control.c library, so what can't I see it? As far as I'm aware it should be able to see that defined value.
 
Physics news on Phys.org
Show error messages.
 
Get rid of the equals sign.

#define THROTTLE fast
 
D H said:
Get rid of the equals sign.

#define THROTTLE fast

...That was a silly mistake. Thanks for the catch.

The only error message I got was a syntax error when the compiler got to the first function that tried to pass THROTTLE to a function. It didn't say anything else.

Thanks again for the help.
 
The code your compiler saw was this.
Code:
motorR(= fast,TRIM);
motorL(= fast,TRIM);

The reason for this is that the #define preprocessor directive does nothing more than text replacement. This is why you DON'T want to put = in simple preprocessor directives.
 
I see, that makes sense.
 
Back
Top