【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
关于嵌入式,有很多的说法。有的认为stm32 mcu那种才是嵌入式;有的认为嵌入式linux也是嵌入式;也有的同学认为,嵌入式无非就是把pc的东西移植到嵌入式板子而已。这些想法,对,其实也不对。现在的很多linux板子,确实很多代码的确都是从pc电脑移植而来。但是如果仅仅是移植,而不做优化,其实是不合算的。
1、算法不能仅仅依靠cpu
很多的算法,如果是运行在pc电脑上,问题不大。一方面,pc上面的cpu频率够、算力强;另外pc电脑一般连接着外部电源,没有省电的需求,所以算法跑在pc上面一点问题没有。但是如果算法port到嵌入式板子之后,还是靠cpu来运行的话,可能需要非常好的cpu才行,频率也要足够块。但是好的cpu往往价格不便宜,这是很大的一个限制条件。
2、低功耗要求我们cpu不能太快
嵌入式很多设备是便携式设备,比如mp3、dv之类的设备。既然如此,那么上面的电池电量就是一定的。这就要求我们开发的时候有必要做好省电处理。大家比较了解的手机,其实就是这么处理的。玩游戏的时候,运行的cpu可能性能比较强;但是如果是平时一般操作,接接电话、发发微信,运行的cpu就会自动切入到低频的cpu来处理。
3、硬件加速是必选项
很多的应用如果靠cpu运行,很多时候即使靠cpu,也是没有办法做到实时输出的。比如说某些需要定时输出的算法,例如定位、运动控制、图像处理等等。硬件加速具有天然的优势,这个时候如果可能把soc上面的硬件加速用起来,让cpu仅仅是负责控制功能,这还是非常方便的。
有的同学也许会说,如果没有这样的IP怎么办?答案就是自己写一个,无论是外挂的fpga,还是内嵌fpga的zynq,都是不错的选择。
4、成本控制要求我们必须软硬结合
前面说过,好的cpu往往都比较贵。如果我们又想性能好,又不想太贵,这个时候只能想尽办法把soc上面的资源都用起来。不管是cpu、gpu、dsp、mcu,还是自带的编码、解码、ai、isp算法,又或者是自己设计的fpga算法,只要是能解决问题,都应该为我们所有。算法如果仅仅可以跑在高端的soc上面,这其实不是自己的优势,而是soc芯片公司的优势。
5、软硬结合就是写驱动、做控制
怎么做软硬结合,其实就是做驱动。软件从传感器拿到数据,放到指定内存,接下来送给硬件。硬件处理好了,通过中断告诉我们,我们再从指定内存获取结果。这就是一个循环往复的过程。有些同学如果还不理解的话,我们可以以网络为例进行说明,
读书的时候,一般都认为网络有五层,分别是应用层、传输层、网络层、mac层和物理层。至下而上地去看,物理层是phy芯片完成,mac层是soc内部ip完成。这个时候的驱动,就是配置soc内部的ip,分别去访问mac层和物理层芯片。那传输层和网络层呢,就是kernel内部实现的tcp/ip协议。应用层,就是windows/linux上面写的application程序,这都是常规操作。
这个时候,大家有没有想过,如果是想加快报文处理的速度,怎么用软硬结合实现呢?其实有一个思路是这样的,传输层只用udp,这样不用超时重传。网络层限制报文大小,这样不用分包。mac层和物理层呢,则不变。有了这个思路,其实就可以把应用层以下的code全部ip话,上层报文分发下来,直接udp送出去,没有了tcp/ip协议栈,每一步都是硬件完成,这样的处理速度,肯定是一般芯片没有办法比拟的。而上层应用来说,除了udp和报文大小做了一点限制之外,其他的使用基本和原来一样。但整体效率高了很多。