Execute code on a specific memory location

mmsanchez wrote on Tuesday, April 16, 2013:

Hello… I am working with a Zynq board, with an AMP configuration (Linux on CPU0 and FreeRTOS on CPU1).

So far, I am able to write (trough Linux) a binary file to a specific memory location, but what I really need to do is to execute the binary file from FreeRTOS.

I don’ know if I should create a task for reading the written data, or if its possible to jump to this memory location, execute the written script and return to my task.

Any Ideas?

Thank you

rtel wrote on Tuesday, April 16, 2013:

FreeRTOS applications are statically linked.  There is no way of dynamically linking to an external executable.  If the external executable was position independent then you could manually jump to that address, but would also have to manage the jump back.


mmsanchez wrote on Tuesday, April 16, 2013:

Hello Richard…
Thank you for answering so quickly…
Just for being clear…. If I create a position independent executable… it would be possible to jump to the memory location where It is written and execute it?…
I know I have to do something to jump back…

Thank you! … I have to start this from scratch and I am a bit lost! :smiley:


rtel wrote on Tuesday, April 16, 2013:

I don’t see why not, but I have never really tried it outside of jumping to a bootloader or copying code to RAM and executing it from RAM.


mmsanchez wrote on Wednesday, May 01, 2013:

Hi… I finally got it done… using linker script turned out easier. Thanks!

I want to warm up this topic, because Im also working on a configuration like @mmsanchez (Ubuntu 20.04 on CPU0 and FreeRTOS on CPU 3).
Im interested in the solution.
What did you do to load a programm dynamically?

I want to write/compile/… code on the linux-CPU (or load an executable from network) and afterwards load the executbale with the FreeRTOS CPU to execute it. (Instead of rebooting the whole board everytime)
Thank you in advance

This seems more like a question for your hardware vendor - can you load a bare-metal binary to the other CPU and run it? If you are able to do so, you should be able to use a FreeRTOS application as well.

Thank you for your reply.
I use u-boot as a bootloader, which can read elf-files. The bin-files are no longer used in the boot process.
I can put an FreeRTOS-ELF-File on the boot partition and grab it while boot-process, so it can be executed.
The application is therefore statically linked with the FreeRTOS in the ELF-file.
My question is, if I can seperate the application from the OS, so i dont have to boot everytime I changed my application-code.

Are you asking if you can separately compile FreeRTOS application and load it over FreeRTOS like a Linux application? There is no 1:1 mapping with Linux as there is no loader. An approach you can try is - build FreeRTOS and application as 2 separate binaries and tell the application the location of FreeRTOS APIs. Take a look at the approach I mentioned here - Binary partitioning - #3 by aggarg

It might be a way to deal with my situation. I will look after it, when there is time for it.
Thank you for your answer @aggarg .