Project Structure

Introduction

PROS projects are internally composed of three parts: the user code, the PROS library and the header files.

The PROS library is a single file containing the core PROS routines. This file does not need to be changed. If there appears to be an issue with a core PROS function, please file an issue on GitHub.

The header files are all found in the include directory. One header file, API.h, is required to declare the PROS library functions, and also serves as a quick reference. The other file, main.h, is intended for declaring functions and variables shared between the user code files. New header files can be created in the include directory, as long as the name ends with .h.

User code has the actual sequential instructions that govern the robot’s behavior. PROS by default splits the user code up into autonomous (auto.c), driver control (opcontrol.c), and initialization (init.c) files. Code in one file can talk to code in another file using declarations in the header files. New user code files can be created in the src directory, as long as the name ends with .c it will be compiled with the others.

All user code files should start with:

#include "main.h"

This will ensure that the PROS API and other critical definitions are available in each file.

While more complicated than some environments, splitting up code grants powerful modularity and code reusability, especially when combined with source control.

Declaring Functions and Variables

Functions and variables must be declared before use. Functions and variables can be declared in the typical C manner:

int sensorValue;

void DoIt(int x) {
   motorSet(5, x);
}

int getSensorValue(void) {
     DoIt(127);
     return sensorValue;
}

Doing so will make the variables and functions local to the file in which they exist.

Some functions and variables are useful in more than one location (e.g. a function to use motorSet on all the robot’s drive motors with the same value). Such functions can be declared in any of the three files (or a custom file in the src directory). To make them accessible to any other user code file, prototype the function in main.h or in another header file.

Functions can be prototyped by copying the function’s declaration line into main.h and replacing the function code with ;.

// Prototype the "getSensorValue()" function declared above (in main.h)
int getSensorValue(void);

// Prototype the "DoIt()" function declared above (in main.h)
void DoIt(int x);

For pieces of code intended for frequent reuse, it may be better to create a separate header file with the related declarations, and to include that file in main.h. Therefore, large pieces of code involving look-up tables, control algorithms, or other complex structures can be quickly ported between projects by copying one .c user code file and one .h header file.