Bootloader在内存中的位置

时间:2014-01-23 20:51:19

标签: embedded microcontroller pic bootloader microchip

有没有办法让引导加载程序代码占用程序存储器中的特定部分?

我注意到一些代码写在内存的顶部,但另一部分是从$ 11000开始编写的。在我的情况下,它与我的应用程序代码冲突。那么如何强制引导程序代码占用程序内存从$ 00000到$ 10000呢?我假设可以通过更改Mplab XC8编译器下的一些设置来完成。

PIC:PIC18F87J11

编译器:MPLAB XC8

更新:

找到修复

项目属性>

ROM RANGE:0-10000

更新:

我看到了另一个问题。

所以我将ROM范围设置为 $ 00000- $ 10000 ,但即使它应该,也没有足够的空间用于引导加载程序代码。但是,当我在构建项目后查看MPLAB XC8下的程序存储器时,我注意到有些收件人留空了。

如何强制使用这些收件人?如果使用这些部分,那么0-10000的指定ROM大小应足以支持我的引导加载程序代码。

例如,使用那些地址(在那里写的数据)

00000-0925C

但是这些地址没有使用,只留空了

0925E- 0F77A (巨大的部分,多么浪费)

然后使用这些地址

0F77C-0FFFE

但是,即使似乎有更多的代码要写入内存,我的程序也会被削减到10000美元。

所以

如何强制使用未使用的收件人?它只是浪费大量内存来跳过它们,我不明白为什么它们是空的。我不能再给Bootloader提供ROM空间,其余的必须给应用程序代码。

我希望一切都清楚,谢谢!

1 个答案:

答案 0 :(得分:0)

要将引导加载程序放在指定的内存中,您应该:

1)在代码中 - 创建部分。

int __section("_bootloader") helper(int mode) {
/* ... */ 
//bootloader functions here
}

2)在链接器的选项中 - 添加选项以将该部分放置到指定的内存中。

-L-A_BLOADER=00h-ffffh
-L-p_bootloader=_BLOADER

要查看存储器范围0F77C-0FFFE中的exect功能,您可能会看到* .map文件(如果已生成)。