How to do interprocess communication ? MSMQ?


We try to do interprocess communication on the IMX7 and the Col T30.
The goal it’s to create communication between a real-time application and a graphical one.
Is MSMQ installed on the OS given by toradex, how do we enable it?
Or do we have to build our own OS ?

If not, is there other solution to make interprocess communication?

Best Regards,
Thomas Schurch

If you need to do interprocess communication between processes running on the same device you may use point-to-point message queues:

MSMQ is not part of our images and, anyway, Windows CE can work only as a client and you will need a server to route messages between different devices.
If you need module to module communication you can consider sockets and eventually a messaging/RPC procol on top of that layer.

Thanks for the response.
I need to do interprocess communication on the same module, the IMX7. Because there is 2 processors on that module, maybe I will use the both.
The reference you send me is written in c or in c++.
Is there a way to work in C# ? And furthermore, can I do hard real time (5 milli second) with C# ?


Communication between the two (or tree) cores on iMX7 is a completely different topic.
For that we have some materials:

And we support RPMsg in our Windows CE libraries, but only the Vybrid platform at the moment.
You can build a C# wrapper on top of the C API (we have an implementation for GPIO library that you may use as reference and is part of the libraries downloadable package), but at the moment we have no support on i.MX7.
If you run a firmware or a small RTOS (freeRTOS or similar) on the M4 core you can get realtime performances but you have, of course, to use native code. Your native firmware can then communicate with a C# application running on the Cortex-A core.

Thanks for your response. Really helpful.
I get it for the IMX7.
But, we also bought a Col T30 module and in the description it’s indicated that it support real time capabilities with only one CPU (eventhough quad core).
So my question is how I reach real time capabilities in this Col T30 ? Because I want to use DotNet for the user interface in this same Col T30. Can I reach real-time with DotNet language ?

You can have real-time performances on T30 running Windows CE that is an hard real time OS, but this will also depends on the maximum latencies that your real-time system requires. You talkes about 5ms in another reply, and that would not be an issue at all.
The issue of using C# and managed code in general is that the garbage collector may halt the whole application for an unpredictable amount of time, and so your app may usually handle the 5ms timing well but in some conditions (reduced amount of free memory) it may fail to meet that latency.
My suggestion is to implement the real-time part in native code and exchange information with the C# application using point-to-point message queues, shared memory, events or the other mechanism that the OS provides.