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

 
 
> Отладка в KEIL. Как вычислить, откуда в переменной появляются данные?
zheka
сообщение Aug 13 2013, 02:47
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Есть функция
Код
OW_ReceiveByte()
{   unsigned char count, data;
count = 8;
  do
   {
    data >>= 1;
    if(OW_ReadBit()) data |= 0x80;
   }
  while(--count);

  return data;
}


каким-то непостижимым образом в data изначально появляются данные. Каждый раз одинаковые. Даже если ничего не писать в data, а по выходу из функции прочитать то, что она возвращает.

Как вычислить с помощью отладчика?
Контроллер - STM32F103VGT6

Сообщение отредактировал zheka - Aug 13 2013, 02:48
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Aug 13 2013, 14:25
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а еще

Код
int data
int * data_adr = &data;


всегда считал что все переменные до инициализации содержат мусор, не знал про статик и глобальные. А кто их нулит? Ведь есть системы где память после загрузки не 0, процы на плисах к примеру, 9 Кбайтные блоки памяти у них не нулятся при старте, даже если просить...

а еще 16 битные переменные в 8 битных контроллерах умеют во время прерывания на половину изменятся, не говорят про 32 и 64 битные переменные... Что же вы теперь программу будете всю отладчиком шерстить? Лучше уже писать безопасный код ИМХО.

Доказательство лучше проверки...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 13 2013, 20:53
Сообщение #3


Гуру
******

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



QUOTE (Golikov A. @ Aug 13 2013, 16:25) *
всегда считал что все переменные до инициализации содержат мусор, не знал про статик и глобальные. А кто их нулит?
Обычно это специальный так называемый стартап код, который выполняется перед запуском main(). В стандарте сказано просто что-то вроде "переменные обнуляются". Чем и как - вроде бы не оговаривается.

QUOTE (Golikov A. @ Aug 13 2013, 16:25) *
Что же вы теперь программу будете всю отладчиком шерстить? Лучше уже писать безопасный код ИМХО.
Если бы все были этакими сферическими программистами в вакууме, способными писать код сразу без ошибок... Часто проход по шагам небольшого кусочка кода, исполняющегося не так, как ожидал автор, позволяет за один проход найти ошибку. Все остальные методы отладки, включая медитацию над исходником, требуют гораздо больше времени.


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- zheka   Отладка в KEIL. Как вычислить, откуда в переменной появляются данные?   Aug 13 2013, 02:47
- - VAI   data у Вас - локальная переменная, то место ей выд...   Aug 13 2013, 03:52
- - andrewlekar   Вроде как по стандарту локальные переменные должны...   Aug 13 2013, 04:12
- - toweroff   А если непосредственно по вопросу темы, то в окне ...   Aug 13 2013, 04:31
- - Golikov A.   А если совсем по теме то КЕИЛ может делать такие ч...   Aug 13 2013, 04:42
|- - toweroff   Цитата(Golikov A. @ Aug 13 2013, 08:42) Т...   Aug 13 2013, 04:49
- - zheka   Цитатаstatic unsigned char data; КодНо если у вас ...   Aug 13 2013, 05:25
- - richie   zheka, возьмите в привычку: объявил переменную, пр...   Aug 13 2013, 05:27
- - zheka   Цитатаzheka, возьмите в привычку: объявил переменн...   Aug 13 2013, 05:36
|- - Raven   Цитата(zheka @ Aug 13 2013, 09:36) То ест...   Aug 13 2013, 05:59
- - andrewlekar   ЦитатаПри изучении чужих программу меня сложилось ...   Aug 13 2013, 05:56
- - Сергей Борщ   QUOTE (andrewlekar @ Aug 13 2013, 06:12) ...   Aug 13 2013, 05:59
- - zheka   ЦитатаА проблемы не было. У вас 8-битовая переменн...   Aug 13 2013, 07:50
- - редактор   При входе в отладчик в кейле в менюшке (View кажет...   Aug 13 2013, 07:52
|- - zheka   Цитата(редактор @ Aug 13 2013, 11:52) При...   Aug 13 2013, 12:09
|- - Golikov A.   Цитата(Сергей Борщ @ Aug 14 2013, 00:53) ...   Aug 14 2013, 03:43
- - toweroff   Что есть startup? кусок кода, который, обычно: 1. ...   Aug 13 2013, 21:19


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

 


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


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