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

 
 
> Проблема с С и С++ ПОМОГИТЕ!
paravozru
сообщение Aug 14 2013, 09:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-07-12
Пользователь №: 72 586



Возникла проблема. Есть проект и в одном из циклов есть оператор break. При настройке IAR во вкладке Language1 я указываю следующие настройки.
Language: C
Language Confomance: Standart with IAR extension

Не работает оператор break. но вызываются прерывания.

При выборе C++ оператор break успешно работает но не вызываются прерывания.

Код
for (i = 0; i < MaxAmountPacket; i++) {
if (PackTurnSend[i].State == EmptyItem) {
PackTurnSend[i].BodyType = PacketType;
PackTurnSend[i].State = State;
PackTurnSend[i].Channel = Channel;
PackTurnSend[i].NumBytes = NumBytes;
PackTurnSend[i].TimeOut = TimeOut;
memcpy(PackTurnSend[i].Buff, buff, NumBytes);
result = i;
break;
}

Когда силы уже иссякли я взял с таймером TIM6 (вот отсюда http://chipspace.ru/stm32-basic-timer/#comment-346 ) и проверил. и в самом деле не работают прерывания когда выбираю C++.

Сообщение отредактировал IgorKossak - Aug 14 2013, 11:19
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Aug 14 2013, 09:56
Сообщение #2


Гуру
******

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



QUOTE (paravozru @ Aug 14 2013, 11:49) *
Не работает оператор break
А вы уверены, что попадаете в эту ветку алгоритма?
QUOTE (paravozru @ Aug 14 2013, 11:49) *
и в самом деле не работают прерывания когда выбираю C++.
Прерывания работают. Вы не указали модификатор extern "C" при объявлении обработчика, поэтому написанный на C код определения массива векторов просто не видит ваш Ц-плюс-плюсный обработчик и вместо его прилинковывает свою заглушку.


--------------------
На любой вопрос даю любой ответ
"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
paravozru
сообщение Aug 14 2013, 13:43
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-07-12
Пользователь №: 72 586



Цитата(Сергей Борщ @ Aug 14 2013, 13:56) *
А вы уверены, что попадаете в эту ветку алгоритма?
Прерывания работают. Вы не указали модификатор extern "C" при объявлении обработчика, поэтому написанный на C код определения массива векторов просто не видит ваш Ц-плюс-плюсный обработчик и вместо его прилинковывает свою заглушку.

Да уверен, и диодом моргал в этом месте и отладчиком проверял. По поводу обработчика можно по подробнее. Прерывания вызываю просто как функцию void TIM6_IRQHandler(void) .

Цитата(MrYuran @ Aug 14 2013, 14:00) *
Закрывающей скобки не хватает }
А код здесь принято оформлять в теге [ code ] (самая правая кнопка на панели редактирования)

Для решения вашего вопроса мало данных.

Да скобку упустил из виду , но в коде разумеется она есть, просто компилятор бы ругался )) Мало данных ? ну можете использовать пример приведенный мною выше - ссылка на сайт chipspace.ru
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:14
Рейтинг@Mail.ru


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