C语言编程技巧.doc

C语言编程技巧.doc

ID:52199930

大小:42.00 KB

页数:6页

时间:2020-03-24

C语言编程技巧.doc_第1页
C语言编程技巧.doc_第2页
C语言编程技巧.doc_第3页
C语言编程技巧.doc_第4页
C语言编程技巧.doc_第5页
资源描述:

《C语言编程技巧.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言编程技巧volatile的用法volatile的本意是“易变的”EETOP专业博客---电子工程师自己的家园!~XP0Z,

2、Rz[#p~M7pe6W{5d#k'^0由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:EETOP专业博客---电子工程师自己的家园9x+Q%ww_staticinti=0;jtY/WV5y1t0EETOP专业博客---电子工程师自己的家园$`7@(jC/w7G0hfintmain(void)EETOP专业博客---电子工程师自己的家园'C,yk@4xUM+]{

3、,Q,](b4J!?zp@0...!xN"N~hd;[0while(1)WMG3S&^P-U7w&C0{EETOP专业博客---电子工程师自己的家园f/hZd*Eif(i)dosomething();6mCWhI~0}1f&]I)t5Z0x&q^c)T0}EETOP专业博客---电子工程师自己的家园0N-O$P'r2r8Pq/O8tiu^`if[0/*Interruptserviceroutine.*/EETOP专业博客---电子工程师自己的家园T}+i6MYvoidISR_2(void)$v%^#{*IM4

4、kui0{EETOP专业博客---电子工程师自己的家园C:j(ub:`i=1;EETOP专业博客---电子工程师自己的家园6A!G#w?C-?}&kO}cQM(ED"A0#x3ix"?@)JTkEI0程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。如果将将变量加上volatile修饰,则编译器保证对此变量的

5、读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。+Z{e[,{/IzB0EETOP专业博客---电子工程师自己的家园ADwVWf;[w&s8R一般说来,volatile用在如下的几个地方:y&V.atr,?-*V0EETOP专业博客---电子工程师自己的家园(A-RcO&uY1、中断服务程序中修改的供其它程序检测的变量需要加volatile;EETOP专业博客---电子工程师自己的家园n?b'w'AwA"ub3HT:lj,v(K02、多任务环境下各任务间共享的标志应该加volatile;*c

6、S.M'Y(r0EETOP专业博客---电子工程师自己的家园;t5g)AW'Ko}?9m1Ha3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;EETOP专业博客---电子工程师自己的家园E*v

7、8j2v$b7_6#Y;~%p%jV]:Upf0另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。关于C++中的内联函数(inline)在c++中,为了解决一些频繁调用的小函数大

8、量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。]&CMgR6s%MU08OI'D+eC&N3{X6c*k0  可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。  下面我们来看一个例子:#include  cRY+Y']1ba&h+Hh3L0#include  VHN

9、&Z+J*u5e0using namespace std; OS7a2RD{(~J5}'M*{6A(Z$B6B0inline string dbtest(int a); //函数原形声明为inline即:内联函数 %E_'S{#Bq0K4c6lxk3N0 EETOP专业博客---电子工程师自己的家园8UA@dg/M9U3J8peM7Z EETOP专业博客---电子工程师自己的家园+o%H)E?-I+V1a*]xvoid main() :rYQ&Oz*^Fs

10、'HN0{ 5M[

11、UXxj

12、o0    fo

13、r (int i=1;i<=10;i++) ,py3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。