一、互拆锁的作用是防止共享的接口被重入。锁一定要做非空判断。
二、创互拆的位置
void user_run(void)
{ // 以下三行代码必须位置顺序固定
init_before_task();
user_task_init();
user_lock_init();
// Start the scheduler.
vTaskStartScheduler();
}
1、任务前创建:由创建了信号量,如果在系统没起来之前有使用会卡死,所以要加一个系统起来判断 。
2、任务中创建:由于任务的运行不是顺序的,当有锁在进入时锁没创,但出来时已经创好的情况。上锁与解锁的次数不相同,不太安全。
3、启动调度器前创建:这种创建方式结构清晰最为理想,不会出现方式1、2的问题。
4、一开始就创start_task运行调试器,在start_task任务里面初始化外设,锁,然后创用户任务。不要在用户任务中创锁会出现方式2中的问题。好多例程是这么干的目前没发现问题。本质与方式3一样但比方式3要多一个任务。