2

私はマイクロコントローラーで作業しており、次の作業コードを取得しました。

.h ファイル

const static  uint8_t state0[] = "Off";
const static  uint8_t state1[] = "ROMLoad";
const static  uint8_t state2[] = "RAMLoad";
const static  uint8_t state3[] = "PacketSend";
const static  uint8_t state4[] = "Process";

.c ファイル

        switch (coapapp_vars.state) {
        case 0:
            packetfunctions_reserveHeaderSize(msg, sizeof(state0) - 1);
            memcpy(&msg->payload[0], &state0, sizeof(state0) - 1);
            break;
        case 1:
            packetfunctions_reserveHeaderSize(msg, sizeof(state1) - 1);
            memcpy(&msg->payload[0], &state1, sizeof(state1) - 1);
            break;
        case 2:
            packetfunctions_reserveHeaderSize(msg, sizeof(state2) - 1);
            memcpy(&msg->payload[0], &state2, sizeof(state2) - 1);
            break;
        case 3:
           packetfunctions_reserveHeaderSize(msg, sizeof(state3) - 1);
           memcpy(&msg->payload[0], &state3, sizeof(state3) - 1);
           break;
        case 4:
            packetfunctions_reserveHeaderSize(msg, sizeof(state4) - 1);
            memcpy(&msg->payload[0], &state4, sizeof(state4) - 1);
            break;
        }

切り替え後に memcpy を呼び出して、このコードを変更してファイルを短くする (アップロードされるコードを減らす) 必要があります。そのため、ケースを使用してポインターを埋めることにより、.h から正しい値を指すポインターを使用する必要があります。残念ながら、私はそれを機能させることができませんでした。そのため、* または & を使用する必要がある場所、またはまったく使用しない必要がある場所がまったくわかりません。さまざまな方法を試しましたが、どれも成功しませんでした。

質問は次のとおりです。char 配列の 1 つを指す変数を初期化するために、どのタイプの uint8_t (uint8_t/uint8_t*/uint8_t**) を使用しますか? その (ポインター) 変数 (ptr = state/ptr = &state/ptr=&state[0]/...) を入力するにはどうすればよいですか? memcpy 関数 (ptr/&ptr/*ptr/&(*ptr)/...) で (ポインター) 変数を使用するにはどうすればよいですか?

サイズに自分で設定した変数を使用する必要があることは承知しています。

必要に応じて詳細情報: このコードは OpenWSN で使用されます。IoT デバイス/マイクロコントローラーを使用しています。COAP 実装を使用して情報をブラウザーに送信しています。

編集: reserveHeaderSize 関数と memcpy 関数の両方がスイッチの後に配置されます。正解で指摘されているように、これは非常に単純ですが、私は小さなばかげたエラーを見落としていました. ダープ

4

1 に答える 1