This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何将管脚传递给子函数中的变量,通过对变量的操作将管脚置一或置零?



#define BDATA1 GpioDataRegs.GPASET.bit.GPIO24
#define BDATA0 GpioDataRegs.GPACLEAR.bit.GPIO24

#define CDATA1 GpioDataRegs.GPASET.bit.GPIO22
#define CDATA0 GpioDataRegs.GPACLEAR.bit.GPIO22

void main()
{ Uint16 date1,date0;

date1=BDATA1;date0=BDATA0;handle();

date1=BDATA1;date0=BDATA0;handle();}

void handle()

{date1=1;date0=1;}

程序是一些片段,主题思想是第一次子函数是在GPIO24上操作,第二次是在GPIO22上操作,这样写可以么?能将管脚直接赋给变量么?如果不能,怎样改才能实现子函数每次都在不同的管脚上操作呢?请大神赐教。

  • 你宏定义BDATA1和BDATA0是要使GPIO24置1和清零么?

    那可以写成 #define  BDATA1  GpioDataRegs.GPASET.bit.GPIO24 = 1

     

  • 对,是这个意思,这样写会更好,但问题的关键不在这里,而在如何将GPIO24传进子函数。您看上面那种写法对么?我个人感觉不靠谱,您有好的写法么?

  • 你那么写是不行,你可以不用宏定义,直接写四个函数就行,在主函数中按你的逻辑调用

    void BDATA1(void) {GpioDataRegs.GPASET.bit.GPIO24 = 1;}

    void BDATA0(void) {GpioDataRegs.GPACLEAR.bit.GPIO24 = 1;}

    void CDATA1(void) {GpioDataRegs.GPASET.bit.GPIO22 = 1;}

    void CDATA0(void) {GpioDataRegs.GPACLEAR.bit.GPIO22;}

  • 这样的话子函数就得写两个了,要知道在我的原程序中可是有好多个子函数的,这样都得写两遍,如果我再加一个管脚的话,那每个子函数就得写三遍,太麻烦。所以我想直接将管脚通过变量传到我的各个子函数中。

  • 如果你的动作是固定的,就可以直接写成一个函数啊,比如:
    void Set(void)
    {
        GpioDataRegs.GPASET.bit.GPIO24 = 1;
        GpioDataRegs.GPASET.bit.GPIO22 = 1;
    }

    void Clear(void)
    {
        GpioDataRegs.GPACLEAR.bit.GPIO24 = 1;
        GpioDataRegs.GPACLEAR.bit.GPIO22 = 1;
    }

    void SetClear(void)
    {
        GpioDataRegs.GPASET.bit.GPIO24 = 1;
        GpioDataRegs.GPASET.bit.GPIO22 = 1;
        GpioDataRegs.GPACLEAR.bit.GPIO24 = 1;
        GpioDataRegs.GPACLEAR.bit.GPIO22 = 1;
    }

    每一个IO口的状态变化一次一条语句是必不可少的

  • 这样的话就是同时操作两个管脚了,但我希望的是先操作24,再操作22,依次完成操作,怎么写呢?

  • 不算是同时操作,函数中的语句执行是有先后顺序的,只是间隔时间很短,要看你的这个先操作后操作有没有具体的时间间隔要求,时间间隔小有什么影响

  • 它实际上是要求先用24将所有子函数跑一遍,再用22跑一遍,两个管脚必须分先后依次完整的跑完所有子程序。

  • 有点糊涂了,你的GPIO22和24是输入脚?是想通过IO电平变换来控制功能函数的执行?这样的话就不是我刚写的那些函数那么写了,我那是GPIO作为输出时赋值

  • 我是通过两个管脚置一置零分别控制两个测量模块,原程序中不但有通过管脚往模块写时序,还有通过管脚读模块返回来的数据,必须先让模块一执行再让模块二执行,且他们执行的程序都是一样的,但返回的数据不同。

  • 那就是IO脚作为输入了,那就不能用SET和CLEAR了,这是用在输出时置1和清零的。

    你应该读GpioDataRegs.GPADAT.bit.GPIO22/24的值,可以赋值给变量,通过变量值的变化按照你的程序逻辑执行程序

  • 既要求读又要求写,并且同一个管脚在每一次执行中读写状态要转换好几次,所以我在原程序中写了两个函数in();和out();,每次转换时都要先定义管脚是输入还是输出,由于程序太大,不方便整个贴到上面,所以很多细节没有罗列,请见谅。