最近在使用STM32Cube这款软件自带的FreeRTOS做一个简单的工程,工程里创建了两个任务(分别为LED闪烁任务和ADC数据处理任务)和一个二值信号量.
程序的基本流程如下:在ADC的中断ISR中,Give这个二值信号量。在ADC数据处理任务中take这个信号量,take成功后做ADC数据处理。
我分两种情况试了这个程序,第一种:把两个任务(LED任务和ADC数据处理任务)的优先级设成相同,程序运行没有任何问题。
第二种:我把ADC数据处理任务的优先级设置成比LED任务高一级(我本意是想在ADC完成采样后,立即处理ADC数据,因此把ADC数据处理任务的优先级提高了)。结果程序一直卡死在ADC任务里的take 二值信号量语句处。程序不再执行LED任务了。可是take 二值信号量的语句是一个无超时的等待语句,若没有take到二值信号量,应该使ADC数据处理任务进入阻塞态,进而去执行LED闪灯任务。而结果却不是这样?
|