我正在尝试将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进行操作。 非常感谢你的帮助。
答案 0 :(得分:2)
尝试:
strcpypgm2ram(string, name);
和
printf("ATNAME%s", string);
声明数组时
char string[27] = {0};
然后变量 string 引用数组的第一个元素的地址,并在声明参数如
时int setBluetoothName (static const rom char *name)
然后name指的是字符串所在的地址。
添加&在这些中,您将获得包含数据地址的变量的地址。