1

我正在为摩托罗拉 68000 微处理器使用嵌入式 C。我想将指针地址存储在 uint16 变量中,然后想做变量的 mod。我这样做的主要原因是检查 EEPROM 的扇区是否正确分配。

例如->

 uint16 a, c;
 uint16 *b;
 b=&a;
 c=b%4;

像这样的东西。显然,我不能这样做。

谢谢

4

2 回答 2

2

您是否仅限于 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将指针保存为整数。

于 2012-09-06T13:00:37.010 回答
1
b = (uint16*)(((uint16)(&a)) % 4);
于 2012-09-06T13:00:06.883 回答