我正在为摩托罗拉 68000 微处理器使用嵌入式 C。我想将指针地址存储在 uint16 变量中,然后想做变量的 mod。我这样做的主要原因是检查 EEPROM 的扇区是否正确分配。
例如->
uint16 a, c;
uint16 *b;
b=&a;
c=b%4;
像这样的东西。显然,我不能这样做。
谢谢
您是否仅限于 16 位地址空间,即 64 KB 的 RAM?这对于 68k 系统来说是相当小的。
无论如何,您需要将指针转换为整数类型才能对其进行算术运算;
#include <stdint.h>
uint16 a, *b = &a;
intptr_t c = (intptr_t) b;
if( (c % 4) != 0 )
{
/* bad address! */
}
请注意,上面没有将地址存储在 16 位变量中,因为这不是正确的方法。相反,它用于intptr_t
将指针保存为整数。
b = (uint16*)(((uint16)(&a)) % 4);