Перейти к содержанию
    

Помогите начать с IAR

Гость Гость
Никак не могу установить iar ew 4.11. Клизма есть. Сгенерированные коды менеджер ключей воспринимает и пишет, что всё о'кей, но компилятор при построении проекта выдаёт 'fatal error. there is not valid license". Для evaluation версии я правда подставлял коды не те, которые мне прислали (я вообщ не посылал запрос), а нашёл на каком-то форуме. Может быть проблема в этом? Ошибка выдавалась и на evaluation версии. Может быть, у кого-нибудь есть хороший дистрибутив какой-нибудь версии и evaluation коды для него?

 

Я сталкивался уже с проблемой установки IAR'а и успешно ее решил тупым переводом времени. Вообще я только начинаю с ним работать и у меня версия 2.28А. (старовато, но на этом писалась программа, которую мне необходимо переделать, а использовать более новую версию боюсь, да и нет ее у меня). У меня сейчас возник другой вопрос. Мне нужно отладить программу, написанную в Си, а С-Spy соглашается показывать ее только в ассемблере. Есть ли какой-нибудь способ просмотреть пошаговое выполнение программы на Сях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В опциях компилятора надо установить генерирование отладочной информации.

В опциях линкера - установить формат выходного файла debug или ubrof, расширение при этом будет d90 или dbg.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

существует ли возможность в IAR через C-Cpy отлаживать USART?

Конечно, все доступно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а где можно прочитать про это? В руководстве нашел про случай с использованием 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а где можно прочитать про это? В руководстве нашел про случай с использованием stdin, stdout. Но использую фрагмент предложенный в даташите...

Извините, про что ЭТО? Я немного перестал понимать, о чем речь.

У Вас данные не отправляются в порт?

Можно поставить точку останова и убедиться, что контроллер выполняет эту команду.

Про конфигурацию порта и прерываний, я думаю, Вы знаете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

про что ЭТО?

Про отладку USART. Реальным устройством данные и посылаются, и принимаются. А как в дебаггере этот момент можно отследить/сэмулировать, если работаю не через print-ы в stdin, а сразу в регистры пихаю данные?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про отладку USART. Реальным устройством данные и посылаются, и принимаются. А как в дебаггере этот момент можно отследить/сэмулировать, если работаю не через print-ы в stdin, а сразу в регистры пихаю данные?

Поставьте брейкпоинт прямо на команду "пихания данных в регистр". Если USART сконфигурирован верно, то после выполнения этой команды очередной символ уйдет в линию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

симовол уходит без проблем, но при этом не выставляется флаг TXC и при попытке передачи следующего стоим на

while ( !( UCSRA & (1<<UDRE)) );

до тех пор, пока руками 1 не поставить. После передачи пары строк забываешь, чего хотел... :07:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня такой вопрос: почему
Недостаточно информации. А без галочки обработчик работает? Перестает работать только этот обработчик или вся остальная программа тоже? В любом случае ответ один - потому что у вас где-то ошибка в программе. Предполагаю, что разрешается какое-то из прерываний, для которого не прописан обработчик. Попав в него выполняется RETI, но флаг не снимается (например, прерывание АЦП, UDRE, RXC и подобные), и после reti выполняется вход в этот обработчик снова, программа циклится. А таймер3 имеет приоритет ниже и до него очередь не доходит. Или вектор на ваш обработчик прерывания от TIMER3 расположен по неправильному адресу. И если раньше при переходе по вектору процессор натыкался на опкод 0xFFFF, исполнял его и попадал таки в ваш обработчик, то теперь он сразу попадает на RETI и до вашего обработчика не добирается.

P.S. На всяки случай - когда вы разберетесь, в чем дело - напишите пожалуйста сюда, чтобы другие не наступали на такие же грабли или, если все же наступят, найдя это сообщение могли в комплекте получить и ответ. Даже если ответ будет из серии "сам дурак".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to Сергей Борщ. Пока проблема решается тем, что галочка "Initialize unused interrupt vectors with RETI instructions" не ставится. Но мне всё равно интересно, почему так происходит. Разберусь - обязательно напишу.
Я бы написал на неиспользуемые вектора ловушки и дергал в них в цикле разными свободными ногами. Или если свободная нога одна, то в разных ловушках с разной частотой а еще нагляднее - скважностью. Таким образом определил бы, не попадает ли программа в какой-либо из неиспользуемых векторов и если попадает - то в какой. Дальше смотрел бы в исходнике работу с соотвествующей периферией и разбирался бы, почему вызывается прерывание. Ибо если такое случается - это вылезет каким-нибудь очень неприятным глюком в самый неподходящий момент. Это даже очень хорошо, что вы обнаружили такое непонятное поведение сами и сейчас, а не заказчик во время приемо-сдаточных испытаний:smile3046: Но если вы не локализуете ее, может случиться такое: :maniac:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня проверил - и правда программа заходит, как минимум, ещё в одно прерывание, которое я запрещал. Видимо "просто" в результате какого либо бага моя программа нечаянно его разрешает. Будем копать дальше.

Сергей Борщ, спасибо за совет )).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никак не могу найти способ доступа из функций, написаных на Си, к переменным, размещёным в области кода программы.

То есть, есть массив, объявленый как :

__flash char SomeArray[] = { 1, 2 };

и функция:

void DoSmth( char *Arr ){

}

Что нужно сделать, чтобы, код DoSmth( SomeArray ); нормально работал ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...