AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

На GCC проканает (с варнингом). А вот на g++ уже нет - будет ошибка.
Реклама
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

У меня вообще нет никаких ошибок и предупреждений. Avr studio 5. Тип будет int,спасибо
Контактная информация:
Реклама
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Подскажите еще такой момент: переменная объявлена как uint8_t standby. В обработке прерывания по нажатии кнопки,она становится 1. А в основном коде если stantby!=0 исполняется программа,типа выключатель. Так вот,иногда при включении питания эта самая stantby становится 1,и код исполняется когда не нужно, ради эксперимента я даже запрещал прерывания результат тот же. Проблему удалось решить, инициализировав переменную нулем. При включении uint8_t stantby =0; Я так и не понял,по каким причинам ее значение при включении было не 0. И может ли содержатся мусор в переменных при включении?
Последний раз редактировалось vovik15 Чт сен 13, 2018 08:21:50, всего редактировалось 1 раз.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

В неинициализированных переменных при включении может быт что угодно.
Никакая контра не уйдёт от нас
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Так что же получается,все переменные обязательно чем то инициализировать? Мне казалось что должен быть 0 при объявлении переменной
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

без реального кода однозначно на ваш первый впрос ответить нельзя.
по умолчанию автоматически обнуляются все static переменные и все глобальные переменные. что там у вас наделано - не известно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Сообщение ozonn »

[uquote="vovik15",url="/forum/viewtopic.php?p=3455900#p3455900"]Так что же получается,все переменные обязательно чем то инициализировать?[/uquote]
не обязательно
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Ну так моя переменная глобальная. Но почему то при включении она была не 0. Нулем она стала только после инициализации. И вообще я с этим gcc уже много граблей пособрал
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

vovik15 писал(а):Нулем она стала только после инициализации. И вообще я с этим gcc уже много граблей пособрал
не верю! © Станиславский

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="vovik15",url="/forum/viewtopic.php?p=3455921#p3455921"]Ну так моя переменная глобальная. Но почему то при включении она была не 0. Нулем она стала только после инициализации. И вообще я с этим gcc уже много граблей пособрал[/uquote]
Вы действительно уверены в том, что обнаружили нарушение стандарта C в компиляторе?

Код: Выделить всё

If an object that has static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these rules.
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

For ( unsigned int x=60000; x>0; x--) {} и что вы думаете? Компилятор просто выкинул этот цикл из кода
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="vovik15",url="/forum/viewtopic.php?p=3455933#p3455933"]For ( unsigned int x=60000; x>0; x--) {} и что вы думаете? Компилятор просто выкинул этот цикл из кода[/uquote]
Совершенно логично с его стороны :)
Пользуйтесь или библиотечными функциями, или, если время задержки нужно очень точное, ассемблерной вставкой.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

vovik15, ну хоть бы nop-чик какой в тело цикла вставили, чтобы он хоть что-то "полезное" делал :)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

nop-чик тоже надо уметь вставить так, чтобы компилятор его не выкинул :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

vovik15 писал(а):For ( unsigned int x=60000; x>0; x--) {} и что вы думаете? Компилятор просто выкинул этот цикл из кода
for ( volatile unsigned int x=60000; x>0; x--) {}
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 3389
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

[uquote="vovik15",url="/forum/viewtopic.php?p=3455933#p3455933"]For ( unsigned int x=60000; x>0; x--) {} и что вы думаете? Компилятор просто выкинул этот цикл из кода[/uquote]

Код: Выделить всё

For (volatile unsigned int x=60000; x>0; x--);
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Ладно, я уже понял что надо было ноп вставить. Посоветуйте пожалуйста что почитать по jtag, хочу освоить этот метод отладки.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3389
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

JTAG отладчик есть? На Али он около 100$ стоит.
Не все МК поддерживают JTAG. Если не ошибаюсь, только модели от 40 выводов и больше.
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

я заказал на али jtag ice отладчик за 500 рублей, он поддерживает mega16.32.64.128 буду его мучать. Еще вопрос,если локальная переменная не проинициализированна,в ней будет мусор?
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

vovik15 писал(а):если локальная переменная не проинициализированна,в ней будет мусор?
да
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

Вернуться в «AVR»