The systick timer uses the Cortex M0 internal clock for counting. So if you are implementing low power code, this would not be the best way to switch task. Why don't you use Watch Dog Timers instead?
I use 1/8sec WDT ISR on PROC BLE, as main wakes up after any ISR, the ISR itself just clears its flag and nothing more.
main then OR regular event flag with 125ms flag
unsigned int temp = event.all; // atomic way to copy & clear
check.all = temp | ms125.all; // OR both
event.all &= ~temp;
ms125.all = 0;
It then a row of if-statment to gosub to each statemachines that told the system to come back after this 125ms delay.
A copy of the flag structure is also used for sleep and deepsleep if it's needs PWM to stay on etc.
Really thanks for your pieces of advice and I will work on it.