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

2020-02-10 08:51发布

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

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

请教有经验的朋友,究竟应该如何操作,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
joylight
1楼-- · 2020-02-10 09:18
自己顶一个

要是PIC分论坛和AVR分论坛一样火该多好啊
cheungman
2楼-- · 2020-02-10 13:35
方法是在MPLAB IDE中,从菜单中选择Project->Build Options...->Project,在PICC-18 Linker页标下的Specify offset for ROM(ROM代码偏移量)中输入偏移量XXX(注意这里输入的已经是16进制了,不用在转换)。

重新编译,然后在View->Program Memory就可以看到你的程序已经定位在XXX起始的地址上了.
joylight
3楼-- · 2020-02-10 17:16
多谢cheungman,再请教一下

PICC18可以向下兼容PIC16的设计吗?

那个Specify offset for ROM是针对一个工程而言吧?
是不是应该创建两个工程分别编写功能程序和引导程序,然后要怎么做?分别将两个工程编译成两个.hex文件,然后手工合为一个.hex文件?
能不能通过链接器将所有的.obj文件链接生成一个.hex文件?(不过好像每一个源文件都会生成一个对应的.obj文件,不知这样操作是否可行)

如果手工将两个.hex合成一个.hex文件,还涉及到一个问题是,0000-0003地址的程序会跳转到哪里?(0004是中断向量)功能程序和引导程序分为两个project,各自编译后跳转的地址肯定不一样。0000-0003的跳转程序要在什么地方更改?
cheungman
4楼-- · 2020-02-10 19:33
 精彩回答 2  元偷偷看……
joylight
5楼-- · 2020-02-10 23:30
多谢cheungman,太热心了

我先仔细拜读一下您的大作,消化吸收之后,再请教
cheungman
6楼-- · 2020-02-11 01:43
这个链接是讲述如何解决这个问题的:"是不是应该创建两个工程分别编写功能程序和引导程序,然后要怎么做?分别将两个工程编译成两个.hex文件,然后手工合为一个.hex文件?"

http://blog.ednchina.com/cheungman/124567/message.aspx

一周热门 更多>