|
|
  |
Помогите начать с IAR, Помогите начать с IAR |
|
|
Guest_Гость_*
|
Mar 29 2007, 19:37
|
Guests

|
Цитата(Guest_Виктор_* @ Mar 3 2006, 17:06)  Никак не могу установить iar ew 4.11. Клизма есть. Сгенерированные коды менеджер ключей воспринимает и пишет, что всё о'кей, но компилятор при построении проекта выдаёт 'fatal error. there is not valid license". Для evaluation версии я правда подставлял коды не те, которые мне прислали (я вообщ не посылал запрос), а нашёл на каком-то форуме. Может быть проблема в этом? Ошибка выдавалась и на evaluation версии. Может быть, у кого-нибудь есть хороший дистрибутив какой-нибудь версии и evaluation коды для него? Я сталкивался уже с проблемой установки IAR'а и успешно ее решил тупым переводом времени. Вообще я только начинаю с ним работать и у меня версия 2.28А. (старовато, но на этом писалась программа, которую мне необходимо переделать, а использовать более новую версию боюсь, да и нет ее у меня). У меня сейчас возник другой вопрос. Мне нужно отладить программу, написанную в Си, а С-Spy соглашается показывать ее только в ассемблере. Есть ли какой-нибудь способ просмотреть пошаговое выполнение программы на Сях?
|
|
|
|
|
Sep 7 2007, 06:36
|

Местный
  
Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714

|
а где можно прочитать про это? В руководстве нашел про случай с использованием stdin, stdout. Но использую фрагмент предложенный в даташите Код void USART_Transmit( char & data ) { PORTD |= (1 << PD3); /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ); /* Put data into buffer, sends the data */ UDR = data; };
Сообщение отредактировал aspID - Sep 7 2007, 06:37
|
|
|
|
|
Sep 7 2007, 07:04
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(aspID @ Sep 7 2007, 09:36)  а где можно прочитать про это? В руководстве нашел про случай с использованием stdin, stdout. Но использую фрагмент предложенный в даташите... Извините, про что ЭТО? Я немного перестал понимать, о чем речь. У Вас данные не отправляются в порт? Можно поставить точку останова и убедиться, что контроллер выполняет эту команду. Про конфигурацию порта и прерываний, я думаю, Вы знаете.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 7 2007, 07:13
|

Местный
  
Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714

|
Цитата про что ЭТО? Про отладку USART. Реальным устройством данные и посылаются, и принимаются. А как в дебаггере этот момент можно отследить/сэмулировать, если работаю не через print-ы в stdin, а сразу в регистры пихаю данные?
|
|
|
|
|
Sep 7 2007, 07:30
|

Местный
  
Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714

|
симовол уходит без проблем, но при этом не выставляется флаг TXC и при попытке передачи следующего стоим на Код while ( !( UCSRA & (1<<UDRE)) ); до тех пор, пока руками 1 не поставить. После передачи пары строк забываешь, чего хотел...
|
|
|
|
|
Sep 27 2007, 04:43
|
Группа: Новичок
Сообщений: 11
Регистрация: 9-09-07
Пользователь №: 30 404

|
У меня такой вопрос: почему у меня, если поставить галочку General Options->System->Initialize unused interrupt vectors with RETI instructions не работает прерывание по переполнению TIMER3 ?
|
|
|
|
|
Sep 27 2007, 09:34
|

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

|
Цитата(Unknown_User @ Sep 27 2007, 07:43)  У меня такой вопрос: почему Недостаточно информации. А без галочки обработчик работает? Перестает работать только этот обработчик или вся остальная программа тоже? В любом случае ответ один - потому что у вас где-то ошибка в программе. Предполагаю, что разрешается какое-то из прерываний, для которого не прописан обработчик. Попав в него выполняется RETI, но флаг не снимается (например, прерывание АЦП, UDRE, RXC и подобные), и после reti выполняется вход в этот обработчик снова, программа циклится. А таймер3 имеет приоритет ниже и до него очередь не доходит. Или вектор на ваш обработчик прерывания от TIMER3 расположен по неправильному адресу. И если раньше при переходе по вектору процессор натыкался на опкод 0xFFFF, исполнял его и попадал таки в ваш обработчик, то теперь он сразу попадает на RETI и до вашего обработчика не добирается. P.S. На всяки случай - когда вы разберетесь, в чем дело - напишите пожалуйста сюда, чтобы другие не наступали на такие же грабли или, если все же наступят, найдя это сообщение могли в комплекте получить и ответ. Даже если ответ будет из серии "сам дурак".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 28 2007, 07:28
|
Группа: Новичок
Сообщений: 11
Регистрация: 9-09-07
Пользователь №: 30 404

|
to Сергей Борщ. Пока проблема решается тем, что галочка "Initialize unused interrupt vectors with RETI instructions" не ставится. Но мне всё равно интересно, почему так происходит. Разберусь - обязательно напишу.
|
|
|
|
|
Sep 28 2007, 20:28
|

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

|
Цитата(Unknown_User @ Sep 28 2007, 10:28)  to Сергей Борщ. Пока проблема решается тем, что галочка "Initialize unused interrupt vectors with RETI instructions" не ставится. Но мне всё равно интересно, почему так происходит. Разберусь - обязательно напишу. Я бы написал на неиспользуемые вектора ловушки и дергал в них в цикле разными свободными ногами. Или если свободная нога одна, то в разных ловушках с разной частотой а еще нагляднее - скважностью. Таким образом определил бы, не попадает ли программа в какой-либо из неиспользуемых векторов и если попадает - то в какой. Дальше смотрел бы в исходнике работу с соотвествующей периферией и разбирался бы, почему вызывается прерывание. Ибо если такое случается - это вылезет каким-нибудь очень неприятным глюком в самый неподходящий момент. Это даже очень хорошо, что вы обнаружили такое непонятное поведение сами и сейчас, а не заказчик во время приемо-сдаточных испытаний  Но если вы не локализуете ее, может случиться такое:
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 1 2007, 10:02
|
Группа: Новичок
Сообщений: 11
Регистрация: 9-09-07
Пользователь №: 30 404

|
Сегодня проверил - и правда программа заходит, как минимум, ещё в одно прерывание, которое я запрещал. Видимо "просто" в результате какого либо бага моя программа нечаянно его разрешает. Будем копать дальше. Сергей Борщ, спасибо за совет )).
|
|
|
|
|
Oct 3 2007, 10:20
|
Группа: Новичок
Сообщений: 11
Регистрация: 9-09-07
Пользователь №: 30 404

|
Никак не могу найти способ доступа из функций, написаных на Си, к переменным, размещёным в области кода программы. То есть, есть массив, объявленый как : __flash char SomeArray[] = { 1, 2 }; и функция: void DoSmth( char *Arr ){ } Что нужно сделать, чтобы, код DoSmth( SomeArray ); нормально работал ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|