【发布时间】:2015-03-23 13:35:43
【问题描述】:
我遇到了自制课程的问题。我有一个可以输入数据结构的类。如果我从“old main.cpp”调用该函数,它会填充一个预先存在的结构并根据此信息初始化硬件。
main.cpp (old way of handling, witch works):
UART UARTObj;
IO_t UART1_RX;
IO_t UART1_TX;
...
IOObj.begin(&UART1_RX, GPIOA, 3, GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_Speed_Level_3, GPIO_AF_1);
UARTObj.begin(USART2, 230400, &UART1_RX, &UART1_TX);
因为我想将我的引脚分配保留在一个地方,所以我创建了一个名为 IOPin 的类。
IOPin.h :
typedef struct IO_t{
GPIO_InitTypeDef GPIOInfo;
GPIO_TypeDef* GPIOx;
uint8_t GPIO_AF;
bool init;
}IO_t;
class IOPin
{
public:
IOPin(GPIO_TypeDef*, uint16_t, GPIOMode_TypeDef, GPIOOType_TypeDef, GPIOPuPd_TypeDef, GPIOSpeed_TypeDef);
IOPin(GPIO_TypeDef*, uint16_t, GPIOMode_TypeDef, GPIOOType_TypeDef, GPIOPuPd_TypeDef, GPIOSpeed_TypeDef, uint8_t GPIO_AF);
IO_t *PIN = new IO_t;
virtual
~IOPin ();
};
理论是我用每个对象所需的信息调用构造函数。 稍后,我调用一个附加了这个类的函数。我从这个类中获取结构体,并通过与旧方法相同的函数对其进行处理。
main.cpp (new way of handling, witch gives problems) :
IOPin UART_RX(GPIOA, 3, GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_Speed_Level_3, GPIO_AF_1);
IOPin UART_TX(GPIOA, 2, GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_Speed_Level_3, GPIO_AF_1);
....
IOObj.begin(&UART_RX);
IOObj.begin(&UART_TX);
UARTObj.begin(USART2, 230400, &UART_RX, &UART_TX);
我使用 GDB 作为调试器,看不到任何错误。
问题: 如果我重建项目,它会工作一次。 重置平台没有帮助。 任何人都知道为什么这种方法在课堂上不起作用? 我试过把它变成一个指针,把它放到头文件中等等。
【问题讨论】:
-
你说的是完全重置(程序从一些只读内存重新加载到内存等)?
-
这段特殊的代码用于初始化引脚。更具体地说是UART的引脚。我没有遇到任何硬件故障,并且达到了我的主要功能中的循环。不过,我没有很好地初始化引脚。如果我将设置更改为旧方式,一切正常。我认为这是一个设计错误,但我不确定..