- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言的那些小秘密之volatile
C 语言的那些小秘密之volatile
volatile 的重要性对于搞嵌入式的程序员来说是不言而喻的,对于volatile 的了解程度常
常被不少公司在招聘嵌入式编程人员面试的时候作为衡量一个应聘者是否合格的参考标准
之一,为什么volatile 如此的重要呢?这是因为嵌入式的编程人员要经常同中断、底层硬件
等打交道,而这些都用到volatile ,所以说嵌入式程序员必须要掌握好volatile 的使用。
其实就象读者所熟悉的const 一样,volatile 是一个类型修饰符。在开始讲解volatile 之前我
们先来讲解下接下来要用到的一个函数,知道如何使用该函数的读者可以跳过该函数的讲解
部分。
原型:int gettimeofday ( struct timeval * tv , struct timezone * tz );
头文件:#include sys/time.h
功能:获取当前时间
返回值:如果成功返回0,失败返回-1,错误代码存于errno 中。
gettimeofday()会把目前的时间用tv 所指的结构返回,当地时区的信息则放到tz 所指的结构
中。
[cpp] view plaincopy
1. timeval 结构定义为:
2. struct timeval{
3. long tv_sec;
4. long tv_usec;
5. };
6. timezone 结构定义为:
7. struct timezone{
8. int tz_minuteswest;
9. int tz_dsttime;
10. };
先来说说timeval 结构体,其中的tv_sec 存放的是秒,而tv_usec 存放的是微秒。其中的
timezone 成员变量我们很少使用,在此简单的说说它在gettimeofday()函数中的作用是把当
地时区的信息则放到tz 所指的结构中,在其中tz_minuteswest 变量里存放的是和
Greenwich 时间差了多少分钟,tz_dsttime 日光节约时间的状态。我们在此主要的是关注
前一个成员变量timeval,后一个我们在此不使用,所以使用gettimeofday()函数的时候我
们把有一个参数设定为NULL,下面先来看看一段简单的代码。
[cpp] view plaincopy
1. #include stdio.h
2. #include sys/time.h
3.
4. int main(int argc, char * argv[])
5. {
6. struct timeval start,end;
7. gettimeofday( start, NULL ); /*测试起始时间*/
8. double timeuse;
9. int j;
10. for(j=0;j1000000;j++)
11. ;
12. gettimeofday( end, NULL ); /*测试终止时间*/
13. timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_sec - start.t
v_sec ;
14. timeuse /= 1000000;
15. printf(运行时间为:%f\n,timeuse);
16.
17. return 0;
18.
19. }
运行结果为:
[cpp] view plaincopy
1. root@ubuntu:/home# ./p
2. 运行时间为:0.002736
现在来简单的分析下代码,通过end.tv_sec - start.tv_sec 我们得到了终止时间跟起始时间
以秒为单位的时间间隔,然后使用end.tv_sec - start.tv_sec 得到终止时间跟起始时间以微
妙为单位的时间间隔。因为时间单位的原因,所以我们在此对于( end.tv_sec - start.tv_sec )
得到的结果乘以1000000 转换为微秒进行计算,之后再使用timeuse /= 1000000;将其转换
为秒。现在了解了如何
原创力文档


文档评论(0)