C51main函数深入学习,有如下代码:
#include "reg52.h"
/************* 本地变量声明 **************/
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
unsigned int JumpAddress;
unsigned int a=0;
char i;
void test()
{
while(1)
{
a++;
}
}
void main()
{
i++;
if(i == 5)
{
JumpAddress =0x10;
JumpAddress = (JumpAddress << 8) | 0x22; //Jump to user application
Jump_To_Application = (pFunction) JumpAddress ;
Jump_To_Application();
}
}
当我在keil2中仿真执行时,i的值会从0变到1,在从1变到0,一直在循环,但是一直不等于5.
故此我们知道mian函数也像while函数一样,是个死循环,只不过在main函数执行代码时,会清除变量的值到初始值,也就是说再main函数中执行的代码会堆栈指针初始化。
2.以下函数为C51函数跳转程序测试,
#include "reg52.h"
/************* 本地变量声明 **************/
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
unsigned int JumpAddress;
unsigned int a=0;
char i;
void test() // 将此函数定位到0x1022 ?PR?test?tt(0x1022)
{
while(1){ a++;}
}
void main()
{
while(1)
{
i++;
if(i == 5)
{
JumpAddress =0x10;
JumpAddress = (JumpAddress << 8) | 0x22; //Jump to user application
Jump_To_Application = (pFunction) JumpAddress ;
Jump_To_Application();//跳转到0x1022去执行test函数,在watch中可以看到a的值一直在增大。
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』