
静态全局变量有以下特点: 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处: 静态全局变量不能被其它文件所用; 其它文件中可以定义相同名字的变量,不会发生冲突;通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。 但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。 静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。 静态局部变量有以下特点: 该变量在全局数据区分配内存; 静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化; 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0; 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。
延时方法很多,用定时/计数比较方便也比较精确。如果用软件延时,则可以用循环(多重、嵌套都行)。根据时间长短确定循环次数,力求精确。时间计算以机器的晶振频率为基准,算出各指令的运行时间(每条指令运行时间乘所循环的次数就是该指令的全部运行时间),所有指令运行时间的和就是延时的时间。
比如:设晶振频率为12MHz 则每机器周期为1us
513us延时程序为
DL513: MOV R7,#0FFH ;1us
DJNZ R7,$;2us 255=510us
RET ;2us
延时时间为1+510+2=513us
延时时间较长则可以用多重循环(以四重循环为例),如:
KKKK0:MOV R2,#XX ;1us
KKKK1:MOV R3,#LL ;1usXX
KKKK2:MOV R4,#NN ;1usXXLL
KKKK3:MOV R5,#MM ;1usXXLLNN
DJNZ R5,$ ;2us XXLLNNMM
DJNZ R4,KKKK3 ;2us XXLLNN
DJNZ R3,KKKK2 ;2us XXLL
DJNZ R2,KKKK1 ;2us XX
RET ;2us
延时时间为1us+1usXX+1usXXLL+1usXXLLNN+2us XXLLNNMM+2us XXLLNN+2us XXLL+2us XX+2us
适当确定四个循环次数XX、LL、NN、MM就能得到准确的延时时间。
嘿嘿 这个俺可以帮助你 就是编一个延时子程序,利用执行指令消耗的时间进行延时 即为软件延时 晶振频率为12MHz 则一个机器周期=1微秒 执行一条指令一般要1微秒 或 2微秒。 具体指导 可以去看百度右上角的私信。 呵呵 满意 就选满意回答啊
BAT里面实现延时好像也要用VBS脚本才比较方便
先看下面一段(文件abat):
start
E:\abcexe
echo
Wscriptsleep
100
>yvbs
call
yvbs
&del
yvbs
start
E:\123exe
这一段的作用是:
先启动abcexe,然后等待100毫秒,即01秒,之后再启动123exe
这里yvbs的作用其实相当于休眠器,当时间超过所定时间时,再唤醒继续执行下面语句。
所以,如果你想要启动系统后延时启动软件,可以用上面的方法来写,例如启动后2分钟再启动E盘根目录的程序abcexe:
(文件bbat)
echo
Wscriptsleep
120000
>yvbs
call
yvbs
&del
yvbs
start
E:\abc
(再设定bbat系统启动时加载。不过这样启动有CMD窗口出来。有个启动加载文件Autoexecbat,如果把这段命令加到那里面就没这个问题。)
至于能不能用更直接的方法我倒不太清楚,对这方面没啥研究。对VBS脚本也不太了解,只是写BAT文件的时候知道一点点。希望能有帮助
以上就是关于arm程序中的软件延时程序的问题!全部的内容,包括:arm程序中的软件延时程序的问题!、汇编语言延时程序问题、编写延时20ms的软件延时子程序,要求可以通过入口参数r4调整时间至500ms等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)