Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Eclipse + CodeSoursery + C++&C = Default_Handler:
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Basilij
Здравствуйте Господа.

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

Заранее благодарен за потенциально возможные комментарии!
SSerge
extern "C"

В плюсах есть такая штука как перегрузка операций (функций), т.е. возможны функции с одинаковыми именами, но отличающиеся типами параметров и возвращаемого результата. Для реализации этого компилятор переименовывает функции по определённым правилам, так что линкеру достаются уже функции под другими именами. Вот поэтому линкер Вашего обработчика и не находит.
Basilij
Спасибо, действительно помогло.
А если наоборот из main.c требуется вызывать функции .cpp то тоже использовать связывание extern "C" {button.hpp} ?
demiurg_spb
Цитата(SSerge @ Jan 24 2013, 11:08) *
В плюсах есть такая штука как перегрузка операций (функций), т.е. возможны функции с одинаковыми именами, но отличающиеся типами параметров и возвращаемого результата. Для реализации этого компилятор переименовывает функции по определённым правилам, так что линкеру достаются уже функции под другими именами.
Это-то понятно... Вызывает недоумение/непонимание какого чёрта они в стандарте не прописали, что когда нет перегрузки не стоит коверкать имена функций?
Сергей Борщ
QUOTE (demiurg_spb @ Feb 4 2013, 10:44) *
какого чёрта они в стандарте не прописали, что когда нет перегрузки не стоит коверкать имена функций?
Как вы себе представляете реализацию? Откуда компилятор может знать, что функция не будет перегружена в другой единице компиляции?
demiurg_spb
Если она локальная - да чёрт-то с ней.

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

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