| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Проблем апосле переноса кода из VC++ |
| Автор: 31337Ghost 12.2.2011, 22:41 | ||||
| Введение. Есть у меня устройство - ультразвуковой дальномер, он работает по шине rs485. Есть у меня преобразователь интерфейса - rs485<->USB. Есть к этому дальномеру пример софта, написанный на VC++, вот: http://www.robot-electronics.co.uk/files/srf48.zip. Под WinXP все работает как надо, показывает дистанцию безо всяких проблем. Переписал с горем пополам это на C++ в линуксе. Получился исходник следующего содержания:
До этого с нюансами языка программирования "СИ" ни разу не разбирался, и вот проблема. Представленный выше код даже рабоатет, но есть маленькая загвоздка - в выводе результатов. Вобщем что я вижу на выходе:
Т.е. я впринципе не вижу значения дистанции больше 127см. Увеличивая физически дистанцию между дальномером и объектом измерения я получаю на экран убывающие значения со знаком "-". На приведенном выводе с экрана дистанция физически увеличивалась до самого конца экранного вывода, т.е. в начале реальное расстояние было действительно 105 см, а в конце я отодвинул дальномер от объекта на расстояние около 165 см (что и ожидал увидеть на экране) |
| Автор: Фантом 12.2.2011, 22:50 |
| Во-первых, это код на C (а не на C++). Во-вторых, то, что Вы сейчас видите на экране - это нормальное поведение этой программы. В стандарте языка C значения типа char меняются в диапазоне от -127 до 127. Дело не в "особенности C++ вкупе с линуксом", а в "особенностях" (это если деликатно выражаться) компиляторов от Microsoft, в которых стандарты нарушаются чуть менее чем везде. Сделать надо следующее: везде, где встречается объявление чего-то типа char, заменить тип на unsigned char. |
| Автор: 31337Ghost 13.2.2011, 02:08 |
| Спасибо большое за помощь. Проблему именно такого характера я и ожидал. Дело в том что я с языком СИ не знаком совсем, чего-то делал в Дельфи, ПХП, Перл - с этими языками хоть какое-то представление есть, а вот СИ(++) полный 0. Но ИМХО это как "левел ап" в понимании програмизма, углубление в низкоуровнивоость, если можно так выразиться. Спасибо. Буду "грызть" дальше. |