C++ main entry point: Difference between revisions
No edit summary |
No edit summary |
||
Line 28: | Line 28: | ||
#include "sgpiod.h" | #include "sgpiod.h" | ||
#include "bplan20.h" | #include "bplan20.h" | ||
#include "bplan40.h" | #include "bplan40.h" | ||
Line 41: | Line 40: | ||
{ // example odometry drive using distance and turned angle | { // example odometry drive using distance and turned angle | ||
'''plan20.run'''(); | '''plan20.run'''(); | ||
} | |||
if (ini["plan40"]["run"] == "true") | |||
{ // example odometry drive using distance and turned angle | |||
plan40.run(); | |||
} | } | ||
mixer.setVelocity(0.0); | mixer.setVelocity(0.0); | ||
Line 51: | Line 54: | ||
service.terminate(); | service.terminate(); | ||
} | } | ||
=== The main() function === | |||
The main function handles: | |||
* '''setup''' of all modules by calling ''setup(...)'' in the service module. | |||
* '''run''' the mission (or missions) needed. | |||
* '''stop and terminate'' in a proper way; the service module handles the termination details. | |||
=== Run missions === | |||
The entire mission can be divided into smaller parts that can be tested individually. | |||
One example could be ''plan20''. | |||
if (ini["plan20"]["run"] == "true") | |||
{ // example odometry drive using distance and turned angle | |||
'''plan20.run'''(); | |||
} | |||
It can be activated by setting the ''run'' flag in the ''robot.ini'' configuration file. | |||
; part of robot.ini file | |||
[plan20] | |||
log = true | |||
run = true | |||
print = true | |||
The sequence of the entire mission is handled here. In this case, the entire mission consists of ''plan20'' and ''plan40''. | |||
You are, of course, allowed to change whatever you like. | |||
=== Copyright === | |||
All software, specific for Robobot, is free to use and change, according to the MIT License. One of the least restrictive copyright types. | |||
=== Include files === | |||
To call functions, the compiler needs to know where these functions are defined. C++ handles this by including the needed files prior to compiling. | |||
Where to look for these files is indicated by the brackets, like | |||
#include <string> | |||
#include "bplan20.h" | |||
The first file included is ''string'' in <..> brackets, indicating that this is a system library, and the path for such libraries is part of the compile parameters. | |||
== Compile using CMake == |
Revision as of 08:44, 31 December 2023
Back to Robobot B. Back to Robobot software description
Main
C++ starts executing a function called main(int argc, char ** argv)
In Robobot, this is rather simple and the intention is explained here.
The main.cpp file looks like this (slightly reduced):
/* #*************************************************************************** #* Copyright (C) 2023 by DTU #* jcan@dtu.dk #* #* The MIT License (MIT) https://mit-license.org/ #***************************************************************************/ // System libraries #include <iostream> #include <stdio.h> #include <string.h> #include <string> // // include local files for data values and functions #include "uservice.h" #include "cmixer.h" #include "sgpiod.h" #include "bplan20.h" #include "bplan40.h" int main (int argc, char **argv) { // prepare all modules and start data flow bool setupOK = service.setup(argc, argv); if (setupOK) { // turn on LED on port 16 gpio.setPin(16, 1); // run the planned missions if (ini["plan20"]["run"] == "true") { // example odometry drive using distance and turned angle plan20.run(); } if (ini["plan40"]["run"] == "true") { // example odometry drive using distance and turned angle plan40.run(); } mixer.setVelocity(0.0); mixer.setTurnrate(0.0); sleep(1); // to allow robot to stop while logging is running // turn off led 16 gpio.setPin(16, 0); } // close all logfiles service.terminate(); }
The main() function
The main function handles:
- setup of all modules by calling setup(...) in the service module.
- run the mission (or missions) needed.
- 'stop and terminate in a proper way; the service module handles the termination details.
Run missions
The entire mission can be divided into smaller parts that can be tested individually.
One example could be plan20.
if (ini["plan20"]["run"] == "true") { // example odometry drive using distance and turned angle plan20.run(); }
It can be activated by setting the run flag in the robot.ini configuration file.
; part of robot.ini file [plan20] log = true run = true print = true
The sequence of the entire mission is handled here. In this case, the entire mission consists of plan20 and plan40.
You are, of course, allowed to change whatever you like.
Copyright
All software, specific for Robobot, is free to use and change, according to the MIT License. One of the least restrictive copyright types.
Include files
To call functions, the compiler needs to know where these functions are defined. C++ handles this by including the needed files prior to compiling.
Where to look for these files is indicated by the brackets, like
#include <string> #include "bplan20.h"
The first file included is string in <..> brackets, indicating that this is a system library, and the path for such libraries is part of the compile parameters.