OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6673|回复: 4

delay_xms()和vTaskDelay()函数区别问题

[复制链接]

16

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
563
金钱
563
注册时间
2018-4-16
在线时间
76 小时
发表于 2018-4-22 10:35:01 | 显示全部楼层 |阅读模式
1金钱
有道友能具体解释一下这俩函数的区别嘛?我知道vTaskDelay()函数会导致任务调度。但是我不知道什么时候需要调度什么时候不需要。

void LED_BLUE_Task(void *pvParameters)
{
  while(1)
  {
    LED_BLUE_ON;
    vTaskDelay(500);
    LED_BLUE_OFF;
    vTaskDelay(500);
  }
}
void INTERRUPT_Task(void *pvParameters)
{
  while(1)
  {
   printf("TIM6_Interrupt!.............\r\n");
   portDISABLE_INTERRUPTS();  
   delay_xms(5000);      
   printf("TIM7_Interrupt!............\r\n");
   portENABLE_INTERRUPTS();
   delay_xms(5000);
  }
}

有道友能解释下为啥灯要用vTaskDelay(),中断实验任务只能用delay_xms() ,用vTaskDelay()完全没作用嘛?

最佳答案

查看完整内容[请看2#楼]

delay_xms()函数不会引起任务调度!delay_xms()是针对delay_ms()而言的,delay_ms()是对vTaskDelay()的简单封装,这些在视频里面都有详细的讲解的!!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-4-22 10:35:02 | 显示全部楼层
delay_xms()函数不会引起任务调度!delay_xms()是针对delay_ms()而言的,delay_ms()是对vTaskDelay()的简单封装,这些在视频里面都有详细的讲解的!!!!!
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-22 12:49:48 来自手机 | 显示全部楼层
中断服务函数里里 我觉得任何延时函数都不能用,不管这个延时是否会引起任务调度。
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-22 12:59:19 来自手机 | 显示全部楼层
中断服务函数里绝不能使用任何会导致任务切换的延时函数。如果需要在中断里调用系统提供的api函数,就用FromISR结尾的API函数,并随即判断是否需要进行一次任务切换。
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-8-26
在线时间
11 小时
发表于 2020-4-1 17:22:48 | 显示全部楼层
zuozhongkai 发表于 2018-4-22 10:35
delay_xms()函数不会引起任务调度!delay_xms()是针对delay_ms()而言的,delay_ms()是对vTaskDelay()的简单 ...

你好,哪里能找到关于RTOS的视频?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表