nasa/fprime

Execution time limit annotations

Open

#3688 opened on Jun 3, 2025

View on GitHub
 (3 comments) (0 reactions) (0 assignees)C++ (9,718 stars) (1,249 forks)batch import
help wanted

Description

F´ Version n/a
Affected Component FPP

Feature Description

For a project that I'm working on, it would be very useful to be able to define execution time limits on specific port calls. For example:

    async input port transmit: Fw.Buffer duration 50us    # handling "transmit" messages should take no more than 50us
    sync input port schedIn: Svc.Sched duration 200us     # executing the rategroup behaviors for this component should take no more than 200us
    output port loadDmaEngine: Fw.Buffer duration 10us    # the component that handles this port call should take no more than 10 us to do so

The details of how this is enforced (or whether it is only measured) would presumably be platform-specific, and don't need to be implemented in the F Prime core. But it would still require some level of FPP modeling support and autocoding support.

Since this might be a niche feature, it would also satisfy my needs to provide a generic mechanism that can be used to implement this feature on a platform-specific or project-specific basis. For example, I understand that FPP has an existing "annotations" feature that can be used to add additional unstructured information to FPP models. However, there would also need to be a generic feature that allows for the required code generation.

Rationale

Some control loops involve executing code across many components as part of critical, hard-real-time behaviors. It would be useful to be able to model these deadlines and inject code to enforce them on a granular basis, rather than relying on higher-level analysis and testing.

Contributor guide