Форум программистов, компьютерный форум CyberForum.ru

Writefile() & String - В контроллер приходит не то, что было отправлено - C++

Восстановить пароль Регистрация
 
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
04.08.2014, 01:09     Writefile() & String - В контроллер приходит не то, что было отправлено #1
Почему отправляю в com порт "Device?\n" а в котроллер приходит "ppDevice?\n" ????
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Com::Send_package(String str)
{
char *ptr=str.c_str(), c; uint8_t write_len=0; unsigned long cap;
while(c!='\n')
     {
      c=*ptr++;
      write_len++;
     }
if(!WriteFile(COMport, str.c_str(), write_len, &cap, NULL))error=10;
}
 
c->Send_package("Device?\n");
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2014, 01:09     Writefile() & String - В контроллер приходит не то, что было отправлено
Посмотрите здесь:

String & Series C++
C++ cannot convert parameter 1 from 'int' to 'std::string &'
C++ Что значат && и ||
C++ как правильно понять тип bool ? bool true(const string &str) и что дает это значение ?
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
04.08.2014, 09:07     Writefile() & String - В контроллер приходит не то, что было отправлено #2
На вскидку - у контроллера такой бзик.
Попробуйте в начале послать ему пару нулей, или ff
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
04.08.2014, 11:57     Writefile() & String - В контроллер приходит не то, что было отправлено #3
Во-первых непонятно зачем этот гемор, когда можно:
C++
1
if(!WriteFile(COMport, str.c_str(), str.Length(), &cap, NULL))error=10;
Во-вторых поставьте прослушку ком порта и поглядите что действительно там передается - на чьей стороне косяк.
orange_fox
 Аватар для orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
04.08.2014, 20:35     Writefile() & String - В контроллер приходит не то, что было отправлено #4
Цитата Сообщение от Korbofos Посмотреть сообщение
char *ptr=str.c_str(), c;
Что делает эта строчка?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
05.08.2014, 08:24     Writefile() & String - В контроллер приходит не то, что было отправлено #5
Цитата Сообщение от orange_fox Посмотреть сообщение
Что делает эта строчка?
Возьму на себя смелость ответить за тс:
объявляет и инициализирует символьный указатель и не инициализированную переменную.

Да. Стиль во многом уродский, к примеру, в двенадцатой строке c содержит уже какой-то меотд, хотя только что это была пусть и локальная но переменная. Но вопрос тс-то не в этом.
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
05.08.2014, 16:00  [ТС]     Writefile() & String - В контроллер приходит не то, что было отправлено #6
Разобрался в чём косяк! Когда в ручную через терминал отправлял команды, всё работало хорошо. А когда программа отправляла команды, появлялись "левые" символы. Оказалось косяк в ардуине. После открытия порта необходимо подождать пару секунд
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
05.08.2014, 16:09     Writefile() & String - В контроллер приходит не то, что было отправлено #7
Korbofos, Sleep воткните.

Хотя это костыль. Так не должно быть.
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
05.08.2014, 16:57  [ТС]     Writefile() & String - В контроллер приходит не то, что было отправлено #8
Так и сделал Sleep. Ардуинка как я понял, при открытии порта перезапускается. Приходиться ждать, иначе глючит. Уменьшил ожидание до 300 миллисекунд работает нормально, меньше ерундит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2014, 08:30     Writefile() & String - В контроллер приходит не то, что было отправлено
Еще ссылки по теме:

Поясните синтаксис - ( std::string& x: bar ) C++
(const string &) C++
В чём разница между возвратом "string" и "const string&" & C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
06.08.2014, 08:30     Writefile() & String - В контроллер приходит не то, что было отправлено #9
Korbofos, может она что-нибудь шлет, когда перезагрузится? Типа там Ready какой-нибудь.
Должно что-то быть. Прослушайте порт - поищите.
Yandex
Объявления
06.08.2014, 08:30     Writefile() & String - В контроллер приходит не то, что было отправлено
Ответ Создать тему
Опции темы

Текущее время: 18:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru