2.4 KiB
XFT
eXecutive Framework Template (XFT) is a template for project with femto XF.
Femto XF is an eXecutive Framework for embedded systems developed in the University of Applied Sciences Western Switzerland (HES-SO Valais/Wallis) by Pierre-André Mudry, Pascal Sartoretti and Medar Rieder.
This template is specifically designed for a PIC18F board. It's template for work with state machines. It used the model of the 5 layers for the packaging and double switch pattern for the state machine.
Layers
App
Here is the place for the application code. The application code is the code that is specific to the application and that is not reusable on another application. Here you can find the factory and obviously the main.
Board
Here is the place for the board specific code. The board code is the code that is not reusable on another board.
Here you can find in bonus a class for the LED and a class for the button for a PIC18F board.
MCC Generated Files
Here is the files generated by the MPLAB Code Configurator (MCC). You maybe have to regenerate them if you change the configuration of the board.
Middleware
Here is the place for the middleware code. The middleware code is the code that is not specific to the board and that is reusable on another board. Here you can find in bonus a class for a blinker and a class for a click handler.
XF
Here is the femto XF framework. No modification is needed.
State machines
Generator
You can generate a class for state machine with the following command:
python3 ./XFTGenerator/XFTGenerator.py
You can find the generated class in the folder XFTGenerator/out/
.
For more details about generator, see the README.md in the folder XFTGenerator/
.
How it works
The architecture is based around the method processEvent()
.
This method is called by the XF when an event is received.
The method processEvent()
is a switch on the current state.
The first switch is switched on the actual state. The second switch is switched on event on exit and a third switch is switched on event on entry.
For each entry on an event you have a callback method than you can define in the class with the FILENAME_onState() method.
For each variables you have a setter.
For each event you have an emitter method that you can call in the class with the FILENAME_emitEvent() method.
Look the comments of .h file for more details.