# 1. 相机任务管理   相机主业务逻辑使用状态机机制进行管理。 ## 1.1. 任务状态   任务状态是指相机启动需要执行的任务,可能是拍照 / 视频,可能是其它任务。 **例如:** 1. 移动物体侦测启动; 2. 定时启动拍照 / 录像; 3. 测试启动; ## 1.2. 状态机设计 ### 1.2.1. 状态树设计图 ```mermaid stateDiagram-v2 [*] --> TopState TopState --> PowerOff TopState --> MSDCState TopState --> DeviceAbnormal TopState --> MissionState MissionState --> 空闲 MissionState --> 存储管理 存储管理 --> EMMC 存储管理 --> SD卡 MissionState --> 媒体管理 SD卡 --> 插卡 SD卡 --> 拔卡 SD卡 --> 卡异常 MissionState --> 网络管理 网络管理 --> 联网 联网 --> 上传文件 网络管理 --> 未联网 MissionState --> 直播 MissionState --> 4G管理 4G管理 --> Sim卡初始化 4G管理 --> 注网状态 MissionState --> Upgrade ``` 1. 任意状态处理命令时,不能阻塞,否则整个应用将会瘫痪无法响应任意的命令; 2. MissionState: 任务状态,在此状态下,由任务状态处理各种逻辑命令,根据逻辑命令定义,切换到相应的状态再处理数据,处理完数据会停留在当前状态,等待新的命令; ## 1.3. 任务状态获取启动   应用程序运行后,首先需要知道主控是由于何种任务被唤醒,然后根据任务来执行相应的功能代码; **时序图** ```mermaid sequenceDiagram participant MCU participant 大核 MCU ->> MCU:待机 opt MCU上电 MCU ->> 大核:上电 activate 大核 大核 ->> 大核:系统初始化 大核 ->> 大核:启动脚本拉起APP 大核 ->> +MCU:读取启动任务 MCU -->> -大核:return alt PIR触发 大核 ->> 大核:APP初始化 大核 ->> 大核:抓拍并保存 else 定时 大核 ->> 大核:APP初始化 大核 ->> 大核:抓拍并保存 else TEST 大核 ->> 大核:APP初始化 大核 ->> 大核:待机 end deactivate 大核 end ``` ## 1.4. MCU监视器   MCU监视器必须由其中一个状态继承,只有状态机运行之后才能处理串口命令。