Elements of the F Prime Architecture
- Component: A FSW behavior, like a C++ class
- Port: An interface between components
- Topology: A set of component instances and connections
-
Deployment: FSW binary described as a topology
- No link-time dependences between components
- It’s easy to reconnect components into new topologies
- Ingenuity Mars Helicopter development used 11 topologies
Components
- Components are software classes where project implementation resides
- Three execution models:
- Passive – no thread, executes on calling thread
- Queued – message queue, but no thread
- Active – message queue and thread
- Code generation creates base class with virtual functions, user fills in derived function handlers.
- Where ground interface code is implemented (commands/telemetry/events/parameters)
- No dependencies on other components
- Invocations via ports (see next slide)
- Ground interfaces
- Commands – sent to a component to execute a behavior (“power X”)
- Telemetry – periodic sampled values (“temperature = X degrees”)
- Events – Asynchronous notifications of activity in the component (“X deployed”)
- Parameters – Non-volatile values to modify software behavior (“temperature limit = X”)
Ports
- Interconnection point between components
- Strongly typed interfaces
- Types shared between components
- Three port attributes:
- Synchronous – no thread, handler executes on calling thread
- Guarded – no thread, handler executes on calling thread, but all guarded calls share a mutex
- Asynchronous – invocation places a message on the component queue, dequeued on component thread
- All generated code – user does not implement
Topology
- A topology is a given interconnection of a set of components via ports
- Interconnections allow components to invoke each other
- Typically builds to a single binary
- Defines the ground system dictionary as a collection of individual component-defined ground items
Deployment
-
F Prime allows components to be reconfigured in different configurations for testing. Ingenuity had 11 different deployments that converged on a flight deployment that shared components
-
Allowed decoupled testing and support of different venues
-
Simulation versions can substitute driver/bus components for sim versions