小v电子技术博文 上海鲤鲸网络科技 小v单片机 物联网云平台管理系统+终端嵌入式软硬件开发!
关于armLinux的实时性之usleep的分析
  • 首页 > Linux
  • 作者:小v
  • 2017年7月26日 16:57 星期三
  • 浏览:631
  • 字号:
  • 评论:0
  • 分析使用基于armlinux的平台下采集数据,计划在20ms内采集128个点,由于Linux实时性的限制,其软件中断不可取,计划使用while循环方式。

    如果20ms内采集128个点,那么如果usleep精确的话,usleep是一个微妙级的延时,

     

    则可以按下的方式实现

     

    int i;

    while(i++ < 128)//128*157us = 20096us 20ms

    {

        adcv=adcget();//get  data 

        usleep(157);//delay  156us

    }

     

     

    由于对Linux下的usleep的不可信,所以进行测试,查看误差。

     

    编写一下代码

    #include <stdio.h>

    #include <stdlib.h>

    #include <sys/time.h>

    int main(int argc, char *argv[])

    {

    printf("Hello, world!\n");

    struct timeval tvafter,tvpre;

    struct timezone tz;

    int sum = 0;     

    int i=0;

    gettimeofday (&tvpre , NULL);

    printf("start:%d.%d us,\n",tvpre.tv_sec,tvpre.tv_usec);

    //for(i = 0; i < 10; i++)

    //{

       //  sum += i;

      // usleep(5);

    //}     

    gettimeofday (&tvafter , NULL);

    printf("end: %d.%d us;\n",tvafter.tv_sec,tvafter.tv_usec);

    printf("时间差: %d us;\n",tvafter.tv_usec-tvpre.tv_usec);

    return EXIT_SUCCESS;

    }

     

    在没有使用usleep 时 由于每条程序都会有时钟周期,先测出这些浪费的时间,测出10次如下

    ewewwe.png

    取平均值 560us,

     dre.png

    usleep(1)打开 ,

    取平均值905us

     

     

     

    Usleep(1)  的时间实际为 905us-560us = 345us 

    误差还是挺大的。

     

     

      您阅读这篇文章共花了:  
     本文无需标签!
    二维码加载中...
    本文作者:小v      文章标题: 关于armLinux的实时性之usleep的分析
    本文地址:http://www.xiaovdiy.cn/?post=348
    版权声明:若无注明,本文皆为“”原创,转载请保留文章出处。

    返回顶部| 首页| 手气不错| 捐赠支持| 自定义链接| 自定义链接| 自定义链接| 手机版本|后花园

    Copyright © 2014-2017   京ICP备14059411 Copyright 2014-2015 上海鲤鲸网络科技工作室 版权所有 All Rights Reserved

    sitemap