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

Странная проблема с AvrStudio 4+WinAvr

Здравствуйте дорогие знатоки, очень надеюсь на ваш совет.

Недавно начал делать проект с Mega128 пишу на Си, компилирую WinAvr, затем открываю в AvrStudio 4, мега соединяется по JtagIce mkII, для пошаговой отладки жму F11 или F10. Сразу же столкнулся с проблемой, а именно:

1) локальные переменные не изменяются, а всегда равны 0 или 13107(касательно типа int), то есть любой цикл с ними виснет по той причине что переменная всегда постоянна

2)вызов функции приводит к зависанию программы. Это выглядит так - перемещаясь по телу функции её переменные не изменяются, параметр остаётся неизвестным (об этом сообщает watch), и дойдя до последней строчки прога зависает и через несколько секунд возвращается на точку входа, то есть на main().

То есть не понятно почему локальные переменные никак не реагируют на любые манипуляции с ними, ещё больше удивляет что параметры не передаются в функцию.

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

Заранее спасибо.

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


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

2 John23 - с mkII не работал, однако работал с чистым асйсом - всё шло как по маслу.

Ну для начала советовал бы проверить все настройки в портах там.... Потом посмотреть не коротит ли где чего.

 

А так из общих предположений - попробуйте сделать самый простенький проэкт в АВР студии - она винавр может подрубать - в настройках глянте. Для примера - отправка по усарт. Скомпильте и залейте - там есть кномка залит и начать отладку - ну и есно смотреите асм код - что у вас там творится...

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


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

Недавно начал делать проект с Mega128 пишу на Си, ...

2)вызов функции приводит к зависанию программы.....

 

Поищите в даташите волшебное слово: M103C

 

Анатолий.

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


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

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

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


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

2 aesok Вы имеете в виду совместимость с мега103, если так то как это может повлиять на работу программы?

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


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

2 aesok Вы имеете в виду совместимость с мега103, если так то как это может повлиять на работу программы?

 

Страницы 4-5 даташита. Или поиск по форуму, здесь это уже было с десяток раз.

 

Анатолий.

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


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

Совет от aesok очень важен. Студия не всегда правильно отражает периферию и в этом у Вас может быть проблема. Компилятор оптимизирующий (gcc), попробуйте убрать оптимизацию. Сам с этим сталкивался при эмуляции (именно 128 Меги).

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


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

попробуйте убрать оптимизацию.
При чем здесь оптимизация? Ключевое слово в комплект к M103C - стек

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


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

При чем здесь оптимизация? Ключевое слово в комплект к M103C - стек

Извините за глупые вопросы, просто вообще впервые начал работать с мк и средствами разработки для них, но все же не понимаю причём фьюз совместимости M103C если функции и локальные переменные не работают в принципе. Если в такой функции как...

void something (void)

{

int rez;

int a =2;

int b=3;

rez=a+b;

}

...a и b имеют постоянное значение 0 и зависает на последней строчке, то есть нет возможности пользоваться функциями, и прога зависает при отладке.

Пытался по совету выводить значения, например в порт С, чтобы посмотреть что туда выводится из локальных переменных

void naf(void)

{

unsigned int i;

unsigned char pr;

pr=3;

i=10;

DDRC=0x0F;

PORTC=pr;

PORTC=0x03;

PORTC=i;

pr=2;

PORTC=pr;

}

во всех строках, кроме PORTC=0x03 в порт выводится значение 59, хотя в вотче переменные i и pr всегда равны 15163. Запустил в седующий раз в порт нет присвоения вообще,хотя значение у них так же 15163, кроме опять же строки PORTC=0x03. Где логика. Не вижу закономерности в поведении и поэтому нет возможности разобраться самостоятельно в чем же загвоздка.

Всем признателен за помощь.

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


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

Извините за глупые вопросы, просто вообще впервые начал работать с мк и средствами разработки для них, но все же не понимаю причём фьюз совместимости M103C если функции и локальные

 

Пожалуйста, отключите совместимость с ATmega103 и не теряйте свое время понапрасну.

 

RAM по другим адресам расположена.

 

Анатолий.

Изменено пользователем aesok

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


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

Ключевое слово в комплект к M103C - стек

Сомневаюсь, что ключевое слово "стек" может быть причиной. (если бы речь шла об IAR'е тогда да, но здесь WinAvr).

В gcc стек ложится в конце памяти и теоретически (на маленьких программах) его всегда "за-глаза".

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


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

Сомневаюсь, что ключевое слово "стек" может быть причиной. (если бы речь шла об IAR'е тогда да, но здесь WinAvr).

В gcc стек ложится в конце памяти и теоретически (на маленьких программах) его всегда "за-глаза".

Напрасно сомневаетесь. У М128 и у М103 по разному размещается память, более того - она разного размера. У м128 4096 байт с 0x0100 по 0x10FF, а у м103 4000 байт с 0x0060 по 0x0FFF. Стек компилятор разместит в памяти, но для м128 - например вершина будет 0x10FF. А такого адреса в м103 просто нет.

Изменено пользователем Qwertty

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


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

Напрасно сомневаетесь. У М128 и у М103 по разному размещается память, более того - она разного размера. У м128 4096 байт с 0x0100 по 0x10FF, а у м103 4000 байт с 0x0060 по 0x0FFF. Стек компилятор разместит в памяти, но для м128 - например вершина будет 0x10FF. А такого адреса в м103 просто нет.

Насчет того, что у m103 и m128 по-разному размещена память сомнений у меня нет.

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

Хотя может быть я не так понял пост Сергея.

 

PS: спасибо, что помогли взглянуть на это с другой стороны :)

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


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

Хотя может быть я не так понял пост Сергея.
Qwerrty все правильно объяснил - в режиме M103C стек программы, скомпилированной для M128 оказывается в адресах, в которых в этом режиме физически нет памяти. Поэтому программа с хотя бы одним вызовом подпрограммы падает напрочь, а локальные переменные, расположенные на стеке, т.е. опять же там, где памяти нет - содержат мусор.

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


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

Кстати,интересно,почему атымель до сих пор не похерил этот фьюз?М103 снята с производства бог знает

когда и софт под нее вряд-ли сейчас актуален.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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