This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

J721EXSOMXEVM: using shared memory

Part Number: J721EXSOMXEVM

I see tons of docs about the promoted high level APIs in the j721e SDK but fail to find the most basic information.

E.G. IPC tells me to use shared memory if I have to send more than 512 bytes. Ok - how?

Likewise I'd prefer to directly use a Mailbox instead of the new IPC, as I need shared memory anyway. How?

TIA

  • Hi Klaus,

    Yes, the core IPC transport uses a processor-copy based mechanism and as such is designed for 512 bytes of maximum transport buffer size, with the maximum supported payload of 496 bytes. Anything beyond requires the use of Shared Memory, and exchanging the buffer pointers within the regular payload.

    What OS are you planning to run on the Cortex A72 core? The shared memory solution is different between Linux and QNX. The Mailbox driver API is abstracted out and is not available at userspace in general.

    Here's an FAQ showcasing a shared memory example using VisionApps layer API.

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/909695/faq-tda4vm-makefile-based-project-which-shows-a72-c7x-r5f-setup-along-with-ipc-and-buffer-passing-between-linux-rtos

    regards

    Suman

  • Hi Suman,

    Thanks a lot! We are using Linux for evaluation.
    Eventually it will be a different OS, so we should bet on what is best supported by TI and thus by third party vendors.

    So you say the example as updated for SDK 7.0 is and will be valid for 7.3 and 8.x?
    Rpmsg IPC will have long time support or should we move on to TIOVX as yet another layer on top?

    TIA

    Klaus

  • Hi Klaus,

    Thanks for the clarifications.

    The fundamentals of the example are the same, and should not change for 7.3 or 8.x much. You might need to tweak it slightly to build against the latest SDK.

    The Vision Apps layer example abstracts out the shared memory allocation between different supported SDKs (eg: Linux and QNX). The RPMsg IPC API is also different between Linux and QNX/RTOS.

    You can definitely directly use the RPMessage API and the corresponding shared memory heap allocation API, it depends on what your overall end-goals are.

    If TIOVX and related usecases are needed, then I recommend you to start directly with the above example. We currently do not have a stand-alone IPC example demonstrating the large buffer allocation and IPC (it's on our TODO list), 

    regards

    Suman

  • It takes more than slight tweaks. Is there an update for SDK 8.0?

    Again, with all the promotion of vision_apps I am missing the most basic things like how to simply build a standalone binary/firmware for the C7. This feels like watching TV with 80% advertising. Where's the beef?

  • Hi Klaus,

    The referenced Apps examples were created as a standalone example outside of vision_apps folder but using the vision_apps demos as a reference. Most of the issues you probably ran into were related to the build system changes rather than the actual example code.

    The provided example is very simple. It allocates a large buffer, shares the pointer, and the remote-side is just incrementing the value and returning it back for MPU to verify. The example code is in fact a standalone copy of the APP_REMOTE_SERVICE_TEST_CMD_0 and APP_REMOTE_SERVICE_TEST_CMD_1 from vision_apps' utils/remote_service/src/app_remote_service_test.c.

    So, you might want to refer to the Vision Apps documentation within the RTOS SDK documentation and refer to the IPC Test to get going. You should be able to modify the existing cmds or add new cmds to this if you want to run some customized evaluation. The A72 Memory Test showcases just the large buffer allocation using the Vision Apps memory library API (vision_apps/utils/mem). 

    The Concerto Makefile build system is explained here.

    Sorry, there is no updated package for the above specific example for SDK 8.0 at this point. It is outside of the SDK scope, so will take some time before it can be updated.

    regards

    Suman