How to make each task time guaranteed?

Depending on your constraints regarding jitter you could use a HW timer doing the real-time processing in the ISR (lowest jitter, especially if the interrupt priority is outside the FreeRTOS covered range) or signal the expiration e.g. via task notification to a high(est) prio post-processing task or use a FreeRTOS timer doing the (non-blocking) processing in the timer callback or just again notify a post-processing task (worst jitter).
Using FreeRTOS timers doesn’t provide lower jitter than your approach because internally it’s also based on task delay/SysTick.
If you have to do more complex processing your approach is likely the best one given the task is the highest prio task in your application.
See also this interesting post regarding comparison of using task delay or FreeRTOS timers.
However, when using a task you’ll have to deal with jitters caused by interrupts kicking in and some (very short) critical sections in the FreeRTOS code and maybe in your application if you’re using them.