十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

State Machine

State Machine 系统上电后状态变化如上图所示主要分为两条主线。系统初始状态为SYS_ST_BOOT_ENTRY在状态下会检查目标内存位置的值是否为刷写请求的值如果是状态变为SYS_ST_HANDSHAKE进入刷写流程如果不是状态变为SYS_ST_CHECK_APP进入app校验阶段。第1条主线1 . 如果系统状态进入了SYS_ST_CHECK_APP那么会对APP进行校验如果校验通过系统状态会变为SYS_ST_JUMP跳转到有效的APP如果校验不通过系统状态会变为SYS_ST_BOOT并且一直保持在SYS_ST_BOOT直到收到新的下载请求。2. 如果系统状态进入了SYS_ST_CHECK_APP进行APP跳转。第2条主线1. 如果系统状态进入了SYS_ST_HANDSHAKE系统会和上位机进行handshake如果handshake成功系统状态会变为SYS_ST_PACKAGE_INFO等待接收刷写包长度信息如果5000ms内handshake没有成功系统状态会变为SYS_ST_BOOT。2. 如果系统状态进入了SYS_ST_PACKAGE_INFO系统会等待接收刷写包长度信息当接收到刷写包长度信息后系统状态变为SYS_ST_DOWNLOADING。3. 如果系统状态进入了SYS_ST_DOWNLOADING会调用刷写函数Flash_Program_Request_Handler根据刷写函数的返回值决定状态跳转。如果返回PROG_WRITING系统状态保持SYS_ST_DOWNLOADING如果返回PROG_FINISHED系统状态变为SYS_ST_VERIFY下一步进行APP校验如果返回PROG_ERROR系统状态变为SYS_ST_BOOT。4. 如果系统状态进入了SYS_ST_VERIFY对APP进行校验如果校验通过清楚目标内存的刷写请求值系统状态变为SYS_ST_JUMP准备进行APP跳转如果校验不通过系统状态变为SYS_ST_BOOT。5. 如果系统状态进入了SYS_ST_JUMP进行APP跳转。如上状态机跳转一旦有错误或者异常发生系统状态都会变成SYS_ST_BOOT在此状态下系统会一直保持SYS_ST_BOOT直到新的刷新请求过来。问题1为什么每次有错误发生或者没有检查到flash_pattern并且app无效时会进入SYS_ST_BOOT等到新的flash请求过来才进入SYS_ST_HANDSHAKE然而另一种情况“启动时检查到flash_pattern就直接进入到SYS_ST_HANDSHAKE”flash流程可不可以统一都从SYS_ST_BOOT开始答这是不能的因为对于“启动时检查到flash_pattern就直接进入到SYS_ST_HANDSHAKE”这种情况flash请求发生时程序运行在app中RAM中的flash_pattern就是对flash请求的一种记录好让boot知道falsh请求已经发生了接下来就该进入handshake阶段了所以如果也从SYS_ST_BOOT开始接下来收不到flash请求了程序就会卡在SYS_ST_BOOT这一状态
返回列表