FX-RTOS version 3.1.1 released
01.05.2019
What's new in the version of FX-RTOS 3.1.1
1) Starting with this version, it would be necessary to bring into production a more intelligent implementation of scheduler.
2) In versions with DPC all this time there was a problem that if we call the sheduler functions fr om DPC, then a program interrupt is requested. This is because it cannot be distinguished whether a function is called from a thread or from a DPC. A scheduler request is needed from the stream, not from the DPC, because the sheduler is called after processing the queue. Because of this, the latency of sheduling when activating threads from interrupts is twice as much as it could be, due to an extra call to PendSV that does nothing. Therefore, the internal function fx_dpc_environment was introduced, which returns true if we are in the dpc context, which allows the scheduler to not request PendSV when it is not needed.
3) Buf fixed. Statements that the kernel never prohibits interrupts turned out to be not quite true, in timers for synchronization with ISR there are literally a couple of lines wh ere the ban is used. Actually, an equal priority level for PendSV and SysTick was needed in order to remove this ban, and it apparently remained due to copy-paste in FX_SPL. Now I double-checked, interrupts are not prohibited now for sure. Of course, nothing will change much because of a pair of lines, but we made lock-free DPC just to avoid even this couple of lines.
4) The rest is not very significant, I will combine everything in one point.
• There was an invalid interrupt frame. Registers from R11 to R4 are written there, but they are saved the other way around. Since there is enough space and no one has addressed them by name, everything works. But for the future it is fixed.
• The stack is always aligned at 8. Previously, after creating the stream, it could be aligned at 4, which is deprecated for ARMv7-M.
• lang_param_assert_return is renamed to lang_param_assert. Since this macro is internal, no software modifications are needed.
• Due to the fact that the memory allocator is used the same in the "large" kernel, it was necessary to separate the algorithm and synchronization, which are now located in separate RTL_MEM_POOL and FX_MEM_POOL files, respectively. If you are satisfied with the old allocator, you can simply leave the old FX_MEM_POOL files and delete the RTL. Everything will work as before.