Перейти к содержанию
    

(РЕШЕНО) Keil не правильно работает с дефолтным параметром

Всем доброго дня.

Столкнулся с непоняткой. Был такой же момент когда писал на 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

     volatile byte Position;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Был мой косяк был глубже, но при отладке кеил действительно отображает не то, что на самом деле.

Поход по коду асмы обнаружил траблу.

Можно закрыть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так вот, при создании класса переменная Position равна абы чему.
Правильно. Для ее инициализации придуман список инициализации в конструкторе.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

При отладке я на этом и поролся, а проблема была глубже в коде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ээ не понял где здесь прерывания?
В вашем посте есть слова про обработчик, вот я и подумал, что имеется ввиду обработчик прерывания...

Изъясняйтесь пожалуйста яснее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...