DiTBho wrote: Mon Mar 15, 2021 6:33 pm
what's the "remote function calling" mechanism mentioned on the Arduino presentation ?
Did you mean Remote Procedure Call (RPC)? I was unable to find any hits on your phrasing.
At a high level, what RPC means will generally depend upon your point-of-view: PC OS vs an environment such as (micro(Python.) I'm going to leave the 2-machine PC OS to
Wikipedia and simply
make a generalized statement in regard to a micro-controller - it is general and not entirely accurate, but should bring the RP2040 into focus.
In traditional Arduino boards with one (1) cpu, calls to functions are made by use of the program stack: the stack gets pushed, the address counter is adjusted to the function called, the function runs and may optionally return a value, the stack is popped, the address counter is adjusted, things continue. The address space being used in "flat" space and C/C++ allocate this global memory space... (and butchers it often.)
With a dual-core architecture, each core can receive a totally private memory space and optionally a chunk of memory for inter-process communications. As each core must share other resources such as I/O, ADC, USARTs, SPI, I2C, etc... software must control access to these such that both cores do not attempt simultaneous use. Within the context of a single chunk of silicon, RPC is a mechanism by which one CPU causes the "remote" processing of code on the other CPU. Once the RPC is made, the calling CPU can continue processing, handle housekeeping, or just sit and wait for a return answer. RPC can be more efficient (and maybe faster) than stack-based computing. But, if done correctly, it is certainly more secure as the memory is partitioned.
It is my (personal guess) that with the RP2040, using one CPU to handle encryption/decryption and the other CPU for application code would be efficient in some scenarios. One only need to envision program needs where a few routines causes the CPU to become cycle-starved. Moving these functions (procedures) to their own CPU with a dedicated chunk of RAM may be prudent. Consideration needs to be given to the scope of variable sharing between the two CPU - ideally, the amount of sharing should be minimal so that only the inter-process communications are quick/efficient. Another dedicated use could be hash calculations.