|
|
  |
Вопросы по Eclipse, CDT, Zylin embedded CDT, предлагаю обсуждать тут, может потом FAQ выжмем |
|
|
|
Mar 8 2009, 21:42
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578

|
Подскажите, как прикрутить к эклипсу компилятор от iar?
--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх! В. Кипелов, Беги за солнцем.
|
|
|
|
|
Mar 10 2009, 13:32
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578

|
Цитата(gotty @ Mar 9 2009, 11:41)  Ни в одной из ссылок нет ответа на заданный вопрос. Существует eclipse plugin for IAR Embedded Workbench AVR, но его рассылают только тем у кого есть лицензия. Может кто-то поделится?
--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх! В. Кипелов, Беги за солнцем.
|
|
|
|
|
Mar 11 2009, 08:58
|

Частый гость
 
Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109

|
Всем, привет! Перехожу с IAR-а на связку Eclipse + WinAVR. Пока возникло пару вопросов, может кто подскажет что нибудь.
1) Как в Eclipse установить "ключевые слова пользователя" (в IAR-е user keywords), необходимо для подсветки своих переименованных типов данных. я просто уже привык писать вместо "unsigned char" Byte, Eclipse естественно его не "подсвечивает".
2) Есть обработчик прерываний из обработчика прерываний происходит вызов функции, как сказать компилятору что бы в обработчик прерываний сохранял только те регистры которые действительно используются (как в самом, так и во внешней функции), а не все? (уровень оптимизации менял, не помогло). {Отвечаю сам себе. Вероятнее всего сохранение всех регистров происходит по причине нахождения функции во внешнем файле, который при компиляции собирается отдельно. В связи с чем новый вопрос, я использую плагин AVR-Eclipse и не понял пока как указать ему собрать всё вместе, а не по отдельности. В IAR-е такого не было в пределах проекта проблем не наблюдалось...}
|
|
|
|
|
Mar 11 2009, 18:03
|

Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250

|
Пользуюсь 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-файле тем же значением, что и в мейк-файле, но душа требует красоты...
--------------------
- Бендер, ты же робот, зачем тебе пить пиво? - Незачем! Я могу бросить в любой момент!
|
|
|
|
|
Mar 13 2009, 07:28
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(ZiB @ Mar 11 2009, 11:58)  2) Есть обработчик прерываний из обработчика прерываний происходит вызов функции, как сказать компилятору что бы в обработчик прерываний сохранял только те регистры которые действительно используются (как в самом, так и во внешней функции), а не все? (уровень оптимизации менял, не помогло). Компилятор не знает какие регистры используются в вызываемой функции, и поэтому сохраняет все call-used регистры в обработчике прерывания если в нем есть вызов функции. Вызываемая функция может находиться в другом модуле, и компилятор не может про нее ничего знать. Даже если функции находятся в одном файле они компилируются независимо. Вы можете сделать вызываемую функцию инлайн-функцией, и тогда ее код будет вставлен в обработчик и будут сохраняться только необходимые регистры. Есть одна очень простая аксиома: Обработчик прерывания должен выполнять только МИНИМАЛЬНО НЕОБХОДИМЫЕ действия и выполняться за как можно меньшее время. В идеале только работа с портами ввода вывода, обновление буферов с полученными/выведенными данными и установка флагов. Никакой обработки данных в прерывании!! Подготавливаться и обрабытываться данные далжны вне обработчика прерывания. Помните пока работает обработчик прерывания, все другие запросы прерываний обрабатываться не могут, и если обработчик выполняется очень долго, то может возникнуть ситуация когда эти запросы будут пропущены.  Книжки по программированию в которых даны примеры программ с нарушением этой аксиомы нужно сразу на костер. Вызываю функцию в обработчике прерывания Вы скорее всего нарушаете эту аксиому. Анатолий.
Сообщение отредактировал aesok - Mar 13 2009, 07:48
|
|
|
|
|
Mar 13 2009, 08:47
|

Частый гость
 
Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109

|
Цитата(aesok @ Mar 13 2009, 13:28)  Компилятор не знает какие регистры используются в вызываемой функции, и поэтому сохраняет все call-used регистры в обработчике прерывания если в нем есть вызов функции. Вызываемая функция может находиться в другом модуле, и компилятор не может про нее ничего знать. Даже если функции находятся в одном файле они компилируются независимо. Вы можете сделать вызываемую функцию инлайн-функцией, и тогда ее код будет вставлен в обработчик и будут сохраняться только необходимые регистры. Есть одна очень простая аксиома: Обработчик прерывания должен выполнять только МИНИМАЛЬНО НЕОБХОДИМЫЕ действия и выполняться за как можно меньшее время. В идеале только работа с портами ввода вывода, обновление буферов с полученными/выведенными данными и установка флагов. Никакой обработки данных в прерывании!! Подготавливаться и обрабытываться данные далжны вне обработчика прерывания. Помните пока работает обработчик прерывания, все другие запросы прерываний обрабатываться не могут, и если обработчик выполняется очень долго, то может возникнуть ситуация когда эти запросы будут пропущены.  Книжки по программированию в которых даны примеры программ с нарушением этой аксиомы нужно сразу на костер. Вызываю функцию в обработчике прерывания Вы скорее всего нарушаете эту аксиому. Анатолий. Спасибо за совет, но я уже разобрался сам. Насчет аксиомы, не буду спорить, скажу просто что Вы не правы, так как все "эти" аксиомы нужно рассматривать в контексте конкретной задачи.
|
|
|
|
|
Mar 13 2009, 10:00
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(ZiB @ Mar 13 2009, 11:47)  Насчет аксиомы, не буду спорить, скажу просто что Вы не правы, так как все "эти" аксиомы нужно рассматривать в контексте конкретной задачи. Следование этой аксиоме уменьшает количество рассматриваемых контекстов при решении задачи. Анатолий.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|