Important fix!!
Since we are using pointers to execute tasks, the first thing we need to do is to check that whether all system task pointers are initialized or not, if one of these pointers is not initialized, then the task pointer should not be accessed since it will cause memory access violation, and access wrong memory address can cause the system to reboot.

In app_systick.c, specifically speaking, in the TMR0 call-back ISR, we need to check that all pointers are initialized, both in ISR and in task execution.

Wancheng Zhou
9.17.2014