Home > Tracks > Embedded Systems Programming

Developing embedded real-time applications with heterogeneous multiprocessing systems

Sergio Prado - Watch Now

There are a lot of embedded applications that have conflicting requirements like high throughput and data processing, responsive user interface, low-latency operations and determinism to handle hard real-time events. It is very hard (and most of the times impossible) to meet all these requirements with just a single processor.

A common approach to meet these conflicting requirements is using multiple heterogeneous processors, where a high-end processor takes care of general computing like network communication, user interface and data processing, and a low-end processor is responsible to handle low-latency and real-time events. This type of system is called Heterogeneous Multiprocessing System or HMP.

In this session, we will learn all the theory behind the development of embedded applications using heterogeneous multiprocessing systems and put into practice with hands-on demonstrations based on a board with a heterogeneous multicore SoC containing both a Cortex-A and a Cortex-M processor, capable of running multiple operating systems on the different cores.

In the hands-on demonstration, we will learn how to run an RTOS (FreeRTOS) in the Cortex-M processor to handle deterministic and real-time events and report them back to a full-featured OS (GNU/Linux) running on the Cortex-A. We will study how the communication between the cores works and use an implementation of the OpenAMP standard in the hands-on.

In this session, the attendees will understand how a heterogeneous multiprocessing system works and when to use it. They will also learn how to use a heterogeneous multicore SoC and run multiple operating systems on it, understanding how the communication between the cores are implemented in the hardware level, and learning how this communication is abstracted at the software level with the OpenAMP standard.

M↓ MARKDOWN HELP
italicssurround text with
*asterisks*
boldsurround text with
**two asterisks**
hyperlink
[hyperlink](https://example.com)
or just a bare URL
code
surround text with
`backticks`
strikethroughsurround text with
~~two tilde characters~~
quote
prefix with
>

Cesar_Santos
Score: 0 | 5 months ago | 1 reply

Hi, Sergio. As usual, a great presentation :)
My question is regarding SoC vendors that support OpenAMP: is there a list somewhere of vendors that provides support to this dual microprocessor-microcontroller architecture, or do you know other vendors than Xilinx and NXP? Thanks in advance

sergio_pradoSpeaker
Score: -1 | 5 months ago | no reply

Hi Cesar!
Unfortunately I don't know such list of SoC vendors, but nowadays many support AMP. For example, one very know platform with AMP support is the Beagleboard/Beaglebone with Cortex-A processor(s) and PRU microcontroller(s).

Mustafa
Score: 1 | 5 months ago | 1 reply

A very interesting & informative presentation. Thanks Sergio !

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Thanks Mustafa! I'm glad you enjoy it!

Hugo
Score: 1 | 5 months ago | 1 reply

Many thanks for this very nice presentation and also the demos, Sergio! Regards from Curitiba. ;)

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Thanks Hugo!

tcmichals
Score: 0 | 5 months ago | 1 reply

Several years ago I used TCP/IP over rpmsg between the A9 and M4 cortex.

sergio_pradoSpeaker
Score: 0 | 5 months ago | 1 reply

Hey tcmichals! That's an interesting idea! How was the configuration in the Linux side? Were you able to get a "virtual network interface" for the communication? On the M4 side, did you use LwIP?

tcmichals
Score: 1 | 5 months ago | no reply

Here is the repo: https://github.com/tcmichals/rpmsg-neo
rpmsg_ethernet.c is the Linux interface and the M4 size was done using lwIP. https://github.com/tcmichals/FreeRTOS-Neo/tree/master/apps/rpmsgLwIPTesting
The reason for using standard networking is to allow multiple communication paths, i.e so several threads now can communicate to different Linux applications.

burak.seker
Score: 0 | 5 months ago | 1 reply
This post has been deleted by the author
sergio_pradoSpeaker
Score: 0 | 5 months ago | 1 reply

Hello Burak! If you have any question, please let me know!

burak.seker
Score: 0 | 5 months ago | 1 reply

Hello Sergio. I want to ask something while watching your presentation. After I asked, you give the answer within your presentation and I decided to delete my question. Thanks for your concern.

It was a great presentation btw. Thanks for your effort, I really enjoyed it.

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Understood Burak, thanks!

zerorunn3r
Score: 2 | 5 months ago | 1 reply

Very informative and interesting. Thanks!

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Thanks zerorunn3r!

diego_carrillo
Score: 2 | 5 months ago | 1 reply

How does debugging work for heterogeneous multiprocessing systems? Can you debug both cores simultaneously?

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Hi Diego! It depends on the hardware, but usually yes. On the i.MX7 both cores have their own JTAG interface connected in a daisy-chained configuration, so you could debug both at the same time. Anyway, if you already have the Linux kernel running on the microprocessor, what you would do is use gdbserver to debug a Linux process on the microprocessor side and JTAG to debug the firmware on the microcontroller side.

DrewFustini
Score: 1 | 5 months ago | 1 reply

Is the OpenAMP framework in Linux kernel upstream?

I'm thinking it might be useful for the PRU processors in the TI AM3358

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Yes, it is. And actually it was TI that started it all. :-)
But to have everything working you will need vendor drivers for hardware blocks that makes it possible the communication and the life cycle management of the cores.

DrewFustini
Score: 0 | 5 months ago | 1 reply

Is Linux in control of managing the heterogeneous cores? Is remoteproc the solution?

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Hi Drew! The control of the heterogeneous cores actually depends on the hardware implementation. On i.MX7 for example, the Cortex-A7 can control the Cortex-M4, so in this case the Linux kernel have control over the life cycle of the other core. And yes, remoteproc (part of the OpenAMP standard) defines the API for that: https://www.kernel.org/doc/Documentation/remoteproc.txt

sergio_pradoSpeaker
Score: 0 | 5 months ago | no reply

Hello all! If you have any question please let me know!

OUR SPONSORS