Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-окт-17 08:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Переход на CPP
СообщениеДобавлено: 2014-ноя-25 15:29 
Не в сети

Зарегистрирован: 2014-мар-10 12:11
Сообщения: 4
Добрый день!
Хочу перевести MDR32F9Qx_it.c на CPP (с++). Переименовал этот файл в MDR32F9Qx_it.cpp и функции обработки прерываний перестали работать (все функции пустые).
Определил что перестали работать по тому что нельзя поставить брейкпоинты (они становятся серыми и пустыми с воцклицанием во время отладки) т.е. программа физически не может попасть в эти функции. Видимо что то с компилятором и адреса функций неверно прописываются в таблицу векторов прерываний.

Что нужно сделать чтобы функции начали работать но уже в CPP версии?
Други выручайте, время горит...!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-25 15:31 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1154
Откуда: Тула
если время горит - переименуйте обратно в *.c

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-25 15:46 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1154
Откуда: Тула
если не горит - всё равно переименуйте.

можно глянуть тут
http://www.embedded.com/design/prototyp ... upts-in-C-

ещё где-то видел проект от соотечественника, который был на си++, но вот запамятовал где...
НАШЁЛ http://we.easyelectronics.ru/STM32/vekt ... stile.html

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-26 10:05 
Не в сети

Зарегистрирован: 2011-сен-05 12:12
Сообщения: 177
Откуда: Саратов
попробуйте объявить функции обработки прерываний как
extern "C" {
void UART0_ISR();
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-26 11:34 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 395
я делаю так
Код:
extern "C" void __irq Timer1_IRQHandler (void)
{...
}

Keil 4.23, но это кажется не принципиально. Это вопрос взаимодействия кода *.с и *.cpp

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-26 13:30 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1154
Откуда: Тула
редактор писал(а):
я делаю так
Код:
extern "C" void __irq Timer1_IRQHandler (void)
{...
}

Keil 4.23, но это кажется не принципиально. Это вопрос взаимодействия кода *.с и *.cpp

А у Вас с каким расширением файлы?
Дело тут в том, что есть такая штука как "преобразование имен функций" или типа того. Речь об этом. В Си имена останутся такими, какие есть и будут совпадать с объявленными в стартапе, в Си++, в общем случае, не будут.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-26 13:51 
Не в сети

Зарегистрирован: 2011-сен-05 12:12
Сообщения: 177
Откуда: Саратов
prostoRoman писал(а):
Дело тут в том, что есть такая штука как "преобразование имен функций" или типа того. Речь об этом. В Си имена останутся такими, какие есть и будут совпадать с объявленными в стартапе, в Си++, в общем случае, не будут.

Правильно, а extern "C" приказывает компилятору С++ именовать как С


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-27 11:32 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 395
Все файлы, в том числе библиотечные переименованы в *.cpp
исключение startup_MDR32F9x.s :) и system_MDR32F9x.c

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2014-ноя-27 17:26 
Не в сети

Зарегистрирован: 2014-мар-10 12:11
Сообщения: 4
Друзья, всех благодарю за подсказки! Все получилось.
Как я понимаю, первое объявление функций прерываний и их адреса в памяти происходит в startup_MDR32F9Qx.s?
Код:
DCD     CAN2_IRQHandler            ; IRQ1

В итоге.
Как и говорил редактор
Все файлы, в том числе библиотечные переименованы в *.cpp
исключение startup_MDR32F9x.s и system_MDR32F9x.c
В MDR32F9Qx_it.cpp указал, что объявление функции дано где-то в другом файле через дерективу extern.
Код:
extern "C" {
   void CAN1_IRQHandler(void)
   {
   .....
   }
}

В MDR32F9Qx_it.h стираем или комментируем строку с объявление функции
Код:
//void CAN2_IRQHandler(void);

P.S.
Раньше сталкивался с использованием функций Си функций в C++ файлах и подключал их аналогичным образом
Код:
extern "C" {
   #include "..... .h"
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2018-май-21 10:46 
Не в сети

Зарегистрирован: 2013-дек-23 10:34
Сообщения: 15
Откуда: ПАО Техприбор Санкт-Петербург
А может кто-нибудь переводил startup_MDR32F9x.s в *.срр?
По аналогии с этим https://geektimes.com/post/259660/
Очень интересует код чтобы самому долго, долго не возиться с переделкой


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход на CPP
СообщениеДобавлено: 2018-май-21 20:05 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 395
Цитата:
А может кто-нибудь переводил startup_MDR32F9x.s в *.срр?

Зачем?? Там ведь кроме таблицы векторов многое другое есть. Установка стека, вызов библиотек инициализации и заглушки на системные прерывания (HardFault например).

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB