请教一下,使用PICC如何自己重定位程序在flash中的位置?

2020-02-10 08:51发布

主要是想在PIC16F886上实现bootloader,但不知道应该如何实现程序位置的定位。

小弟对PICC编译的过程理解不深,猜测是不是只要更改PICC的某个文件,就可以自行规定LINKER的行为?

请教有经验的朋友,究竟应该如何操作,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
joylight
2020-02-11 16:55
.hex文件应该是搞错了,新情况如下:

1、功能程序无偏移时,从0x0000开始可以正常运行。说明功能程序没有问题,也不存在运行过程中堆栈溢出的问题。
2、引导程序,代码如下,跳转和中断重定位经过测试都是正常的。
3、引导程序+功能程序(分别编译,生成两个.hex文件,手工合成后下载),其中功能程序编译时偏移到0x1000,开始功能程序还能运行一段,一旦使能定时器中断,程序就好像复位了,又从头执行。
难道是新增的引导程序加重了堆栈的负担?但引导的代码中也没有CALL和中断啊,应该不会触发压栈啊。



0x0000-0xFFF的代码如下:
0000  MOVLW 0
0001  MOVWF 0xa
0002  GOTO 0x7
0003
0004  BSF 0xa,0x4
0005  BCF 0xa,0x3
0006  GOTO 0x4
0007  BCF 0xa,0x4
0008  BCF 0xa,0x3
0009  GOTO 0x7f9
.
空白
.
07F9  BSF 0xa,0x4
07FA  BCF 0xa,0x3
07FB  GOTO 0
07FC  CLRF 0x3
07FD  BCF 0xa,0x4
07FE  BCF 0xa,0x3
07FF  GOTO 0
.
空白
.
1000  功能程序

一周热门 更多>