C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Building ....при помощи лома. Вариации на тему COM порта от дилетанта  (Прочитано 7052 раз)
Мурман
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 4


« : 17 марта 2015, 22:10:05 »

По ходу жизни требуется сделать инструментарий для демонстрации локальной задачи на микроконтроллере. Время для этого толком не дается. Да и начальство считает, что задача пустяковая..

За основу взяты исходники известного проекта. Мне нужно вывести на экран два ответа от внешнего устройства в бинарном формате. Я поставил заглушку на порт и предполагал увидеть все, что я отправляю в качестве запроса. Добавил свою функцию преобразования байта (а он всего один в 1 сек!!!), но к своему удивлению увидел только старший ниббл кода, а второй байт только сердцевину от ожидаемых 8ми знаков. Ради интереса решил глянуть младший ниббл, вернув из функции указатель &sss[4]. Такое вообще не понравилось программе,-полное молчание в окне!!!!  ....Отладчик не пускает в просмотр буфера.

Прошу высказать мнение. Где же причина такого поведения?  Благодарю заранее всех отозвавшихся! Строит глазки  Раньше на Builder C++ не пробовал экспериментировать и потому не ограничивайтесь в выражениях.... Непонимающий

Вот такой экспромт!!!
Записан
Мурман
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 4


« Ответ #1 : 17 марта 2015, 22:14:51 »

Вот тут исходные проекты.
Записан
OVE
Участник
**

Сказали спасибо: +67/-0
Offline Offline

Сообщений: 72


« Ответ #2 : 18 марта 2015, 11:26:29 »

Вы из функции char* convertcode (unsigned  char * str) возвращаете указатель на локальную структуру (return &sss[0]), содержимое которой, после выхода из функции будет неопределенным. Попробуйте объявить char  sss[9] как глобальную структуру, или, как вариант, при объявлении внутри функции укажите static char  sss[9].
Записан
Мурман
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 4


« Ответ #3 : 19 марта 2015, 20:26:15 »

Вы из функции char* convertcode (unsigned  char * str) возвращаете указатель на локальную структуру (return &sss[0]), содержимое которой, после выхода из функции будет неопределенным. Попробуйте объявить char  sss[9] как глобальную структуру, или, как вариант, при объявлении внутри функции укажите static char  sss[9].

Спасибо за наводку. Я об этом знал, но что-то подумал, что раз работа через указатели, то проблемы не будет.

В итоге все заработало!  Немного и зменил тип одной из переменных.  Можно глянуть рабочий проект для освоения... =)
Записан
Мурман
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 4


« Ответ #4 : 24 марта 2015, 21:48:04 »

Вот еще один рабочий вариант(под другую задачу)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: