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

 
 
> Вопрос по WinAVR
Jagupop
сообщение May 15 2007, 05:08
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 15-05-07
Пользователь №: 27 727



Сразу оговорюсь - я только учусь!!! Взял книгу Ю.Шпака Программирование на языке C для AVR и PIC микроконтроллеров. В придачу дан диск, на котором WINAVR версии 20040404 и примеры программ. Я некоторые пробовал и проверял на ATTINY2313. Но этот WINAVR не поддерживает такой процессор. Пришлось программы делать для AT90S2313 и прошивать ими тини. Но когда я поставил на комп. поддерживающий тини WINAVR 20060421, у меня перестали компилироваться программы, работавшие со старой версией WINAVR. Не знаю, что и делать. Уж не возвращаться же к старой версии! Подвкажите, спецы! Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
the_last_dreamer
сообщение Sep 20 2010, 20:21
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 20-09-10
Из: Киев
Пользователь №: 59 612



Доброго времени суток!
Имеется такой простенький код:
CODE
#include <avr/io.h>
#include <math.h>

double b=15.485;
double tmpVar;

int main (void)
{
tmpVar = floor(b); //берем целую часть от 15.485, т.е. 15
while (1)
{
char i=1;
}
return (0);
}


Компилируется нормально. Олаживаю в avr studio. При выполнении команды tmpVar = floor(b) переменной tmpVar должно быть присвоено значение 15, но вместо этого выполнение передается в цикл, и в окне Watch в качестве значения переменной tmpVar появляется "Not in Scope", а на следующем шаге обратно из цикла и при этом в окне watch появляется значение переменной tmpVar равное 15. И далее выполнение программы продолжается правильно. Похожая программа написанная в codeVision AVR в avr studio работает корректно.

Такой код работает правильно:
CODE
#include <avr/io.h>
#include <math.h>

double tmpVar;

int main (void)
{
tmpVar = floor(15.485);
while (1)
{
char i=1;
}
return (0);
}


Подскажите, пожалуйста, в чем может быть ошибка.

Сообщение отредактировал the_last_dreamer - Sep 20 2010, 20:23
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 21 2010, 11:27
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(the_last_dreamer @ Sep 20 2010, 23:21) *
Такой код работает правильно:

Правильно работают оба кода.
В чём смысл представленной программы при наружном наблюдении за её поведением? Крутиться в бесконечном цикле.
При этом внутренние детали поведения, никак не проявляющиеся снаружи, компилятор имеет право выоптимизировать начисто. Во втором случае он всего лишь поленился это сделать.
Объявите tmpVar как volatile, сказав тем компилятору, что он не имеет права предполагать что-то по поводу видимости этой переменной из внешнего по отношению к программе мира, и наслаждайтесь.

Или присвойте значение этой переменной какому-то порту микроконтроллера - нужно дать понять компилятору, что результат floor() кому-то нужен. Хотя и в этом случае он имеет право пробросить результат floor() прямо в порт, исключив из программы переменную tmpVar как не имеющую значения со стороны внешнего наблюдателя.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jagupop   Вопрос по WinAVR   May 15 2007, 05:08
- - haker_fox   Цитата(Jagupop @ May 15 2007, 14:08) Сраз...   May 15 2007, 05:18
- - Jagupop   Ну вот простая программка мигания светодиодом по п...   May 15 2007, 05:29
|- - haker_fox   Слегка изменил, компиляция проходит нормально. В В...   May 15 2007, 05:51
- - big256   В новом ВинАвре используется ISR вместо INTERRUPT ...   May 15 2007, 05:42
- - Jagupop   Спасибо. Сажусь "ковыряться" дальше. Ещ...   May 15 2007, 07:14
|- - manul78   Цитата(Jagupop @ May 15 2007, 15:14) Спас...   May 15 2007, 15:57
||- - hd44780   Привет всем. Использую WinAVR 20070122. Проект ис...   May 16 2007, 03:38
||- - aesok   В С файле есть строка #include <avr/interrupt.h...   May 16 2007, 04:46
||- - hd44780   Цитата(aesok @ May 16 2007, 10:46) В С фа...   May 16 2007, 05:51
|- - Сергей Борщ   Цитата(Jagupop @ May 15 2007, 14:14) В ка...   May 16 2007, 03:35
- - hd44780   Работает нормально. Проблемы с раскодировкой сигн...   May 16 2007, 10:38
- - mdmitry   >Использую WinAVR 20070122. >SIGNAL ( SIG_IN...   May 16 2007, 17:13
- - WHALE   ну дык посмотрите ассемблерные листинги.   Sep 21 2010, 07:26
- - skyled   а если выполнить присвоение перед выполнением функ...   Sep 21 2010, 09:29
- - the_last_dreamer   >ну дык посмотрите ассемблерные листинги. К сож...   Sep 21 2010, 20:40
- - the_last_dreamer   Извините за беспокойство, но она все-таки не работ...   Sep 22 2010, 20:30
|- - Сергей Борщ   Цитата(the_last_dreamer @ Sep 22 2010, 23...   Sep 22 2010, 22:04
- - the_last_dreamer   Спасибо, Сергей Борщ! В регистр теперь записыв...   Sep 23 2010, 19:31
- - the_last_dreamer   Возникла ещё такая проблема. Хотелось бы отладить ...   Oct 9 2010, 13:14
- - the_last_dreamer   Кажется проблема разрешилась - поместил в одну пап...   Oct 9 2010, 14:22
- - дымок   Добрый день. По понятным, я думаю, причинам пришло...   Jan 22 2011, 15:27
- - ReAl   WinAWR-20100110/doc/avr-libc/avr-libc-user-manual....   Jan 22 2011, 19:31
- - дымок   Цитата(ReAl @ Jan 23 2011, 00:31) WinAWR-...   Jan 23 2011, 07:27


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

 


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


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