PIC18F 常量变量位于奇数闪存地址

问题描述 投票:0回答:1

有没有办法将 const 变量放置到闪存的奇数地址,以便该值位于 HEX 文件中?

它需要位于特定的闪存地址,我不能使用SAF块,因为它太小而且eeprom也被完全占用。因此,将分配一个特定的闪存区域来存储不经常更改的值。

在 PIC16F 器件中,它可以完美地配合:

const uint8_t dummydata[] __attribute__((address(0x2003))) = {0xAA};

确切地说,PIC18F16Q41 告诉我这不在 2 字节边界上。

我尝试创建自己的部分,但这给了我同样的错误。

我使用以下附加链接器选项创建了自己的部分:

-Wl,-PdummyData=2003h

在代码中我使用了以下部分:

const uint8_t dummyData __section("dummyData") = {0xAA};

如果我使用偶数地址,一切正常,并且该值出现在十六进制文件中。

但是由于系统设计的原因,它需要位于一个奇数地址。 (当然是在十六进制文件中)

使用环境:

  • MPLAX v6.20
  • XC8 v2.50 PRO
  • 器件:PIC18F16Q41
  • 链接器ROM范围:默认,-2000-2400(没有这个也尝试过,仍然是同样的错误)
embedded microchip mplab pic18 xc8
1个回答
0
投票

找到了有效的解决方案。它不漂亮,但无论如何。

您可以在 IDE 中提供的链接器选项不足以定义所需的部分。

所以我从这个 Microchip 论坛帖子

得到了一个想法
asm("psect dummyData,class=CODE,space=0,delta=1,reloc=1,noexec,ovrld,abs");
asm("org 0x2003");
volatile const uint8_t dummyData[] __section("dummyData") = {0xAA};

现在 HEX 文件中将出现以下行:

:01200300AA32
© www.soinside.com 2019 - 2024. All rights reserved.