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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Странное поведение 5.10 при компиляции в C++
alexander55
сообщение Sep 14 2007, 11:59
Сообщение #1


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Добрый день!
Обнаружил следующую неприятность в IAR версии 5.10.
Привожу вариант, который каждый может попробовать.

IAR С-примерчик с одним прерыванием по таймеру при выборе языка C успешно компилируется и в ARM и Thumb (и в RAM и во Flash).
Если выбрать любую вариацию C++ объектные файлы образуются, а на этапе сборки говорит, что
нет определения для вектора IRQ_ISR_Handler.
Привожу текст для RAM (под Flash аналогично) .

Building configuration: TimerInt - JLINK_RAM
Updating build tree...
Linking
Error[Li005]: no definition for "IRQ_ISR_Handler" [referenced from C:\ARM_Projects\Education\
IAR-LPC-214X\TimerInt\Project\JLINK_RAM\Obj\lpc2xxx_cstartup.o]
Error while running Linker

Total number of errors: 1
Total number of warnings: 0

Какие есть мысли.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 14 2007, 12:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alexander55 @ Sep 14 2007, 14:59) *
Какие есть мысли.

Мысли обычные - соглашения о преобразовании имен в С++ другие. IRQ_ISR_Handler() должен быть объявлен, как сишный, иначе из ASM черт ногу сломит вызывая его.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 14 2007, 14:39
Сообщение #3


Гуру
******

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



Цитата(alexander55 @ Sep 14 2007, 14:59) *
Привожу текст для RAM (под Flash аналогично) .
....
Какие есть мысли.
Текст видать кто-то покоцал. А мысль одна: переводя слова zltigo extern "C" __arm __irq void IRQ_ISR_Handler()
{
......
}
А чтобы компилилось в обоих режимах -
Код
#include <yvals.h>
_EXTERN_C  __arm __irq void IRQ_ISR_Handler()
{
......
}
_END_EXTERN_C
насчет yvals.h - возможно в 5.10 он имеет другое название, но в предыдущих он подключается автоматически через любой из библиотечных заголовочных файлов (через тот же stdint.h)


--------------------
На любой вопрос даю любой ответ
"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
alexander55
сообщение Sep 17 2007, 05:03
Сообщение #4


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Удалось решить проблему следующим образом.
В startup и С модулях заменил
IRQ_ISR_Handler на IRQ_Handler.
После этого компилится нормально и С и в EC++ и в EEC++.
Я просмотрел примеры для других ARM uC там везде irq_handler и fiq_handler. У LPC (автор Стадомир Бонев - кажется, он с Olimex) часть irq_isr_handler, fiq_isr_handler, часть irq_handler, fiq_handler.
В документации IAR везде одназначно рекомендуется irq_handler, fiq_handler.

PS. Поздравляю всех с победой нашей сборной на eurobasket-2007.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2007, 05:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alexander55 @ Sep 17 2007, 08:03) *
В startup и С модулях заменил
IRQ_ISR_Handler на IRQ_Handler.

Полная ерунда. Можете хоть горшком называть - что-то походя еще подправили.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 17 2007, 05:58
Сообщение #6


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(zltigo @ Sep 17 2007, 09:37) *
Полная ерунда. Можете хоть горшком называть - что-то походя еще подправили.

Я также считал, а сейчас во всем уже сомневаюсь.

Сейчас проверил. Название важно для startup, для С может даже не совпадать со startup овским.
Там важен даже регистр, т.е. IRQ_Handler проходит, а irq_handler нет.

Сообщение отредактировал alexander55 - Sep 17 2007, 06:12
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2007, 06:11
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alexander55 @ Sep 17 2007, 08:58) *
а сейчас во всем уже сомневаюсь.

Отбростье сомнения, иначе следующим "логичным" шагом будет покупка бубна smile.gif. Причина была указана в первых ответах.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 17 2007, 06:28
Сообщение #8


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



"Сейчас проверил. Название важно для startup, для С может даже не совпадать со startup овским.
Там важен даже регистр, т.е. IRQ_Handler проходит, а irq_handler нет."
Кажется нашел, ответы на стр.31-32 DevelopmentGuide.pdf. Как ни странно, совпало с моими субъективными ощущениями.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2007, 06:45
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alexander55 @ Sep 17 2007, 09:28) *
Там важен даже регистр, т.е. IRQ_Handler проходит, а irq_handler нет."

Удивительно-то как! Оказывается в 'C' важен регистр, удивление мое не знает границ smile.gif
Цитата
Кажется нашел, ответы на стр.31-32 DevelopmentGuide.pdf. Как ни странно, совпало с моими субъективными ощущениями.

Повторяю, мне неведомо, что Вы там шаманите, какой startup редактируете, какой ассемблируете и какой в конце концов линкуете, и уж что такое в DevelopmentGuide.pdf страшное могли вычитать, но имя функции обработчика прерывания может быть любым.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 17 2007, 06:59
Сообщение #10


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(zltigo @ Sep 17 2007, 10:45) *
но имя функции обработчика прерывания может быть любым.

Да это так, но не в startup.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2007, 07:10
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alexander55 @ Sep 17 2007, 09:59) *
Да это так, но не в startup.

Все, больше слов нет sad.gif.
Срочно покупайте бубен, для дальнейшей "программерской деятельности" он Вам очень поможет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 18 2007, 08:23
Сообщение #12


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(zltigo @ Sep 17 2007, 11:10) *
Все, больше слов нет sad.gif.
Срочно покупайте бубен, для дальнейшей "программерской деятельности" он Вам очень поможет.

Купил бубен и продолжил исследование. Для меня истина дороже.
В результате шаманской деятельности все выяснил.
При компиляции в EC++ и EEC++ пропадает (бесследно)
__vector_0x14: DC32 0 ; RESERVED
При компиляции в C все ОК.
Выключены все оптимизации.

Выход, как всегда, есть. Но интересны соображения уважаемых коллег.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 19 2007, 11:39
Сообщение #13


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Спасибо всем (Zltogo и особенно Сергею Борщ). Все работает.
Я уже такого накрутил, что сам запутался.
Ключевой момент это
_EXTERN_C __arm __irq void IRQ_ISR_Handler()
{
......
}
_END_EXTERN_C

PS. Прошу не расстреливать за паникерство.

Сообщение отредактировал alexander55 - Sep 19 2007, 11:41
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 19 2007, 17:24
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(alexander55 @ Sep 19 2007, 14:39) *
PS. Прошу не расстреливать за паникерство.

Наоборот, обьявляю благодарность за терпимость, самокритичность и чувство юмора! a14.gif
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 20 2007, 04:43
Сообщение #15


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(IgorKossak @ Sep 19 2007, 21:24) *
Наоборот, обьявляю благодарность за терпимость, самокритичность и чувство юмора! a14.gif

Спасибо, приятно когда тебя понимают.
Go to the top of the page
 
+Quote Post

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

 


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


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