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

 
 
 
Reply to this topicStart new topic
> Eclipse + CodeSoursery + C++&C = Default_Handler:, Не срабатывают прерывания.
Basilij
сообщение Jan 24 2013, 06:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 175
Регистрация: 7-04-11
Пользователь №: 64 190



Здравствуйте Господа.

Столкнулся с непонятной проблемой, в Eclipse создаю main.cpp, подключаю стандартную библиотеку для STM32, два порта конфигурирую как вход для кнопок с прерыванием, и после нажатия кнопки, ухожу не в обработчик прерывания а в Default_Handler.
Если же main.cpp и все связанные с ним файлы *.cpp переименовываю в *.c то после компиляции прерывания от кнопок срабатывают нормально. В файле линкера ничего с виду нет необычного, в секциях настройках Eclipsa отвечающих за компиляцию cpp тоже вроде всё нормально. Но почему такой эффект, может есть какая либо особенность совместной линковки c и cpp ?

Заранее благодарен за потенциально возможные комментарии!
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 24 2013, 07:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



extern "C"

В плюсах есть такая штука как перегрузка операций (функций), т.е. возможны функции с одинаковыми именами, но отличающиеся типами параметров и возвращаемого результата. Для реализации этого компилятор переименовывает функции по определённым правилам, так что линкеру достаются уже функции под другими именами. Вот поэтому линкер Вашего обработчика и не находит.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Basilij
сообщение Jan 24 2013, 08:31
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 175
Регистрация: 7-04-11
Пользователь №: 64 190



Спасибо, действительно помогло.
А если наоборот из main.c требуется вызывать функции .cpp то тоже использовать связывание extern "C" {button.hpp} ?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 4 2013, 08:44
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(SSerge @ Jan 24 2013, 11:08) *
В плюсах есть такая штука как перегрузка операций (функций), т.е. возможны функции с одинаковыми именами, но отличающиеся типами параметров и возвращаемого результата. Для реализации этого компилятор переименовывает функции по определённым правилам, так что линкеру достаются уже функции под другими именами.
Это-то понятно... Вызывает недоумение/непонимание какого чёрта они в стандарте не прописали, что когда нет перегрузки не стоит коверкать имена функций?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 4 2013, 10:48
Сообщение #5


Гуру
******

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



QUOTE (demiurg_spb @ Feb 4 2013, 10:44) *
какого чёрта они в стандарте не прописали, что когда нет перегрузки не стоит коверкать имена функций?
Как вы себе представляете реализацию? Откуда компилятор может знать, что функция не будет перегружена в другой единице компиляции?


--------------------
На любой вопрос даю любой ответ
"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
demiurg_spb
сообщение Feb 4 2013, 12:29
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Если она локальная - да чёрт-то с ней.

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

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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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