我是ARM编程的新手,正在使用CoIDE,正在尝试编写一些应用程序以C++从8个通道读取PWM。
我的问题是使用运算符new
;如果我写:
RxPort rxPort = RxPort(RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_6, GPIO_PinSource6, GPIO_AF_TIM3, RCC_APB1Periph_TIM3, TIM3, TIM_Channel_1, TIM_IT_CC1, TIM3_IRQn);
它工作正常,但是如果我写:
RxPort* rxPort1 = new RxPort;
rxPort1->setTimerParameters(RCC_APB1Periph_TIM3, TIM3, TIM_Channel_1, TIM_IT_CC1, TIM3_IRQn);
rxPort1->setGPIOParameters(RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_6, GPIO_PinSource6, GPIO_AF_TIM3);
rxPort1->init();
程序转到:
static void Default_Handler(void)
{
/* Go into an infinite loop. */
while (1)
{
}
}
第一行之后。
我在my.st.com here上找到了一个主题,并尝试在“链接”和“编译”部分的“杂项控件”中添加“--specs = nano.specs”,但没有任何变化。
最佳答案
显然,您的 Activity GCC工具链newlib存根不支持使用低级动态内存分配(malloc()
,free()
等)。在C++绑定(bind)中使用new()
或delete()
可能会在运行时引发默认的“exception”处理程序。
详细信息取决于配置随附的newlib存根。请注意,您可以使用自己的实现覆盖存根函数。
您将在本文中找到一些有用的其他提示:Building GCC 4.7.1 ARM cross toolchain on Suse 12.2
关于c++ - STM32 C++运算符new(CoIDE),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19258847/