一般情况下,app 调用 platform API 时,直接使用 API 的函数地址,当 platform 升级时,API 地址改变,app 必须重新编译。 从 SDK v8.5.4 开始,开发者可以创建与 platform 版本独立的应用:允许单独升级 platform,app 不重新编译、不升级,可直接兼容新版 platform,功能正常。
- 当 platform 大规模升级或者修改接口时,仍可能出现不兼容;
- 每次 API 调用都需要增加额外操作,功耗可能略有增加。
本文介绍这种 app 的创建和开发方法。
以 “Copy to My Project” 的方式新建项目
建议以 “Copy to My Project” 的方式新建项目。
使用脚本修改 platform.bin
调用 脚本 修改 platform.bin。这个脚本在 platform.bin 的结尾追加 API 函数地址表, 并生成 API 代理入口。
导致 platform 与 app “不兼容”的原因主要有:
- API 被删除(一般不会发生)
- API 接口改变(一般不会发生)
- platform 体积变大,与 app 冲突(问题 1)
- platform 使用的内存变多,与 app 的内存重叠(问题 2)
对于问题 1,脚本允许开发者把 app 的烧录、启动地址后移,为将来 platform 变大预留空间; 对于问题 2,脚本允许开发者为 platform 预留一定量的内存空间:使后续版本使用的内存增加,只要不超过所预留的空间,兼容性仍能保持。
脚本在运行时会询问这两个问题,并按照开发者的要求相应修改。假设使用的软件包所在目录为 /path/to/sdk/bundles/typical/ING9188xx
,
可如下运行脚本:
python mk_api_table.py /path/to/sdk/bundles/typical/ING9188xx
脚本将为多种编译环境生成 /path/to/sdk/bundles/typical/ING9188xx/_api_table.*
汇编文件。
更新项目
打开项目,从项目中删除 sysdes.*
文件,
根据编译器类型选择合适的 /path/to/sdk/bundles/typical/ING9188xx/_api_table.*
汇编文件,加到项目。
后续的开发过程正常进行,不需要额外设置。
升级 SDK
升级 SDK 后,重新运行脚本。脚本运行过程中会自动检查上述问题 1 和 2 相关的兼容性,如果无法兼容,会输出错误信息。
烧录新的 platform.bin
即完成升级。