Replies: 2 comments 4 replies
-
Most of our cFS based missions use a periodic housekeeping request at ~5 seconds. Some apps have 1 second wake up messages as well. I cannot claim to be a GNC expert, but I thought most of our GNC systems run at greater than 1Hz, which means they would always be available to process data from a software bus pipe. I would think that if every cycle was multiple seconds, then it might make sense to see if the algorithm could be broken up to allow the app to remain responsive to the software bus scheduling and housekeeping requests. As an example, our Stored Command app can execute an absolute time sequence and multiple relative time sequences simultaneously , but the sequences are not implemented as threads. It's more like a single threaded state machine where it's driven by a 1hz scheduling message from the software bus. It follows the pattern: wake up, process messages, do work, go back to wait for messages. Alan |
Beta Was this translation helpful? Give feedback.
-
That is a good point about not having anything to report while the child task is busy. The only benefit I could see is having the app remain responsive - if it is possible to report progress or check for cancellation requests, the app could respond at the same rate as other apps. For example knowing that an operation is in progress and it is xx% finished may be useful in real time telemetry. But maybe we should have a mindset of apps that run on a much longer cycle. Having "black box" algorithms or other subsystems in linux may also provide a use case for this, as it might not be practical to modify the code. |
Beta Was this translation helpful? Give feedback.
-
For some cases, there is a need to allow an app to run for multiple seconds processing some dense task. Typically this is some sort of GN&C application. When using SCH wakeups in CFS, there are a couple issues that come up with this sort of problem. If you run the app at a frequency that is faster than it's processing time, wakeup messages build up, resulting in strange unwanted behavior. It seems there are a couple different strategies I've seen for handling these cases, I'd like to know if anyone else has run into this and what you ended up doing. Are there any best practices to draw from?
That's the ideas I've seen so far to tackle this problem, I'd love to hear someone else's perspective and if there are best practices defined here.
Beta Was this translation helpful? Give feedback.
All reactions