Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR настройка проекта
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
D!m@
привет.
Такая ситуация: поменял ноут , поставил винду, новый иар 6,30,1,3142, создал проект для at91sam7s256. отладка работает через jetlink5 все нормально.
Но проблема в том что прога в проце работает только через отладку, то есть надо загрузить и нажать "Run", если не нажмем не работает.
Если загрузили и нажали ран потом вышли с отладки - все нормально работает, потом сбрасываем по питанию прога не стартует.
Заходим в дебаг бес загрузки нажимаем ран прога начинает выполнятся.
Вчем может быть проблема? в какую сторону копать ? какие файлы вам дать посмотреть?

после перегруза вроде как и что то делает проц но непонятно что (вроде как замедлено выполняет программу а вроде как куски программы).
а если с дебагера нажать ран то все нормально.
Lotor
Проверьте в настройках проекта шьете ли Вы флеш (Debugger->Download галка Use flash loader(s)).
D!m@
Цитата(Lotor @ Jul 19 2012, 07:57) *
Проверьте в настройках проекта шьете ли Вы флеш (Debugger->Download галка Use flash loader(s)).

Нажмите для просмотра прикрепленного файла
Lotor
Вариантов много, например, неправильно составлено скрипт линкера или делаете ремап на неинициализируемую область рам. Проверьте, что происходит при сбросе питания. На какие адреса попадаете. И что по ним живет.

PS: Для начала возьмите готовый пример от иара для Вашего камня. Там будут несколько конфигураций - для отладки из озу, и боевой шьющийся во флеш. Сравните со своим и найдите отличия.
D!m@
Цитата(Lotor @ Jul 19 2012, 09:57) *
Вариантов много, например, неправильно составлено скрипт линкера или делаете ремап на неинициализируемую область рам. Проверьте, что происходит при сбросе питания. На какие адреса попадаете. И что по ним живет.

PS: Для начала возьмите готовый пример от иара для Вашего камня. Там будут несколько конфигураций - для отладки из озу, и боевой шьющийся во флеш. Сравните со своим и найдите отличия.


стартап использую иаровский.

проблему нашол.
в стандартной либе для адс от иар при инициализации есть вот такой код
Код
if( adcClock != (mckClock/((prescal+1)*2)) ) {
        TRACE_WARNING("User and calculated adcClocks are different : user=%d calc=%d\n\r",
            adcClock, (mckClock/((prescal+1)*2)));
}

так вот пот дебагером проходит нормально. Без дебага проц на нем вешается.
поменял TRACE_LEVEL на 0 стало все на свое место.

Можете объяснить почему printf вешает проца и почему пот дебагом все нормально
Lotor
Цитата(D!m@ @ Jul 19 2012, 11:36) *
стартап использую иаровский.
Можете объяснить почему printf вешает проца и почему пот дебагом все нормально

Так Вы сами можете раскрутить, что происходит при вызове printf. Загляните в файл trace.c, там будет функция fputc в которой вызывается через макрос TRACE_PutChar функция DBGU_PutChar. Ну а в ней вечные циклы ожидания:
Код
//------------------------------------------------------------------------------
/// Outputs a character on the DBGU line.
/// \note This function is synchronous (i.e. uses polling).
/// \param c  Character to send.
//------------------------------------------------------------------------------
void DBGU_PutChar(unsigned char c)
{
    // Wait for the transmitter to be ready
    while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
    
    // Send character
    AT91C_BASE_DBGU->DBGU_THR = c;
    
    // Wait for the transfer to complete
    while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
}

Вероятно в этом и проблема. Если нет - то имхо понятно, куда копать. Тем более есть отладчик.
D!m@
Цитата(Lotor @ Jul 19 2012, 11:19) *
Вероятно в этом и проблема. Если нет - то имхо понятно, куда копать. Тем более есть отладчик.

Ну это да. Так почему пот дебагом проходило?
Сергей Борщ
QUOTE (D!m@ @ Jul 19 2012, 10:36) *
поменял TRACE_LEVEL на 0 стало все на свое место.
То есть вместо того, чтобы исправить потенциально неправильный код, из-за которого выдавалось предупреждение, вы отключили предупреждение. Радикально. Главное, что "заработало".

QUOTE (D!m@ @ Jul 19 2012, 11:58) *
Ну это да. Так почему под дебагом проходило?
Не знаю как в новом, а в старом ИАРе в настройках линкера можно было указать "линковать with debug i/o modules", при этом вместо putchar подлинковывались функция, представлявшая из себя пустой цикл. В этот цикл отладчик ставил свою скрытую точку останова, при попадании в нее считывал из регистра параметра выводимый символ, печатал его в окно "I/O console" или подобное и прегружал в PC адрес следующей за циклом инструкции. Возможно у вас та же ситуация и ваш проц просто ждет, пока отладчик заберет у него выводимый символ.

P.S. А исходное предупреждение все же победите. Неспроста оно.
D!m@
Цитата(Сергей Борщ @ Jul 19 2012, 12:21) *
Не знаю как в новом, а в старом ИАРе в настройках линкера можно было указать "линковать with debug i/o modules", при этом вместо putchar подлинковывались функция, представлявшая из себя пустой цикл. В этот цикл отладчик ставил свою скрытую точку останова, при попадании в нее считывал из регистра параметра выводимый символ, печатал его в окно "I/O console" или подобное и прегружал в PC адрес следующей за циклом инструкции. Возможно у вас та же ситуация и ваш проц просто ждет, пока отладчик заберет у него выводимый символ.


а точнее где указывалось? скриншот моно? и в "I/O console" мне ничего не писало
Цитата(Сергей Борщ @ Jul 19 2012, 12:21) *
P.S. А исходное предупреждение все же победите. Неспроста оно.

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