在freertos里,一个任务进行 xSemaphoreTake(tc->sh_custody , portMAX_DELAY)后,并无限等待阻塞,程序会一直卡在这里吗?还是会自动切换到其他任务执行,知道有重新进入该任务?
是的,当一个任务执行 xSemaphoreTake() 后,如果信号量不可用,它会被阻塞,并且会被放到等待该信号量的任务队列中。此时,FreeRTOS 会自动切换到其他就绪任务执行,直到该信号量可用并且任务被唤醒。因此,程序不会一直卡在这里,而是会继续执行其他任务,直到该任务被唤醒。