本帖最后由 ichaoer 于 2012-9-25 09:07 编辑
我试着在c8051f5xx上去实现CANopen,CANFestival的协议栈,用KEIL的环境。底层写好之后,消除编译错误告警之后,一个奇怪的问题出现了。程序不能跳转
到main。
在startup.a51中如下这一句
LJMP ?C_START
对应的反汇编是 C:0xCFCD 02D00B LJMP C: D00B 这条自循环语句。程序跑到这条LJMP语句(用仿真器)跑飞了。为什么?
C:0xCFCD 02D00B LJMP C: D00B
C:0xCFD0 02C457 LJMP main(C:C457)
C:0xCFD3 E4 CLR A
其实跳转到main的语句就在自循环语句的下一句。为什么呢?是设置的问题还是?
keil中的设置如下:
Memory Model 和Code Rom 都是large模式
BL51 locate中设置Xdata:0x0000-0x0FFF
使用模拟器可以跳转到main,使用仿真器执行完跳转就跑到一个奇怪的地方,跑飞了。
Starup.a51 中设置如下
; <h> Stack Space for reentrant functions in the LARGE model.
; <q> XBPSTACK: Enable LARGE model reentrant stack
; <i> Stack space for reentrant functions in the LARGE model.
XBPSTACK EQU 1 ; set to 1 if large reentrant is used.
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
XBPSTACKTOP EQU 0x0FFF +1 ; default 0FFFFH+1
; </h>
; |