951623847 发表于 2020-3-10 18:16:32

关于adk LED闪烁例程的理解



怎么理解这个函数,怎么是运行的函数自己呢?
MessageSendLater(t, 0, 0, DELAY1);

看起来进去main函数后,led_controller1送入底层运行,只是不明白MessageSendLater(t, 0, 0, DELAY1)怎么实现函数无限循环了。没看出来t就是led_controller1。

static void led_controller1(Task t, MessageId id, Message payload)
{
        PioSet32(LED1, (PioGet32() ^ LED1));
        printf("LED1 PioGet32() = %ld\n", PioGet32() & LED1);
        MessageSendLater(t, 0, 0, DELAY1);
}

/* static void led_controller2(Task t, MessageId id, Message payload)
{
        PioSet32(LED2, (PioGet32() ^ LED2));
        printf("LED2 PioGet32() = %ld\n", PioGet32() & LED2);
        MessageSendLater(t, 0, 0, DELAY2);
} */

static TaskData led_controller1_task = {led_controller1};
/* static TaskData led_controller2_task = {led_controller2}; */

int main(void)
{
        PioSetDir32(0xFF, 0xFF); /* Set all PIO to be output */
        PioSet32(0xFF, 0);               /* Set all PIO off (0) */

        MessageSend(&led_controller1_task, 0, 0);
/*         MessageSend(&led_controller2_task, 0, 0); */
        MessageLoop();

        return 0;
}

qq635822782 发表于 2020-3-10 18:28:19

你函数里又调用延后调用这个函数了,自己延后发消息给自己

951623847 发表于 2020-3-10 18:31:10

qq635822782 发表于 2020-3-10 18:28
你函数里又调用延后调用这个函数了,自己延后发消息给自己

怎么理解延时函数里面的t就是函数自己呢?

qq635822782 发表于 2020-3-11 08:17:02

MessageSend(&led_controller1_task, 0, 0);这里你自己传的函数指针啊&led_controller1_task
页: [1]
查看完整版本: 关于adk LED闪烁例程的理解