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

Вопросы по Eclipse, CDT, Zylin embedded CDT

Подскажите, как прикрутить к эклипсу компилятор от iar?

http://www.iar.com/website1/1.0.1.0/79/1/

http://electronix.ru/forum/index.php?showtopic=34843

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


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

Ни в одной из ссылок нет ответа на заданный вопрос.

Существует eclipse plugin for IAR Embedded Workbench AVR, но его рассылают только тем у кого есть лицензия.

Может кто-то поделится?

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


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

Ни в одной из ссылок нет ответа на заданный вопрос.

Существует eclipse plugin for IAR Embedded Workbench AVR, но его рассылают только тем у кого есть лицензия.

Может кто-то поделится?

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

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


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

Всем, привет!

Перехожу с IAR-а на связку Eclipse + WinAVR. Пока возникло пару вопросов, может кто подскажет что нибудь.

 

1) Как в Eclipse установить "ключевые слова пользователя" (в IAR-е user keywords), необходимо для подсветки своих переименованных типов данных.

я просто уже привык писать вместо "unsigned char" Byte, Eclipse естественно его не "подсвечивает".

 

2) Есть обработчик прерываний из обработчика прерываний происходит вызов функции, как сказать компилятору что бы в обработчик прерываний сохранял только те регистры которые действительно используются (как в самом, так и во внешней функции), а не все? (уровень оптимизации менял, не помогло).

{Отвечаю сам себе. Вероятнее всего сохранение всех регистров происходит по причине нахождения функции во внешнем файле, который при компиляции собирается отдельно. В связи с чем новый вопрос, я использую плагин AVR-Eclipse и не понял пока как указать ему собрать всё вместе, а не по отдельности. В IAR-е такого не было в пределах проекта проблем не наблюдалось...}

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


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

на форуме бывает aesok, который большой спец по WinAvr.

Посмотрите документацию по gcc на предмет __attribute(naked)

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


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

Посмотрите документацию по gcc на предмет __attribute(naked)

Ага, будет Вам и кофе, и какао с чаем. Вот тута обговаривали:

 

http://electronix.ru/forum/index.php?showt...56739&st=-5

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


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

Пользуюсь Eclipse ganymede 3.4.0 + WinAVR

Проблема в следующем:

при использовании в программе константы, объявленной в мейк-файле, например:

 

в мейк-файле:

было #F_CPU = 18432000

поменял на F_CPU=10260000

 

в .cpp-файле:

#if F_CPU<15000000UL

...

#endif

 

эклипса почти постоянно тупит и при наведении курсора на F_CPU показывает одно из предыдущих значений этой константы на котором она (эклипса) почему-то "зациклилась" (ее особенно любимые значения 8000000 и 18432000, но наверное это случайность), изредка значение по непонятным законам обновляется. Соответственно весь код между #if и #endif затеняется как выключенный.

Но, компилится все как надо!

Все бы - ничего, но текст программы становится нечитабельным.

Может кто подскажет как это побороть?

В качестве временной меры переопределяю F_CPU в .cpp-файле тем же значением, что и в мейк-файле, но душа требует красоты...

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


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

2) Есть обработчик прерываний из обработчика прерываний происходит вызов функции, как сказать компилятору что бы в обработчик прерываний сохранял только те регистры которые действительно используются (как в самом, так и во внешней функции), а не все? (уровень оптимизации менял, не помогло).

 

Компилятор не знает какие регистры используются в вызываемой функции, и поэтому сохраняет все call-used регистры в обработчике прерывания если в нем есть вызов функции. Вызываемая функция может находиться в другом модуле, и компилятор не может про нее ничего знать. Даже если функции находятся в одном файле они компилируются независимо.

 

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

 

Есть одна очень простая аксиома: Обработчик прерывания должен выполнять только МИНИМАЛЬНО НЕОБХОДИМЫЕ действия и выполняться за как можно меньшее время. В идеале только работа с портами ввода вывода, обновление буферов с полученными/выведенными данными и установка флагов. Никакой обработки данных в прерывании!! Подготавливаться и обрабытываться данные далжны вне обработчика прерывания. Помните пока работает обработчик прерывания, все другие запросы прерываний обрабатываться не могут, и если обработчик выполняется очень долго, то может возникнуть ситуация когда эти запросы будут пропущены.

 

:bb-offtopic: Книжки по программированию в которых даны примеры программ с нарушением этой аксиомы нужно сразу на костер.

 

Вызываю функцию в обработчике прерывания Вы скорее всего нарушаете эту аксиому.

 

Анатолий.

Изменено пользователем aesok

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


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

эклипса почти постоянно тупит и при наведении курсора на F_CPU показывает одно из предыдущих значений этой константы на котором она (эклипса) почему-то "зациклилась"

Я думаю, она помнит значение с последней компиляции

А вот зачем постоянно менять F_CPU я, чесгря, не понимаю :cranky:

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


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

1) Как в Eclipse установить "ключевые слова пользователя" (в IAR-е user keywords), необходимо для подсветки своих переименованных типов данных.

я просто уже привык писать вместо "unsigned char" Byte, Eclipse естественно его не "подсвечивает".

Preferences \ C/C++ \ Editor \ Syntax coloring - очень широкие возможности по настройке подстветки.

 

Тока, надеюсь, у вас не так: #define Byte unsigned char ? ;)

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


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

Компилятор не знает какие регистры используются в вызываемой функции, и поэтому сохраняет все call-used регистры в обработчике прерывания если в нем есть вызов функции. Вызываемая функция может находиться в другом модуле, и компилятор не может про нее ничего знать. Даже если функции находятся в одном файле они компилируются независимо.

 

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

 

Есть одна очень простая аксиома: Обработчик прерывания должен выполнять только МИНИМАЛЬНО НЕОБХОДИМЫЕ действия и выполняться за как можно меньшее время. В идеале только работа с портами ввода вывода, обновление буферов с полученными/выведенными данными и установка флагов. Никакой обработки данных в прерывании!! Подготавливаться и обрабытываться данные далжны вне обработчика прерывания. Помните пока работает обработчик прерывания, все другие запросы прерываний обрабатываться не могут, и если обработчик выполняется очень долго, то может возникнуть ситуация когда эти запросы будут пропущены.

 

:bb-offtopic: Книжки по программированию в которых даны примеры программ с нарушением этой аксиомы нужно сразу на костер.

 

Вызываю функцию в обработчике прерывания Вы скорее всего нарушаете эту аксиому.

 

Анатолий.

Спасибо за совет, но я уже разобрался сам.

Насчет аксиомы, не буду спорить, скажу просто что Вы не правы, так как все "эти" аксиомы нужно рассматривать в контексте конкретной задачи.

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


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

Насчет аксиомы, не буду спорить, скажу просто что Вы не правы, так как все "эти" аксиомы нужно рассматривать в контексте конкретной задачи.

 

Следование этой аксиоме уменьшает количество рассматриваемых контекстов при решении задачи.

 

Анатолий.

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


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

Никакой обработки данных в прерывании!!

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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