1

motorola 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 に答える