I got the FreeRTOS (v8.2.1) demo running on a Zynq 7000, which has dual core ARM Cortex-A9. I have different builds for running the demo on cpu0 or cpu1. What is the other CPU doing while the FreeRTOS demo is running? Can/should I put the other CPU in some sleep/inactive state? I didn’t see any code in FreeRTOS dealing with this. How could I accomplish this? Thanks for your help.
When the Zynq boots up, at first only PS0 starts, and PS1 sits idle waiting to be told to start. If there is no code to start PS1, it will just stay idle (and consume very little power).
I don’t think that FreeRTOS would support the Dual Processor as a SMPS, but you could load up a second program (with its own version of FreeRTOS) and run the system in a AMPS (asymetric) mode.
It turns out this is more a Zynq question than FreeRTOS question, so apologies for that. But for the record, if FreeRTOS is to run on CPU1, a dummy bare-metal program is still needed on CPU0 to setup CPU1 to run FreeRTOS. The dummy program can then put CPU0 to sleep after its work is done.
If you are only using 1 processor, why go to the effort to put a dummy program in processor 0 to start processor 1 only to then put processor 0 to sleep. My first guess is that this has a real chance of increasing your power consumption, at least by a bit.
I actually want to get Linux running on CPU0 and FreeRTOS on CPU1, but that config has been a real challenge to get working. Since the critical system functions are running in real-time on FreeRTOS, I thought I’d forgo Linux for now. And I was thinking getting FreeRTOS to work on CPU1 now would save effort later when Linux is introduced into the mix, but it turns out getting the dummy program on CPU0 to work with FreeRTOS on CPU1 is no walk in the park either, so much so that I think I might as well plow ahead with Linux on CPU0. Getting CPU0 to relinquish devices and set up interrupts correctly for CPU1 is a real bear, no matter what is running on CPU0.
I think what I would really want to do is run FreeRTOS on CPU0 with Linux performing the non-critical functions on CPU1, but there is absolutely no documentation on this config. There is at least some Xilinx documents for the other way (though woefully outdated) so I figure I have a better chance this way.
You might be better off using two
“chips”, one for Linux and one for FreeRTOS with a communications path…
Would most likely be less work, more reliable, better supported…