関数に文字列を渡そうとしています。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 を使用しています。ご助力ありがとうございます。