1

我是使用基于 ARM Cortex M3 的 STM32f100RB 的新手。我试图使用递归来处理 GPIO 输入,但它不起作用。谁能告诉我为什么?代码如下。当GPIOa Pin 0为1时,它应该设置GPIOc Pin 9。但是它不起作用..

我不确定我是否可以发布这样的问题。如果不合适,请告诉我。谢谢。

    void detect_input(void);

    void main()
    {
        init_ports();
        detect_input();
        while(1)
        {
            GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET);//turn on the green led
        }
    }

    void detect_input()
    {
        if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
        {
        detect_input();
        }
   }
4

1 回答 1

5

使用您的代码,您可能会得到一个stackoverflow

如我所见,在您的代码中,如果没有输入,那么您将调用该函数detect_input(),并且没有其他停止条件。因此,根据使用的频率和堆栈大小,您将使用所有允许的堆栈内存。

因此,这通常不是一个好主意。

对于这种简单的情况,您应该使用简单的 while 循环:

void detect_input() {
    while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0));
}

在这种情况下,您将在收到输入的那一刻退出循环。

于 2013-04-21T11:28:31.403 回答