реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> IAR настройка проекта
D!m@
сообщение Jul 18 2012, 19:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



привет.
Такая ситуация: поменял ноут , поставил винду, новый иар 6,30,1,3142, создал проект для at91sam7s256. отладка работает через jetlink5 все нормально.
Но проблема в том что прога в проце работает только через отладку, то есть надо загрузить и нажать "Run", если не нажмем не работает.
Если загрузили и нажали ран потом вышли с отладки - все нормально работает, потом сбрасываем по питанию прога не стартует.
Заходим в дебаг бес загрузки нажимаем ран прога начинает выполнятся.
Вчем может быть проблема? в какую сторону копать ? какие файлы вам дать посмотреть?

после перегруза вроде как и что то делает проц но непонятно что (вроде как замедлено выполняет программу а вроде как куски программы).
а если с дебагера нажать ран то все нормально.

Сообщение отредактировал D!m@ - Jul 18 2012, 20:08
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jul 19 2012, 04:57
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Проверьте в настройках проекта шьете ли Вы флеш (Debugger->Download галка Use flash loader(s)).


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
D!m@
сообщение Jul 19 2012, 06:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Цитата(Lotor @ Jul 19 2012, 07:57) *
Проверьте в настройках проекта шьете ли Вы флеш (Debugger->Download галка Use flash loader(s)).

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jul 19 2012, 06:57
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



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

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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
D!m@
сообщение Jul 19 2012, 07:36
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Цитата(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 вешает проца и почему пот дебагом все нормально
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jul 19 2012, 08:19
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(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);
}

Вероятно в этом и проблема. Если нет - то имхо понятно, куда копать. Тем более есть отладчик.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
D!m@
сообщение Jul 19 2012, 08:58
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



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

Ну это да. Так почему пот дебагом проходило?

Сообщение отредактировал IgorKossak - Jul 19 2012, 13:47
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 19 2012, 09:21
Сообщение #8


Гуру
******

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



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. А исходное предупреждение все же победите. Неспроста оно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
D!m@
сообщение Jul 19 2012, 15:16
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Цитата(Сергей Борщ @ 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. А исходное предупреждение все же победите. Неспроста оно.

посмотрел зразу же. означает что точно с заданной частотой частоту АЦП настроить не удалось. но это не критично

Сообщение отредактировал D!m@ - Jul 19 2012, 15:18
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 22:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016