编译/上载到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/