Maker6 0 29 июля, 2005 Опубликовано 29 июля, 2005 · Жалоба Помогите разобраться с проблемой. Использую Atmega64L и CodeVision 1.24.2 (пробовал и 1.24.6). Наткнулся на некорректный возврат из некоторых своих функций. Причина видится в перетирании адреса возврата из функции (хранится в стеке) при выполнении участка кода кода внутри этой функции. Что-то вроде несимметричного использования PUSH-POP. Все это видно при отладке в AVRStudio по шагам и в симуляторе и через JTAG. Сначала грешил на конкретную библиотечную функцию - sscanf() и перестал ее использовать, но сечас наткнулся на что-то подобное и в другом месте. Есть подозрение что это как-то связано с размером кода - 30% от 64 к Буду благодарен за любые мысли на эту тему - проект почти готов, поджимает время, времени на освоение других компиляторов нет. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=user=- 0 4 августа, 2005 Опубликовано 4 августа, 2005 · Жалоба 1. Отключи оптимизацию 2. Не используй функции работающие напрямую с флеш памятью, например, putsf, lcd_putsf. Из-за них бывают глюки, например переменные меняют свои адреса. 3. Попробуй редактировать асм-код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 5 августа, 2005 Опубликовано 5 августа, 2005 · Жалоба Размер стека увеличьте. Функции типа printf, scanf жрут его немеряно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 11 августа, 2005 Опубликовано 11 августа, 2005 · Жалоба 2. Не используй функции работающие напрямую с флеш памятью, например, putsf, lcd_putsf. Из-за них бывают глюки, например переменные меняют свои адреса. вообще-то впервые слышу. putsf - это ж моя любимая функция :) можно пример глюка? Размер стека увеличьте. Функции типа printf, scanf жрут его немеряно Это да, нужно выставлять маркеры дна стека в свойствах проекта и мониторить на предмет их затирания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться