嵌入式软件编程模式关注的是底层支撑软件的架构,包括内存和CPU运行时间的分配方案,它服务于上层机器学习软件。嵌入式软件编程模式和传统的计算机编程模式在概念上有所不同,一般计算机软件编程模式侧重软件开发过程中的代码复用和架构标准化技术,以模块化和层次化的形式构建软件对象。
而这里所讨论的嵌入式编程模式是为了满足多任务的实时响应,在有限内存和有限运算能力的嵌入式CPU上高效地完成运算任务。这里讨论的内容除了编程模式外,还包括通用的嵌入式软件优化方案,它们和嵌入式软件编程模式相结合,保障了机器学习算法在嵌入式平台上高效运行。
这里的内容除了可用于提高机器学习应用软件效率外,也能够应用于其他具有类似特性的嵌入式软件。嵌入式系统和应用紧密结合,不同应用有不同的软件运行要求。下面将讨论几种常见的嵌入式系统编程模式,每种模式有对应的应用场合,可以单独使用或者混合使用。
这里讨论的编程模式主要针对没有操作系统的嵌入式软件运行环境,在这种情况下,CPU的全部算力可以分配到和应用相关的计算,不需要额外执行IO资源状态、内存清理、调度等软件操作系统的管理任务,因此运行效率和内存使用效率会更高,但付出的代价是需要手动管理任务并发、IO状态检查、资源共享等。
对开发者有更高的要求。系统的功能是从传感器获得外部数据,进行分析运算后输出控制命令,运行期间还需要接收用户输入。这一架构模型反映了大多数嵌入式系统的运行模式。
比如,在语音识别应用中,嵌入式系统周期性地从ADC读入语音的波形数据,经过处理后识别用户语音指令,并根据识别结果输出控制命令。对于运行机器人视频避障软件的嵌入式系统,软件需要通过摄像头周期性地获得视频数据,分析视频内容,识别障碍和目的地并输出机器人移动控制命令。