编译/上载到MCU时没有错误。期望的行为是使电动机运动。不同之处在于将每个电动机控制/命令都创建为分隔功能。

我进行了声明,并将各种电动机命令(前进,后退等)划分为功能。

我已经将void startup()的内容与main()交换了进出。我对为什么仅将main()的内容传输到函数中不起作用感到困惑。当所有内容都在主程序中时,它将编译并运行,并且将每个电动机命令(后退,前进等)置于隔离的功能中时,它只会编译。当加载到板上时,它不会导致电动机实际运动。

我订购不正确吗?我将L6470 **motors定义为全局变量。还需要将其他一些事情定义为全局变量吗?如果此C++程序无法分解为功能,为什么不呢?

这是一个最小的可重现示例,分为一个功能:

#include "mbed.h"
#include "DevSPI.h"
#include "XNucleoIHM02A1.h"

#define DELAY_1 1000

   L6470 **motors;

/* Motor Control Expansion Board. */
XNucleoIHM02A1 *x_nucleo_ihm02a1;

void forward(); // declaration

int main()
{
    /* Initializing SPI bus. */
#ifdef TARGET_STM32F429
    DevSPI dev_spi(D11, D12, D13);
#else
    DevSPI dev_spi(D11, D12, D13);
#endif

    /* Initializing Motor Control Expansion Board. */
    x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi);

    L6470 **motors = x_nucleo_ihm02a1->get_components();

    motors[0]->set_home();
    wait_ms(DELAY_1);
    position = motors[0]->get_position();

    forward();
}

void forward()
{
        motors[0]->move(StepperMotor::FWD, STEPS_1);
        motors[0]->wait_while_active();
        position = motors[0]->get_position();
        motors[0]->set_mark();
    wait_ms(DELAY_1);
}

如果您认为这个问题不清楚,请提出原因。

最佳答案

因为您从未初始化全局变量,而是创建了另一个局部变量,所以您的函数不知道:

这个:

L6470 **motors = x_nucleo_ihm02a1->get_components();

需要是
motors = x_nucleo_ihm02a1->get_components();

使用您的全局变量。

关于c++ - 程序可以编译,但是当分解为功能时,实际上并不能移动电动机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57378564/

10-13 08:29