在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
新代码编译但不起作用。我假设地址出错了,因为我使用整数和十六进制不一致。我怎样才能最有效地解决这个问题?
答案 0 :(得分:0)
RESERVED_CMP_ROM_SPACE 28000
28000不是页面对齐的,所以如果boot_program_page
的实现是一个here,程序将编译甚至做一些事情但不写你期望的程序。
如果你在bootload之后用调试器读取内存我认为你会观察到a3a1a2b3b1b2c3c1c2而不是a1a2a3b1b2b3c1c2c3。
尝试使用RESERVED_CMP_ROM_SPACE 32768