Возникла проблема следующего рода. При компиляции проекта на С++, программа стопорится при попытке вызова системного прерывания.
Используется IAR версии 6.40.2, стандартные библиотеки CMSIS.
Конкрентно виснет на функции delay(), которая реализована следующим образом:
Код
// Функция задержки (паузы) в работе
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
// Крутимся в бесконечном цикле, пока счетчик
// оставшегося времени не станет равным нулю.
// Уменьшение счетчика происходит с помощью
// прерываний системного таймера.
while(TimingDelay != 0);
}
// Функция уменьшения счетчика задержки (паузы)
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
// Крутимся в бесконечном цикле, пока счетчик
// оставшегося времени не станет равным нулю.
// Уменьшение счетчика происходит с помощью
// прерываний системного таймера.
while(TimingDelay != 0);
}
// Функция уменьшения счетчика задержки (паузы)
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
В файле stm32f4xx_it.c определяем функцию
Код
void SysTick_Handler()
{
TimingDelay_Decrement();
}
{
TimingDelay_Decrement();
}
Виснет в файле startup_stm32f4xx.s в блоке
Код
PUBWEAK SysTick_Handler
SECTION .text:CODE:REORDER(1)
SysTick_Handler
B SysTick_Handler /// !!!!!!!! Вот тут останавливается исполнение.
SECTION .text:CODE:REORDER(1)
SysTick_Handler
B SysTick_Handler /// !!!!!!!! Вот тут останавливается исполнение.
То есть как я понимаю, не может найти реализацию функции SysTick_Handler().
Когда проект был на С, данный код работал. Может кто знает, как его заставить работать на С++ ?