2

関数に文字列を渡そうとしています。C18 の RAM/ROM 文字列について多くのことを読みましたが、私のコードは問題ないように見えますが、機能していません。私の機能は次のようなものです:

int setBluetoothName (static const rom char *name){
    unsigned int n = 0, k = 0;
    char string[27] = {0};    // ATNAME + 20 caracteres de nombre + EOF
    char command[27] = {0};
    _bit state = USART_INT;

    // Deshabilito interrupciones del USART
    USART_INT_DISABLE;
    strcpypgm2ram(&string, &name);

    // Numero de caracteres del nombre
    for (; string[n] != 0x00 ; ++n);
    if(n > 19) return LENGTH_ERROR;     // si me pase de 20 letras es muy largo

    // Configuro el nombre del Bluetooth
    printf("ATNAME%s", &string);

そして、私はこの方法でそれを使用します:

setBluetoothName("Brazo");

Proteus では、文字 'B' のみが渡されていることがわかります。ROM 文字列を RAM にコピーすると、単に混乱します (添付の図を参照)。printf() の出力は ATNAME のみで、文字列は出力されません。

私は C18 v4.40 と MPLABX v1.41 を使用しています。ご助力ありがとうございます。

ここに画像の説明を入力

4

1 に答える 1

2

試す:

strcpypgm2ram(string, name);

printf("ATNAME%s", string);

配列を宣言するとき

char string[27] = {0};

次に、変数文字列は配列の最初の要素のアドレスを参照し、次のようなパラメーターを宣言すると

int setBluetoothName (static const rom char *name)

name は、文字列が配置されているアドレスを参照します。

これらに & を追加すると、データのアドレスを含む変数のアドレスが取得されます。

于 2013-01-31T01:30:31.713 に答える