AVR C:Int到十六进制地址

时间:2016-11-09 11:40:45

标签: c avr

在Atmega1284P上使用AVR GCC,我曾经有以下内容:

#define CMP_START_ADDR 0x18000
static UInt32 loadingAddr = CMP_START_ADDR;
static UInt32 newCmpAddr = CMP_START_ADDR;

例如, loadingAddr,在某处使用如下(作为地址):

        boot_program_page(loadingAddr,block_page);

并且UInt32是typedef unsigned long UInt32;

现在我想要相同的设置,但如下所示:

#define CMP_START_ADDR ROM_SIZE-RESERVED_CMP_ROM_SPACE

static UInt8 amount_of_files = 0;
static UInt32 loadingAddr = CMP_START_ADDR;
static UInt32 newCmpAddr = CMP_START_ADDR;

其中ROM_SIZE和RESERVED_CMP_ROM_SPACE分别定义为:

    #define ROM_SIZE            FLASHEND
    #define RESERVED_CMP_ROM_SPACE  28000

FLASHEND来自iom128.h:

#define FLASHEND   0x1FFFF

新代码编译但不起作用。我假设地址出错了,因为我使用整数和十六进制不一致。我怎样才能最有效地解决这个问题?

1 个答案:

答案 0 :(得分:0)

RESERVED_CMP_ROM_SPACE  28000

28000不是页面对齐的,所以如果boot_program_page的实现是一个here,程序将编译甚至做一些事情但不写你期望的程序。 如果你在bootload之后用调试器读取内存我认为你会观察到a3a1a2b3b1b2c3c1c2而不是a1a2a3b1b2b3c1c2c3。

尝试使用RESERVED_CMP_ROM_SPACE 32768