我正在用C编程Arduino板,因此除非我与外部终端窗口进行串行通信,否则无法打印。
因此我开发了一个printAll方法:
void printAll(char * str) {
int i;
for(i = 0; str[i] != 0x00; i++) {
PSerial_write('0', str[i]);
}
}
我也有一个变量:
char input[12];
input[0] = 'h';
input[1] = 'e';
input[2] = 'l';
input[3] = 'p';
我想要做的是将此数组传递给printAll方法(但printAll方法接受char *)。
我试过这样做:
printAll(&input[0]);
但没有打印出来!但当我单步执行并打印输入数组的每个字符时,我得到:
help<0><0><0><0><0><0><0><0>
任何人都可以解释为什么这不起作用?谢谢!
***注意:printAll方法在使用时完全正常:
printAll("Hello World!");
整体而言,我的代码如下:
char input[12];
int main(void) {
start();
}
void start() {
while(1) {
printAll("Please enter in a command!\r");
printAll("Please type 'help' for instructions!\r");
char input[12];
readInput(input);
printAll("Trying to print the char array stuff....\r");
printAll(input);
if (input == "help") printHelp();
else if (input == "set") {
if (setStatus) printSet();
else printAll("Controller not authorized to print.\n");
}
else if (input == "set on") setStatus = true;
else if (input == "set off") setStatus = false;
else if (input == "set hex=on") hexFormat = true;
else if (input == "set hex=off") hexFormat = false;
else if (input == "set tlow") tlow = getNumber(input);
else if (input == "set thigh") thigh = getNumber(input);
else if (input == "set period") period = getNumber(input);
x_yield();
}
}
void readInput() {
char c = PSerial_read('0'); //reads character from user
while (c != '\r') {
//while the character isnt 'enter'
input[currIndex] = c;
c = PSerial_read('0');
currIndex++;
}
int y;
for(y = 0; y < 12; y++) {
PSerial_write('0', input[y]);
//go through input and print each character
}
PSerial_write('0', '\r');
//add new line to print log
currIndex = 0; //reset for next input (overwrites current stuff)
}
现在无论我输入什么,它只是要求更多输入,并且在输入方法返回后永远不会打印出数组。
答案 0 :(得分:2)
您发送的代码是混合的,无法编译。代码表明你有两个输入变量,一个是全局的,一个是局部的。 readInput()读取全局值,printAll()读取本地值(反之亦然,具体取决于更改的代码)。删除不应该使用的全局输入,并将相同的输入变量传递给readInput()和printAll()。
答案 1 :(得分:1)
我对Arduinos一无所知,所以请耐心等待。
在readInput
函数中,您没有包含input
数组的任何参数,这意味着您正在使用在代码开头声明的全局变量这个功能。但是,在start
函数中,您声明了另一个input
数组并将其传递给readInput
,即使该函数没有接受任何参数。
这个新input
实际上会隐藏&#34;声明它的函数的全局input
变量。这意味着start
使用此本地input
,即使readInput
使用全局input
。换句话说,你实际上使用了两个不同的变量,而不是一个。
要解决此问题,请尝试删除char input[12]
中的start
,或删除代码开头的全局char input[12]
,并将其添加为{{1}的参数}:readInput
。
注意:即使您没有在void readInput(char * input)
中包含任何参数,如果传递参数,C编译器也不会抱怨,除非您放置readInput
在括号中:void
。