4.1.1. APP_STATE_MACHINE
Overview
本案例以AC632N示例,提供展示了app_state_machine接口应用示例和常见问题。
4.1.1.1. 应用示例
- app_state_machine的创建 
- app_state_machine的使用与切换,具体流程如图:   
4.1.1.2. 工程配置
- /fw-AC63_BT_SDK-ac63_bt_sdk_release_vx.x.x/apps/hid/board/bd19目录下,双击AC632N_hid.cbp打开工程 
- 使用快捷键Alt + g 打开app_config.h,配置CONFIG_APP_IDLE使能 
//app case 选择,只选1,要配置对应的board_config.h #define CONFIG_APP_IDLE 1//IDLE
- 使用快捷键Alt + g 打开board_config.h,板级选择CONFIG_BOARD_AC632N_DEMO 
#define CONFIG_BOARD_AC632N_DEMO // CONFIG_APP_KEYBOARD,CONFIG_APP_PAGE_TURNER // #define CONFIG_BOARD_AC6321A_MOUSE // CONFIG_APP_MOUSE //#define CONFIG_BOARD_AC6328A_KEYFOB // CONFIG_APP_KEYFOB
- 使用快捷键Alt + g 打开app_idle.c,其中idle_event_handler、idle_state_machine就是对应这创建的事件机和状态机,别的工程、示例也是基于这种代码开发方式。 
4.1.1.3. 常见问题
- app_state_machine有什么作用? - 系统在运行过程中,可以通过 APP 状态机对其状态进行切换,其状态包括创建、运行、挂起、删除。 
 
- 为什么要使用app_state_machine? - 使用app_state_machine可以使得所有执行的action都在 “app_core”任务执行,所有动作和事件都是单线程运转,不需要考虑互斥问题; 
- 存在多个模式,并且多个模式之间是互斥关系(非后台)的情况下, 建立多个app_state_machine切换可以使得系统资源合理利用和降低CPU的消耗; 
- 系统所有事件产生都会发送到当前app_state_machine的event_handler; 
 
4.1.1.4. API参考
- 无