Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我可以使用递归来处理GPIO吗?_C_Embedded_Stm32_Gpio - Fatal编程技术网

C 我可以使用递归来处理GPIO吗?

C 我可以使用递归来处理GPIO吗?,c,embedded,stm32,gpio,C,Embedded,Stm32,Gpio,我是使用基于ARM Cortex M3的STM32f100RB的新手。我试图使用递归来处理GPIO输入,但没有成功。有人能告诉我为什么吗? 代码如下。 当GPIOa引脚0为1时,应该设置GPIOc引脚9。但它就是不起作用 我不确定我是否可以发布这样的问题。如果不合适,请告诉我。谢谢 void detect_input(void); void main() { init_ports(); detect_input(); wh

我是使用基于ARM Cortex M3的STM32f100RB的新手。我试图使用递归来处理GPIO输入,但没有成功。有人能告诉我为什么吗? 代码如下。 当GPIOa引脚0为1时,应该设置GPIOc引脚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();
        }
   }

使用您的代码,您可能会得到一个堆栈溢出

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

因此,总的来说,这不是一个好主意

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

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

在这种情况下,您将在收到输入时退出循环。

使用您的代码,您可能会得到堆栈溢出

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

因此,总的来说,这不是一个好主意

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

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

在这种情况下,您将在接收到输入时退出循环。

这可能是个坏主意,因为嵌入式系统没有太多堆栈,这样的代码很容易导致堆栈溢出。谢谢@这一定是因为Joachim Pileborg。无论嵌入与否,如果没有输入,您的代码将自己递归到无穷大,因此这基本上是一个非常糟糕的想法。我会考虑使用一个中断引脚,然后代码不需要做任何事情,直到一些输入发生,它可以花费整个时间做其他事情。这可能是个坏主意,因为嵌入式系统没有太多堆栈,这样的代码很容易导致堆栈溢出。谢谢@这一定是因为Joachim Pileborg。无论嵌入与否,如果没有输入,您的代码将自己递归到无穷大,因此这基本上是一个非常糟糕的想法。我会考虑使用一个中断管脚,然后代码不需要做任何事情,直到一些输入发生,它可以花整个时间做其他事情。