金牌会员
- 积分
- 1472
- 金钱
- 1472
- 注册时间
- 2021-8-10
- 在线时间
- 271 小时
|
5金钱
void SemapTake_task(void *pvParameters)
{
u8 num=0;
u8 semavalue;
while(1)
{
xSemaphoreTake(CountSemaphore,portMAX_DELAY); //等待数值信号量
num++;
semavalue=uxSemaphoreGetCount(CountSemaphore); //获取数值信号量值
printf("data = %d\r\n",semavalue);
printf("data = %d\r\n",num);
//LCD_ShowxNum(155,111,semavalue,3,16,0); //显示信号量值
//LCD_Fill(6,131,233,313,lcd_discolor[num%14]); //刷屏
//LED1=!LED1;
vTaskDelay(1000); //延时1s,也就是1000个时钟节拍
}
}
其中等待数值信号量那个程序,这个程序是接受不到就一直死等,不会继续往下执行吗??为啥我看B站视频摁键摁的比较快的情况下,是能够输出下面的数值信号量值呢???这一点没有想明白。
|
最佳答案
查看完整内容[请看2#楼]
1、【其中等待数值信号量那个程序,这个程序是接受不到就一直死等,不会继续往下执行吗??】
你的理解有误,你还是站在前后台编程思想下理解RTOS编程。
2、当调度任务【 void SemapTake_task(void *pvParameters)】时
当执行到【xSemaphoreTake(CountSemaphore,portMAX_DELAY); //等待数值信号量】
时,
如果没有检测到CountSemaphore信号量,FREERTOS就会把任务void SemapTa ...
|