реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> (РЕШЕНО) Keil не правильно работает с дефолтным параметром
RadiatoR
сообщение May 17 2016, 12:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Всем доброго дня.
Столкнулся с непоняткой. Был такой же момент когда писал на C#. Сейчас написал также, но не тут то было. Кеил видимо делает что-то не так...
Есть следующий код (с++):
Код
class ST7070
  {
      byte Position;
  public:
      void CursorSet(byte Position);
  };
  
  int main()
  {
      ST7070 LCD;
      LCD.CursorSet(42);
      while(1);
  }
  
  void ST7070::CursorSet(byte Position)
  {
      //cout<<Position; //Юзал что бы проверить в студии. В ней полет нормальный.
      this->Position=Position;
  }


Так вот, при создании класса переменная Position равна абы чему. При вызове функции что бы я не вписывал в аргумент, при входе в функцию он считает, что я в него вписал то же значение "абыкакое". Точнее я думаю при входе в обработчик он не правильно подцепляет ссылку на переменную.
Попробовал в студии, там оно нормально работает. То есть при входе в функцию параметр Position равен тому, что я вписал при вызове и потом он присваивает это значение переменной Position. Как таковой проблемы нет - переименую да и все дела, но сам факт...
Если я не ошибаюсь правильно должно работать как в студии.

Кто что думает? Косяк?

Сообщение отредактировал ЯadiatoR - May 17 2016, 13:04
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 17 2016, 12:44
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Если переменная Position используется одновременно и в прерывании и во вне его, то нужно было её объявлять так:
Код
     volatile byte Position;


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение May 17 2016, 13:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



ээ не понял где здесь прерывания?

Был мой косяк был глубже, но при отладке кеил действительно отображает не то, что на самом деле.
Поход по коду асмы обнаружил траблу.
Можно закрыть
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 17 2016, 13:09
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ЯadiatoR @ May 17 2016, 15:41) *
Так вот, при создании класса переменная Position равна абы чему.
Правильно. Для ее инициализации придуман список инициализации в конструкторе.
QUOTE (ЯadiatoR @ May 17 2016, 15:41) *
При вызове функции что бы я не вписывал в аргумент, при входе в функцию он считает, что я в него вписал то же значение "абыкакое". Точнее я думаю при входе в обработчик он не правильно подцепляет ссылку на переменную.
Какой обработчик? И что говорит листинг?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение May 17 2016, 13:21
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Абы чему - я ее и не инициализировал. И в конструкторе тоже. Мне не это нужно было.

Листинг асмы все длелает правильно. Я имею ввиду сам кеил он не всегда правильно отображает. То есть если мы в вышенаписанном коде вызовем функцию, то ее параметр будет отображаться значением "абыкаким", хотя должден иметь значение 42. Тут сам кеил недописан.

При отладке я на этом и поролся, а проблема была глубже в коде.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 17 2016, 13:23
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ЯadiatoR @ May 17 2016, 16:05) *
ээ не понял где здесь прерывания?
В вашем посте есть слова про обработчик, вот я и подумал, что имеется ввиду обработчик прерывания...
Изъясняйтесь пожалуйста яснее.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016