a incrementally improved .fsm, may hang upon reloading it
Posted: Sat Feb 08, 2020 11:15 am
I guess such topic got already covered, but I ignore the related keywords for narrowing my search.
I recently made a .fsm whose architecture is special. The app displays a couple of selection boxes following a hierarchy. Such hierarchy allows choosing various activities and modalities. Such hierarchy replaces a esoteric clutter of buttons. The implementation is elegant, only consisting in simple schematics, simple front panels, dedicated to the requested activity.
All schematics miss the DS-in and DS-out (audio) components. This is because a .fsm cannot embed several DS-in and DS-out (audio) components. Consequently, on the main schematic, I've put the DS-in and DS-out (audio), for letting all "boards" to exploit the DS-in (audio), and for letting also all "boards" to feed the DS-out (audio).
For avoiding a huge mess, the master module exploits the "index" value that's outputted by the master selection box. Such index gets distributed to all sub-schematics aka "boards". There is a integer number associated to each sub-schematic. There is a integer numbers comparator Inside all sub-schematics. Only in case the index, matches the sub-schematic number, is such sub-schematic allowed to become visible. This is done by applying a logic level on the "DoIt" pin of a "Redraw" component.
All modules, aka "boards", aka schematics, visible or not, still execute. That's to avoid. We want a multiplex, not a merge. Thus, Inside each module, the schematic embeds a "signal selection" component acting like a "three state" buffer. This way, the only schematic that's allowed to output data or audio, is the one whose number corresponds to the "index" of the activity selector. Consequently, the not-selected modules, aka "boards", aka schematics won't perceive changes at their inputs (thus, such modules won't process anything), and also, their outputs will remain isolated from the rest of the world. One must remain careful with "ticks", possibly internally generated. One must block them also.
Such method allows to quickly assemble convoluted multi-mission instruments, whose front panels are kept minimal. One can rely on "tested good" modules, dedicated to the task. Nowhere can we find "if then else" code aiming at customizing the front panel. The whole thing remains exquisitely simple to conceive, and simple to debug.
This worked like a charm, as .fsm in the making. The assembly of such multi-mission instrument was so rapid, that I did it in one shot, feeling no need to reload the .fsm during the making. Finally, I saved the .fsm, prior generating the corresponding .exe.
I launched the .exe.
The .exe hang at launch.
I had to kill the .exe using the Win7 task manager (ctrl alt del).
Win7 managed to kill the .exe in a clean way. No reboot was required. I rebooted the PC, just in case.
I reloaded the .fsm, for determining where I could have been faulty.
I guess I will never know the answer, because the .fsm doesn't load properly. It hangs. The Flowstone components toolbar remains empty, and saying "wait".
One need to keep in mind that a apparently simple .fsm that one is incrementally improving, that's working like a charm during the creation process, is never guaranteed to load and lauch properly.
Attached is the faulty .fsm.
I remain interested in knowing if the skeleton structure I devised and implemented, is eventually to avoid.
I can understand that such skeleton can render the loader, quite perplex. There are so many signal dead ends. Such particularity may trigger a vast amount of retries, before everything settles down. But, even in such unfavorable context, why o why, can't the load succeed? Are there limitations, we are not aware of?
All comments welcome.
I recently made a .fsm whose architecture is special. The app displays a couple of selection boxes following a hierarchy. Such hierarchy allows choosing various activities and modalities. Such hierarchy replaces a esoteric clutter of buttons. The implementation is elegant, only consisting in simple schematics, simple front panels, dedicated to the requested activity.
All schematics miss the DS-in and DS-out (audio) components. This is because a .fsm cannot embed several DS-in and DS-out (audio) components. Consequently, on the main schematic, I've put the DS-in and DS-out (audio), for letting all "boards" to exploit the DS-in (audio), and for letting also all "boards" to feed the DS-out (audio).
For avoiding a huge mess, the master module exploits the "index" value that's outputted by the master selection box. Such index gets distributed to all sub-schematics aka "boards". There is a integer number associated to each sub-schematic. There is a integer numbers comparator Inside all sub-schematics. Only in case the index, matches the sub-schematic number, is such sub-schematic allowed to become visible. This is done by applying a logic level on the "DoIt" pin of a "Redraw" component.
All modules, aka "boards", aka schematics, visible or not, still execute. That's to avoid. We want a multiplex, not a merge. Thus, Inside each module, the schematic embeds a "signal selection" component acting like a "three state" buffer. This way, the only schematic that's allowed to output data or audio, is the one whose number corresponds to the "index" of the activity selector. Consequently, the not-selected modules, aka "boards", aka schematics won't perceive changes at their inputs (thus, such modules won't process anything), and also, their outputs will remain isolated from the rest of the world. One must remain careful with "ticks", possibly internally generated. One must block them also.
Such method allows to quickly assemble convoluted multi-mission instruments, whose front panels are kept minimal. One can rely on "tested good" modules, dedicated to the task. Nowhere can we find "if then else" code aiming at customizing the front panel. The whole thing remains exquisitely simple to conceive, and simple to debug.
This worked like a charm, as .fsm in the making. The assembly of such multi-mission instrument was so rapid, that I did it in one shot, feeling no need to reload the .fsm during the making. Finally, I saved the .fsm, prior generating the corresponding .exe.
I launched the .exe.
The .exe hang at launch.
I had to kill the .exe using the Win7 task manager (ctrl alt del).
Win7 managed to kill the .exe in a clean way. No reboot was required. I rebooted the PC, just in case.
I reloaded the .fsm, for determining where I could have been faulty.
I guess I will never know the answer, because the .fsm doesn't load properly. It hangs. The Flowstone components toolbar remains empty, and saying "wait".
One need to keep in mind that a apparently simple .fsm that one is incrementally improving, that's working like a charm during the creation process, is never guaranteed to load and lauch properly.
Attached is the faulty .fsm.
I remain interested in knowing if the skeleton structure I devised and implemented, is eventually to avoid.
I can understand that such skeleton can render the loader, quite perplex. There are so many signal dead ends. Such particularity may trigger a vast amount of retries, before everything settles down. But, even in such unfavorable context, why o why, can't the load succeed? Are there limitations, we are not aware of?
All comments welcome.