|
Странная проблема с AvrStudio 4+WinAvr, При отладке с JtagIce mkII не работают функции и не изменяются локальн |
|
|
|
Jan 17 2008, 12:57
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 17-01-08
Пользователь №: 34 156

|
Здравствуйте дорогие знатоки, очень надеюсь на ваш совет. Недавно начал делать проект с Mega128 пишу на Си, компилирую WinAvr, затем открываю в AvrStudio 4, мега соединяется по JtagIce mkII, для пошаговой отладки жму F11 или F10. Сразу же столкнулся с проблемой, а именно: 1) локальные переменные не изменяются, а всегда равны 0 или 13107(касательно типа int), то есть любой цикл с ними виснет по той причине что переменная всегда постоянна 2)вызов функции приводит к зависанию программы. Это выглядит так - перемещаясь по телу функции её переменные не изменяются, параметр остаётся неизвестным (об этом сообщает watch), и дойдя до последней строчки прога зависает и через несколько секунд возвращается на точку входа, то есть на main(). То есть не понятно почему локальные переменные никак не реагируют на любые манипуляции с ними, ещё больше удивляет что параметры не передаются в функцию. Подскажите в чём я не прав и что там возможно в настройках не проставил, возможно надо поставить SP4), потому что никогда не встречался с такой немыслимой и глупой ошибкой, а победить её не могу. Заранее спасибо.
|
|
|
|
|
Jan 17 2008, 13:06
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(John23 @ Jan 17 2008, 15:57)  Недавно начал делать проект с Mega128 пишу на Си, ... 2)вызов функции приводит к зависанию программы..... Поищите в даташите волшебное слово: M103C Анатолий.
|
|
|
|
|
Jan 17 2008, 13:22
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 17-01-08
Пользователь №: 34 156

|
2 aesok Вы имеете в виду совместимость с мега103, если так то как это может повлиять на работу программы?
|
|
|
|
|
Jan 17 2008, 13:28
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(John23 @ Jan 17 2008, 16:22)  2 aesok Вы имеете в виду совместимость с мега103, если так то как это может повлиять на работу программы? Страницы 4-5 даташита. Или поиск по форуму, здесь это уже было с десяток раз. Анатолий.
|
|
|
|
|
Jan 18 2008, 09:08
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 17-01-08
Пользователь №: 34 156

|
Цитата(Сергей Борщ @ Jan 18 2008, 00:36)  При чем здесь оптимизация? Ключевое слово в комплект к 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. Где логика. Не вижу закономерности в поведении и поэтому нет возможности разобраться самостоятельно в чем же загвоздка. Всем признателен за помощь.
|
|
|
|
|
Jan 18 2008, 09:51
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(John23 @ Jan 18 2008, 12:08)  Извините за глупые вопросы, просто вообще впервые начал работать с мк и средствами разработки для них, но все же не понимаю причём фьюз совместимости M103C если функции и локальные Пожалуйста, отключите совместимость с ATmega103 и не теряйте свое время понапрасну. RAM по другим адресам расположена. Анатолий.
Сообщение отредактировал aesok - Jan 18 2008, 09:52
|
|
|
|
|
Jan 20 2008, 01:18
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(defunct @ Jan 20 2008, 03:55)  Сомневаюсь, что ключевое слово "стек" может быть причиной. (если бы речь шла об IAR'е тогда да, но здесь WinAvr). В gcc стек ложится в конце памяти и теоретически (на маленьких программах) его всегда "за-глаза". Напрасно сомневаетесь. У М128 и у М103 по разному размещается память, более того - она разного размера. У м128 4096 байт с 0x0100 по 0x10FF, а у м103 4000 байт с 0x0060 по 0x0FFF. Стек компилятор разместит в памяти, но для м128 - например вершина будет 0x10FF. А такого адреса в м103 просто нет.
Сообщение отредактировал Qwertty - Jan 20 2008, 01:19
|
|
|
|
|
Jan 20 2008, 11:34
|

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

|
Цитата(defunct @ Jan 20 2008, 04:12)  Хотя может быть я не так понял пост Сергея. Qwerrty все правильно объяснил - в режиме M103C стек программы, скомпилированной для M128 оказывается в адресах, в которых в этом режиме физически нет памяти. Поэтому программа с хотя бы одним вызовом подпрограммы падает напрочь, а локальные переменные, расположенные на стеке, т.е. опять же там, где памяти нет - содержат мусор.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|