私は約2ヶ月間8051をプログラミングしており、C言語の初心者は多少です。私は現在、フラッシュメモリを読み書きし、消去し、分析するためにフラッシュメモリを使っています。私は現時点で書き込みフェーズに取り組んでおり、必要な作業の1つはアドレスの場所を指定し、その場所にデータを埋め込み、次の場所にインクリメントして補完的なデータで埋めることです。私が最後に達するまで、そうしていきます。C - C言語で18ビットを増やす8051
私のジレンマは遊ぶべき18のアドレスビットを持っていて、現在これらの18ビットのために3バイトが割り当てられています。とにかく、これらの18ビットをint
またはunsigned int
に組み込み、それを増やすことはできますか?または、最初のバイトをインクリメントする唯一のオプションです。次に、そのバイトが0x00
に次のバイトをインクリメントしてロールオーバーすると、次のバイトがインクリメントされます。
私は現在持っている:
void inc_address(void)
{
P6=address_byte1;
P7=address_byte2;
P2=address_byte3;
P5=data_byte;
while(1)
{
P6++;
if(P6==0x00){P7++;}
else if(P7==0x00){P2++;}
else if(P2 < 0x94){break;} //hex 9 is for values dealing with flash chip
P5=~data_byte;
}
}
ビットフィールドはありますか?そう、8051は、CT境界でほとんど拭き取られ、平らな金魚よりもRAMが少なくなりましたが、ビットフィールドint varに24ビットのうち18ビットを使用できる場合は、それが可能です... – ThingyWotsit
あなたのインクリメントは欠陥があります例えば、P6とP7が255で始まっている場合は、P6とP7 = 1の両方がゼロのままでなければなりません。ループは必要ありません。キャリーテストは入れ子にする必要があります。 – Clifford
アドレス変数をインクリメントしてポートに割り当て、ポート値をインクリメントするのではなく、アドレス変数をポートに割り当てる方がはるかに優れています。 – Clifford