UARTからシリアルデータをロードしてフラッシュに書き込むMCUアプリケーションを作成しています。私は "空のバッファに入ってくるデータを格納している間に2つのバッファを使用しています"(別名 "バッファトグル")方法論です。 UART受信は、「受信データを格納する」が適切なバイト位置にバッファに直接格納されるように書かれていました。各フラッシュセクタは512バイトの長さであるため、バッファの長さは512バイトです。ポインタアドレスにインデックスを使用すると、アドレスがゼロになる
インデックスを使用したかった:どのバッファがロードされているかを示す1つのインデックス。各バッファの最初のバイトのアドレスを持つ2つのインデックスの配列。着信バイトの実際のターゲット記憶アドレスのバッファ内のオフセット(0-511)を有するインデックスとを含む。コードは "どのバッファ?"を使うように設計されています。索引を使用してロードするバッファのアドレスを取得し、バッファ内のオフセットを追加します。これはすべて必要です。私は、バッファオーバーランを避けるために可能なすべてを行うために、パスの長さを短く保つことを試みています。
しかし、私はCで多少n00bです.2つのaFlashBuffahsを調べると、bFlashBuffah0 [512]とbFlashBuffah1 [512]という2つのバッファの正しいアドレスがわかりますが、以下のコードでは、 (aFlashBuffahInUse)を0にして、*(aFlashBuffahInUse + hBuffahByteInUse)という式を偽とする。
uint32_t fFlashEndingAddress = 0x2765A6;
uint8_t iBuffahInUse = 0;
uint16_t hBuffahByteInUse = 0;
uint16_t *aFlashBuffahInUse;
uint16_t *aFlashBuffahs[2];
uint8_t bFlashBuffah0[512];
uint8_t bFlashBuffah1[512];
aFlashBuffahs[0] = &bFlashBuffah0;
aFlashBuffahs[1] = &bFlashBuffah1;
iBuffahInUse = 0;
aFlashBuffahInUse = aFlashBuffahs[iBuffahInUse];
hBuffahByteInUse = 0;
for (i = 0; i < fFlashEndingAddress; i++) {
*(aFlashBuffahInUse+hBuffahByteInUse) = usart_getchar(UASRT_SERIAL);
誰かが私が誤りを犯した場所にいらっしゃいましたら、私はそれを感謝します。ティア!
実行時の問題を尋ねるとき、きれいにコンパイルするポストコードは短く、それでも問題が表示されます。問題がデータに関するものであれば、実際の入力データ(妥当なサンプル)と実際の出力データ(妥当なサンプル)を投稿します。 – user3629249
私はあなたのループ 'for(i = 0; i
あなたは何かを索引付けするために 'i'を使ったことさえありません。ループが何をしても、すべての着信バイトが同じ場所に書き込まれます。 –