Fork me on GitHub

一 前记
freetos在可穿戴设备上应用十分广泛,用来实现基本的按键和led控制,来熟悉它的基本架构。这是一个不错的尝试。
二 源码分析
1 系统初始化
这个启动task,相当于系统的入口函数,这里的setup_task承担着这个task的工作。
    xTaskCreate(setup_task, "Setup", 512, 0, 3, &xSetupTask);

2 这里才是启动ledtask的地方,相当于从系统初始进程里面生出来一个工作的进程。

void setup_task(void *pvParameters)
{
    //
    // Print a debug message.
    //
    am_util_debug_printf("Running setup tasks...\r\n");

    //
    // Run setup functions.
    //
    LedTaskSetup();
    
    //disable_print_interface();
    
    //
    // Create the functional tasks
    //
    xTaskCreate(LedTask, "LEDTask", 512, 0, 3, &led_task_handle);
    //
    // The setup operations are complete, so suspend the setup task now.
    //
    vTaskSuspend(NULL);

    while (1);
}

3 在LedTask函数里面,是系统真正工作的处理:

void LedTask(void *pvParameters)
{
    uint32_t bitSet;

    while (1)
    {
        //
        // Wait for an event to be posted to the LED Event Handle.
        //
        bitSet = xEventGroupWaitBits(xLedEventHandle, 0x7, pdTRUE,
                            pdFALSE, portMAX_DELAY);
        if (bitSet != 0)
        {
            // Button Press Event received
            // Toggle respective LED(s)
            if (bitSet & (1 << 0))
            {
                am_devices_led_toggle(am_bsp_psLEDs, 0);
                am_util_debug_printf("LEDTask: led1 switch \n");

            }
            if (bitSet & (1 << 1))
            {
                am_devices_led_toggle(am_bsp_psLEDs, 1);
                am_util_debug_printf("LEDTask: led2 switch \n");

            }
            if (bitSet & (1 << 2))
            {
                am_devices_led_toggle(am_bsp_psLEDs, 2);
                am_util_debug_printf("LEDTask: led3 switch \n");

            }
        }
    }
}
三 效果展示
编译下载之后,可以看到系统的日志信息:
 
尝试按键,发现每个按键是对应一个led的。说明功能完全ok了。
 
四 总结
 
一步步下来,发现AMA3B的上手速度还是比较快的。文档和代码比较全。
posted on 2022-04-02 19:15  虚生  阅读(291)  评论(0编辑  收藏  举报