gpt4 book ai didi

c++ - 程序可以编译,但分解成函数后实际上并不能移动电机

转载 作者:太空狗 更新时间:2023-10-29 20:33:04 25 4
gpt4 key购买 nike

编译/上传到单片机时没有错误。期望的行为是电机移动。不同之处在于将每个电机控制/命令创建为划分功能。

我做了声明,并将各种电机命令(前进、后退等)划分为函数。

我已经在 main() 中交换了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com