一 前记
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的上手速度还是比较快的。文档和代码比较全。
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |