【发布时间】:2021-02-28 04:07:52
【问题描述】:
我想在我的代码中访问 bss 部分末尾的地址,并在编译时对其进行操作。我正在用 avr-gcc 为 ATmega328p 编译。 (当然:))
目的是将剩余的 RAM(在 Arduino 上)分成偶数段。我有 RAM 的结束,而不是全局不占用的开始。该程序假定没有动态内存分配。
我知道该位置在预处理器时或编译时不可用。但是,它应该在代码上传之前可用。
我现在有
extern uint16_t __bss_end;
后来
Serial.println((uint16_t) &__bss_end);
哪个有效。它打印 0x0F00 (RAMSTART) + 使用的字节。但是,这将迫使我在运行时计算分区位置,然后需要我将分区位置存储到变量中,浪费宝贵的 RAM。
所以我想我的观点是:如何在编译时使用 __bss_end 计算这些常量(分区位置)? (或者,实际上,任何等价物)。
这只是一个有趣的项目,不是为了实用。
【问题讨论】: