I’ve seen an error while running the Minimal Demo program. My platform is Cortex-A53 and I use the SMP FreeRTOS kernel. I ported the SMP Kernel into Cortex-A53 multi-core system. For the kernel testing purpose, I ran the Minimal Demo program for SMP kernel. But I see an error on the message buffer and the stream buffer test. Does anyone have seen the same error?
I see the following error messages on UART:
An Error has occurred - 00020000
Streambuffer task failed
Message buffer task failed
I’m using 8 cores and task affinity option (configUSE_CORE_AFFINITY) is disabled in the kernel.
It looks like the “check” task detected the associated tasks are not running for some reasons. In the testing_main.h header, comprehensive testing items are enabled as shown below. So it looks many other tasks are running fine but I don’t know why only streambuffer and message buffer tasks are failed. I haven’t yet dig into the details. So I don’t know the root cause of this problem.
Is the message buffer test valid in the SMP kernel? In the MessageBufferDemo.c file, I see that a non-blocking sender and receiver task are created. From the comments in the code, does it expect that the sender and receiver interleave? I think it doesn’t make sense in the SMP. Because the non-blocking sender can run at core 0 and the non-blocking receiver can run at core 1 at the same time. How come does it guarantee that the received message length is always equal to the message length sent?
There are several of the standard demo tasks (which, more recently, are actually integration tests) that are not valid on SMP because the execution sequence expected by the self tests assume only a single core. As you point out, with SMP tasks interleave, the execution sequence will be very different, triggering the self test to think something went wrong.