周五,调试设备,发现起机偶尔死机,看了下死机信息:
tpp.c:63: __pthread_tpp_change_priority: Assertion `new_prio == -1 || (new_prio >= __sched_fifo_min_prio && new_prio <= __sched_fifo_max_prio)' failed.
跟了下代码,发现是报警模块初始化时, 调用pthread_mutex_lock死机的。
理了下代码流程:
pthread_mutexattr_t mutAttr;
/** 发现至少缺少了对mutAttr属性的初始化 */
pthread_mutexattr_settype(&mutAttr, PTHREAD_MUTEX_RECURSIVE_NP);
pthread_mutex_init(&g_motionTaskInfo.timerMutex, &mutAttr);
发现是对锁做递归锁属性的设置时,没有对mutexattr初始化,
改为:
pthread_mutexattr_t mutAttr;
memset(&mutAttr, 0, sizeof(pthread_mutexattr_t));
pthread_mutexattr_init(&mutAttr);
pthread_mutexattr_settype(&mutAttr, PTHREAD_MUTEX_RECURSIVE_NP);
pthread_mutex_init(&g_motionTaskInfo.timerMutex, &mutAttr);
至此,问题解决。