Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы при вызове printf_P (mega128, IAR 3.20d)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
_NB
Есть проэкт, в котором используется вызов 'printf_P'.
Зашиваю. Если включен режим совместимости с M103 - все работает.
Если его отключить - глючит при вызове 'printf_P' (глючит по разному - иногда рестарт, иногда что-то деляет, но не то что требуется).
Подскажите, куда копать (или где читать).
west329_
Попробуй запустить в дебагере и посмотреть может стек срывается, или увеличить его в 2 раза больше может здесь проблема.
Aesthete Animus
Цитата(_NB @ Jul 14 2008, 17:01) *
Если его отключить - глючит при вызове 'printf_P' (глючит по разному - иногда рестарт, иногда что-то деляет, но не то что требуется).

Про макрос PSTR случайно не забыли? 05.gif
_NB
Цитата(west329_ @ Jul 14 2008, 19:23) *
Попробуй запустить в дебагере и посмотреть может стек срывается,

Аппаратного отладчика у меня нет, так что посмотреть немогу.
Цитата
или увеличить его в 2 раза больше может здесь проблема.

Размером стека я уже игрался - не помогает.
При большом желании я бы мог уйти от использования printf_P, но меня смущает то, что работоспособность программы зависит от одного единственного fuse-бита совместимоcти с M103. Хотелось бы докопатся до причины - може еще что-то не так работает.

Цитата(Aesthete Animus @ Jul 14 2008, 20:26) *
Про макрос PSTR случайно не забыли? 05.gif

А можно по подробнее пожалуйста об этом ?
Aesthete Animus
Цитата(_NB @ Jul 14 2008, 21:31) *
А можно по-подробнее об этом ?

Эээ... нельзя... Ступил - не глянул сразу какой у Вас кмопилятор... laughing.gif В gcc он заставляет компилятор помещать строку в флешь.
Сергей Борщ
Цитата(_NB @ Jul 14 2008, 16:01) *
Зашиваю. Если включен режим совместимости с M103 - все работает.
А какой при этом проц (и файл .xcl) указан компилятору? В зависимости от этого бита изменяется положение ОЗУ в кристалле, и если линкеру указаны не те адреса - может быть все, что угодно. Сгенерите .map, посмотрите карту памяти - что куда у вас попадает.
_NB
Цитата(Сергей Борщ @ Jul 14 2008, 20:56) *
А какой при этом проц (и файл .xcl) указан компилятору?

Проц указан m128, и xcl-файл тоже для него.
Сергей Борщ
Цитата(_NB @ Jul 14 2008, 20:33) *
Размером стека я уже игрался - не помогает.
Недостаточно информации. Сколько используется на момент вызова printf_P, сколько вы выделили всего, сколько используют прерывания? Возможно, вы добавляли недостаточно.
_NB
Цитата(Сергей Борщ @ Jul 14 2008, 21:16) *
Недостаточно информации. Сколько используется на момент вызова printf_P,

Не знаю - нечем посмотреть.
Цитата
сколько вы выделили всего

Выделил 0x80.
Цитата
сколько используют прерывания?

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

Врядли (но я еще поиграюсь). Но для меня не понятно, почему в другом режиме все ОК.
defunct
Цитата(_NB @ Jul 14 2008, 21:32) *
Выделил 0x80.

Для проектов на базе m128 с использованием printf это смешная цифра.
Отводите под стек хотя бы 1KB.

Цитата
но меня смущает то, что работоспособность программы зависит от одного единственного fuse-бита совместимоcти с M103. Хотелось бы докопатся до причины - може еще что-то не так работает.

А что тут удивительного? m103 - это другой МК. Программа скомпилированная под m103 не должна работать на m128, если M103C не зашит.
_NB
Цитата(defunct @ Jul 14 2008, 23:27) *
Отводите под стек хотя бы 1KB.

А во это реально помогло - большое спасибо.

Цитата
А что тут удивительного? m103 - это другой МК. Программа скомпилированная под m103 не должна работать на m128, если M103C не зашит.

Программа изначально компилировалясь под m128, но работала только в режиме совместимости с M103.
Теперь работает в любом режиме.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.