OpenEdv-开源电子网

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

frertos delayms判断完系统已经运行了,后面为什么还要接普通方式延时

[复制链接]

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2018-11-19
在线时间
39 小时
发表于 2020-2-16 16:48:48 | 显示全部楼层 |阅读模式
1金钱
frertos delayms函数,判断系统已经运行了,后面为什么还要接普通方式延时

//延时nms
//nms:要延时的ms数
//nms:0~65535
void delay_ms(u32 nms)
{       
        if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行
        {               
                if(nms>=fac_ms)                                                //延时的时间大于OS的最少时间周期
                {
                           vTaskDelay(nms/fac_ms);                         //FreeRTOS延时
                }
                nms%=fac_ms;                                                //OS已经无法提供这么小的延时了,采用普通方式延时   
        }
        delay_us((u32)(nms*1000));                                //普通方式延时
}


刚接触操作系统,只是大体上看了下原子哥的教程,请问调用了 系统延时后,再接 普通方式延时 不会对当前的任务有影响吗?

最佳答案

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

vTaskDelay只能延时你系统配置的节拍的整数倍,比如你系统配置1ms,那么vTaskDelay的延时精度就是1ms,那么问题来了,你要延时1.5ms咋办?原子先vTaskDelay延时1ms,然后delay_us延时了500us。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-2-16 16:48:49 | 显示全部楼层
vTaskDelay只能延时你系统配置的节拍的整数倍,比如你系统配置1ms,那么vTaskDelay的延时精度就是1ms,那么问题来了,你要延时1.5ms咋办?原子先vTaskDelay延时1ms,然后delay_us延时了500us。
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2018-11-19
在线时间
39 小时
 楼主| 发表于 2020-3-16 10:49:49 | 显示全部楼层
szczyb1314 发表于 2020-2-16 16:48
vTaskDelay只能延时你系统配置的节拍的整数倍,比如你系统配置1ms,那么vTaskDelay的延时精度就是1ms,那么 ...

奥,明白了,谢谢讲解
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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