vxwoks如何获得毫秒级时间问题

vxwoks如何获得毫秒级时间问题,第1张

不管如何,实现毫秒级的精度需要使用硬件定时器中断--无论tickGet或者是timestamp都(从实现角度上来说最终)是这样。至于这个时间精不精确,则要看你的需求了,但这个精确度与如下因素有关:1 时钟频率的准确性。比如x86,8254定时器使用的是一个独立的晶振。其它系统嵌入式处理器,cpu内部通常包含了定时器,定时器的晶振就是CPU的晶振。2 VxWorks的中断响应时间:比较小,通常在5us左右(不能一概而论,这个与硬件性能相关度很大)。不过,如果我们认为晶振频率一直稳定,精确的话,这个定时顶多受中断响应时间的影响,又或者是中断嵌套的影响(也就是若干个us,当然条件是你把需要处理的内容放在ISR中而不是需要调度的任务中,如果挂在主时钟上,就没有中断嵌套的影响了,因为它的优先级是最高的),而且不会产生累计误差。就实现方式上来讲,挂主时钟还是辅助时钟,还是timestamp时钟。就看你的需要了:),必要的情况下,直接自己挂中断服务程序,这样最精确了。呵呵。

#include <iostream>

#include <windowsh>

using namespace std;

void main()

{

SYSTEMTIME time;//时间结构声明,这个结构是系统的,

GetSystemTime( &time ); //调用获取系统时间api

//GetLocalTime();这个函数是获取本地时间api

char t_y;

char t_m;

char t_h;

char t_Min;

char t_s;

char t_Mi;

char t_d;

char t_w;

SYSTEMTIME time;//时间结构声明,这个结构是系统的,

GetSystemTime( &time );//调用获取系统时间api

sprintf(t_y, "%d", timewYear);//将年份格式输出到t_y变量中

sprintf(t_m, "%d", timewMonth);

sprintf(t_w, "%d", timewDayOfWeek);

sprintf(t_d, "%d", timewDay);

sprintf(t_h, "%d", timewHour);

sprintf(t_Min, "%d", timewMinute);

sprintf(t_s, "%d", timewSecond);

sprintf(t_Mi, "%d", timewMilliseconds);

printf("%s,%s,%s,%s,%s,%s,%s,%s",

timewYear,

timewMonth,

timewDayOfWeek,

timewDay,

timewHour,

timewMinute,

timewSecond,

timewMilliseconds);

}

/

SYSTEM结构成员如下:

 SYSTEMTIME STRUCT

{

WORD wYear ; 年

WORD wMonth ;月

WORD wDayOfWeek ;星期,0=星期日,1=星期一

WORD wDay ;日

WORD wHour ;时

WORD wMinute ;分

WORD wSecond ;秒

WORD wMilliseconds ;毫秒

}SYSTEMTIME ENDS

///

use Time::HiRes qw( gettimeofday );

my ($seconds, $microseconds) = gettimeofday;

秒 , 微秒, 计算一下就是毫秒了, perl模块中有不少与linux函数同名同功能的函数都可以直接用的,主要搜一下在哪个模块中,在perl的模块代码中搜,或者查看perldoc去查

$ touch 1log; stat --print="%y\n" 1log

2016-04-08 18:31:02621677365 +0800

运行命令touch <文件名>; stat --print="%y\n" <文件名>

文件名可以任意写,就可以得到执行命令那一刹那的时刻。例如,上面的结果是, 18点31分零2621677365秒。

后面的 +0800 是说计算机为北京时间(北京时间比格林威治时间早8小时 )

供参考,谢谢!

北京时间校准

  国家授时中心标准北京时间

  16:13:56:925

  2022-09-07 星期三

  您的设备时间:2022-09-7 16:14:38

  北京时间在线校准系统提供标准北京时间校准,可以将北京时间校准到毫秒级。 为保证时间的准确性,本页面每五分钟与计时中心的标准时间同步一次。

  _ 刷新时间:从服务器获取最新时间。 长时间运行后,需要刷新时间;

  _ 您的网速也会影响时间的准确性,一般在半秒以内;

1

long javautilDategetTime()

Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT

represented by this Date object

如上JDK文档说,在Date对象上用getTime()获得自1970年1月1日以来的毫秒数。

2

SystemcurrentTimeMillis(); 这个方法获取当前时间的毫秒数。

3

以下实例代码把通过毫秒数相减算的目前距2014-10-01 00:00:00的天数。

public class Test {

public static void main(String[] args) throws ParseException {

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String start="2014-10-01 00:00:00";

//得到毫秒数

long timeStart=sdfparse(start)getTime();

long justNow =SystemcurrentTimeMillis();

//两个日期想减得到天数

long dayCount= (justNow-timeStart)/(2436001000);

Systemoutprintln(dayCount);

}

}

输出

25

先申明下,这个是我转百度知道的,经常BAIDU一下,就OK了

#include <stdioh>

#include <timeh>

void main ()

{

time_t rawtime;

struct tm timeinfo;

time ( &rawtime );

timeinfo = localtime ( &rawtime );

printf ( "\007The current date/time is: %s", asctime (timeinfo) );

exit(0);

}

=================

#include <timeh> -- 必须的时间函数头文件

time_t -- 时间类型(timeh 定义)

struct tm -- 时间结构,timeh 定义如下:

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_isdst;

time ( &rawtime ); -- 获取时间,以秒计,从1970年1月一日起算,存于rawtime

localtime ( &rawtime ); -- 转为当地时间,tm 时间结构

asctime ()-- 转为标准ASCII时间格式:

星期 月 日 时:分:秒 年

=========================================

你要的格式可这样输出:

printf ( "%4d-%02d-%02d %02d:%02d:%02d\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,

timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);

就是直接打印tm,tm_year 从1900年计算,所以要加1900,

月tm_mon,从0计算,所以要加1

其它你一目了然啦。

以上就是关于vxwoks如何获得毫秒级时间问题全部的内容,包括:vxwoks如何获得毫秒级时间问题、求C++获取系统时间源代码,精确到毫秒、如何在perl里取得毫秒级的时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9483105.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存