Я пытаюсь изменить функцию, чтобы она была более подходящей для моих целей;
int getc0 (void)
{
while ( (U0LSR & 0x01) == 0 ); //Wait for character
return U0RBR;
}
Приведенный выше код заставляет функцию зависать до тех пор, пока символ не будет получен через последовательный порт 0, а затем вернет его. Я называл это с помощью цикла while, подобного этому;
while((str = getc0())!='\r'){
strcat(&route_buffer,&str);
}
Итак, теперь у меня есть ожидание, пока через последовательный порт не будет получена возвратная каретка и каждый символ, прежде чем он будет скопирован в буфер. Теперь моя проблема, у меня есть некоторые проблемы с чтением данных в данный момент, и я не могу определить, в чем проблема, в любом случае он не распознает возвратные каретки или новые строки правильно, но он улавливает какой-то вывод! Я знаю это, поскольку я сохраняю все в файл после его завершения, но для этого мне нужно иметь i! = 5 в цикле while и просто читать 5 символов. Если я сделаю это до 20, он снова зависнет и, похоже, больше ничего не читает (хотя я отправляю данные через uart)
Есть ли способ изменить его, чтобы читать в течение X времени, а затем продолжить выполнение остальной части функции?
Редактировать:
char route_data[512], route_buffer[200];
Изменить 2:
char *str;
Хорошо, вот функция, которую я написал для чтения при вводе пользователем;
char* readInput(void){
userinput = 0;
str = 0;
while((str=getc0())!='\r'){
strcat(&userinput,&str);
}
return &userinput;
}
и это так называется;
strcat(config.nodeid,readInput());
Это называется много, но это один из примеров того, как я это называю. Затем я вывожу это в файл, и он работает в 100% случаев.
Возможно, это поможет объяснить всю проблему; У меня есть плата ARM с беспроводным модулем, подключенным к последовательному порту (RX и TX). Вышеупомянутая функция readInput используется для чтения ввода от пользователя, подключившегося по telnet к беспроводному модулю, и позволяет плате ARM читать весь ввод от пользователя. Сейчас я пытаюсь прочитать ввод от беспроводного модуля после выполнения на нем команды. Используя оператор printf, я могу выполнять команды, помещая команду в оператор. Что мне нужно сделать, так это прочитать выходные данные беспроводного модуля, здесь у меня возникают трудности. Я получаю некоторый результат, но он очень ограничен и не соответствует ожиданиям, но это явно что-то из модуля.
str
? Как определяетсяroute_buffer
?str
должен бытьint
, чтобы быть совместимым с функциейgetc0()
, и вы не можете передатьint
вstrcat()
вот так! - person pmg   schedule 11.03.2011