gpt4 book ai didi

c - AVR C : Int to hexadecimal address

转载 作者:行者123 更新时间:2023-11-30 16:54:36 26 4
gpt4 key购买 nike

在 Atmega1284P 上使用 AVR GCC 时,我曾经有以下情况:

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

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

        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

新代码可以编译但不起作用。我认为地址出错了,因为我使用的整数和十六进制不一致。我如何最有效地解决这个问题?

最佳答案

RESERVED_CMP_ROM_SPACE  28000

28000 不是页面对齐的,因此如果您的 boot_program_page 实现是 here该程序将编译,甚至执行某些操作,但不会编写您期望的程序。如果您在引导加载后使用调试器读取内存,我想您会观察到类似 a3a1a2b3b1b2c3c1c2 而不是 a1a2a3b1b2b3c1c2c3 的内容。

尝试使用RESERVED_CMP_ROM_SPACE 32768

关于c - AVR C : Int to hexadecimal address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com