为什么ROM String没有正确传递?

时间:2013-01-31 01:24:15

标签: c microchip mplab c18

我正在尝试将String传递给函数。我已经在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进行操作。 非常感谢你的帮助。

enter image description here

1 个答案:

答案 0 :(得分:2)

尝试:

strcpypgm2ram(string, name);

printf("ATNAME%s", string);

声明数组时

char string[27] = {0};

然后变量 string 引用数组的第一个元素的地址,并在声明参数如

int setBluetoothName (static const rom char *name)

然后name指的是字符串所在的地址。

添加&在这些中,您将获得包含数据地址的变量的地址。