F020在线升级程序

来源:互联网 发布:java环境变量 编辑:程序博客网 时间:2024/05/05 11:05

分为三大CODE保存区:

   升级程序区     +    用户程序区    +  用户Main入口地址保存区

 

复位0x0000-0x0003 地址保存 LJMP main 命令

例如

C:0x0000    02F741   LJMP     STARTUP1(C:F741)

0x0000 – 0x0003 存储的就是 02F741 ,其中02LJMP命令码,F741是跳转地址(main),其实也不是main的地址,在main之前,还保护堆栈初始化等代码(通过汇编可以看到)。

 

0x0003之后的是各种中断的地址,比如你的程序中

void SMBUS_ISR (void) interrupt 7

{

}

SMBUS_ISR这个SMBUS中断函数的地址就保存在0x003B

 

一个程序实际上就是由中断向量  + 用户代码程序构成

其中中断向量是在第一个扇区内

 

对于KEIL来说,除非特别指定函数地址,在编写完程序后,编译器会自动分配函数的地址,也就说改动编译后,中断向量中的地址都可能发生改变

 

对于KEIL,可以指定程序代码的位址,但这个位址是用户代码地址。

例如 Option For Target -àBL Loate -à code Range 0XEA00-0XFDFF

 代码实际区: 中断向量(第一个扇区) + 0XEA00-0XFDFF

 

原创粉丝点击