在嵌入式开发领域中,尤其是在涉及到 TI DSP 相关的开发时,有着复杂且关键的流程。然而,许多开发者对于其中算法调用以及程序构建这一核心过程,存在着很多的困惑点。
算法在远端运行时的调度
算法在远端运行时,为实现远端程序调度,依靠的是 VISA、stub 等方式,像 RPC、call 等。在实际开发中,不同地区的团队有着不同的体验。例如,在像美国硅谷这样的科技聚集之地,开发团队可能更侧重于思考如何提升调度效率来降低成本。开发人员必须关注每个环节,像 DSP/BIOS LINK 这种底层 IPC 通信是否正常,会直接对项目产生影响。一旦出现错误,可能就需要耗费大量的人力和时间去排查。另外,在不同的硬件架构下,这些调度策略的表现也存在差异。
对于开发者来说,如何确保在各种环境下算法调度的稳定高效?
Codec的桥梁作用
Codec 起到了连接 ARM 侧应用程序与 DSP 侧算法的作用,它是软件层面的桥梁。这种关系在实际的开发场景中具有极为重要的地位。比如在中国的一些智能设备开发公司,在开发新型多媒体设备的时候,ARM 端的应用程序需要去调用 DSP 侧的精算算法。一旦 Codec 设置有误或者对其理解不够透彻,那么整个信号处理过程就会产生问题。在面对不同的产品需求时,根据具体的资料来精确地设置 Codec 的参数是非常关键的。黄河流域的某一个开发小组,在开发一个语音识别设备的过程中,由于没有深入地了解 Codec 与两端之间的关系,从而导致了前期的测试失败。
对于开发者而言,怎样全面掌握Codec的对接细节?
DVSDK开发包中的软件模块
TI DSP 的 DVSDK 开发包包含许多软件模块。其中一个关键模块是 xDAIS。如果 DSP 算法工程师要编写可被 ARM 调用的算法,那么算法接口必须符合 xDAIS 的标准。在欧洲的开发社区里,有些刚入行的工程师或许对这个标准的理解不够深入,这会影响整个开发进程。并且 XDC 需要依据用户定义的 build 指令以及指定的工具链来构建可执行文件。在不同功能要求的情况下,指令的编写和工具链的选择都存在很大差异。
开发人员如何确定最适合自己项目的build指令和工具链?
cmem内存分配的细节
cmem 内存分配在这个体系中是非常重要的一部分。在加载 cmem 的内核驱动时,可以设置相关参数,比如 cmemk == pools = 。并且,它的具体状态能够通过 cat /proc/cmem 来获取。在亚洲一些内存资源紧张的开发项目里,准确地对 cmem 内存进行分配和管理就如同走钢丝一样,不能有任何差错。由于不同硬件设备的内存容量不同,所以应该设置的内存参数也各不相同。
怎样明确特定设备的最佳cmem内存分配参数?
算法文件的封装与程序构建
DSP 算法工程师通常会将算法编成.lib 或.a64P 文件以供调用,同时也能够将其封装成 RTSC Codec 包和 RTSC DSP 包。在这个过程中,关键之处在于修改 user.bld 和.mak 文件。在美洲有一个开发项目,由于这两个文件的路径设置出现错误,使得程序无法正常进行 build 操作。最终,DSP 系统工程师成功 build 出了 DSP 可执行程序。不同规模以及有不同要求的项目,在这些文件的编写和调整方面存在着极大的差异。
如何顺利实现算法文件的封装并正确build程序?
ARM侧应用程序开发
ARM 应用工程师需调用 Codec 的 VISA API 来编写可执行程序,同时要学习相关知识并创建配置文件。并且,一些源文件经过 -cc 编译和汇编后会生成两个 RPC stub,此情况在各地的项目中都会出现。就如同非洲的某些小项目,也需要开发者掌握这一过程,才能让 ARM 和 DSP 两端实现正常交互。与此同时,还需要参考多个文档来了解 ARM 应用程序的相关问题。
那么 ARM 应用工程师怎样才能高效地掌握这些知识并且能够熟练地运用?希望读者们能够积极地进行评论和互动,如果觉得这篇文章有用的话,就点个赞并且分享一下。