When trying to see what is happening with your code, you could try to follow stack size and current running time. Here is a simple function for doing the work :
void dsk_printDebug() {
#ifdef DEBUG
uint64_t time;
uint32_t msec, t;
uint16_t hour, min, sec;
time = TD_SCHEDULER_GetTime();
msec = time & 0x3FFF;
time >>= 15;
t = time;
sec = t % 60;
t = t / 60;
min = t % 60;
t = t / 60;
hour = t % 24;
t = t / 24;
#ifndef __ICCARM__
extern char __cs3_stack[];
char *limit=__cs3_stack;
#else
extern char CSTACK$$Limit[];
char *limit = CSTACK$$Limit;
#endif
uint32_t *sp = (uint32_t *) __get_MSP();
tfp_printf("[debug] Time:%d.%02d:%02d:%02d.%3d || Stack size : %d / %d \r\n",
(uint32_t) t, hour, min, sec, (msec * 1000) >> 15,
((uint32_t)limit - (uint32_t)sp), CONFIG_STACK_SIZE
);
#endif
}