我是ARM编程的新手,正在使用CoIDE,正在尝试编写一些应用程序以C++从8个通道读取P​​WM。

我的问题是使用运算符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/

10-10 00:54