I am studing the FreeRTOS Kernel and I am concerning if the execution is deterministic or better, Does FreeRTOS always execute instruction x at time y?
I would say yes. I am running it on a Microblaze and from the reference manual I see that the R14 register is used to store the return address from an ISR. I then set up a period interrupt with a timer and everytime it fires up I print the R14 content and at each software run it’s different! Am I doing something wrong in testing this or there is something strange behind?
Real-Time software is rarely precisely deterministic because the hardware events it is processing are rarely precisely deterministic.
I would consider FreeRTOS to be a deterministic kernel because the rules it uses to determine what task to run next to be simple enough that I can (If I know the basic state of my system) predict which task it will be running, it will always be one of the highest priority tasks that is ready to be run at that moment.
The key is that with a bit of care in design, if your system has the ‘horsepower’ to handle a task, you can generally build a system that response within the needed response time.
If you actually need ultra-precise response timing (instruction timing level), then you may need something MUCH simpler (and less capable), but this is rarely what is needed for most usages.