【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
大家所能想到的嵌入式上位机开发,如果是linux,同时涉及到嵌入式的话,一般都会认为是把pc linux的软件port到板子上,就是嵌入式开发。狭义的说,软件+外设开发就是嵌入式开发的全部。这种想法其实是错误的。嵌入式平台上面,除了cpu之外,其实还有很多的计算资源可以使用。嵌入式开发板并不是只有cpu可以处理数据,其他很多的硬加速都可以的。
所以大家说的嵌入式开发,并不仅仅是linux+arm+外设接口+开源代码,如果真的那么做,其实做出来的东西是很难有竞争力的。
1、复用多核cpu
cpu执行数据的时候,不要只用一个core,尽量并发多个core一起使用。io处理的时候,需要并发处理,有数据计算的时候也需要进行并发计算。
2、使用gpu
现在的gpu并不只是处理3d数据,对于很多应用本身并不需要进行3d渲染,这种情况下就可以用gpu来处理我们需要的数据。一般来说,nvidia的板子用cuda即可;不是nvidia的板子,用opencl也可以进行编程。而且nvidia的板子,通常价格不菲,对于一些国产的板子,其实用gpu来处理是比较合理的做法。
3、mcu
目前很多soc板子都带有mcu芯片。特别是一些原来车规级的芯片,慢慢转到工业级别之后,上面的mcu也是可以使用的。使用方法一般就是把mcu当成一个特殊的驱动来处理。当然这个mcu也是可以进行编程处理的,编程方法就是正常的keil编程。
4、dsp
dsp主要是特定公司的soc。比如说ti公司的芯片,很多默认是arm+dsp,这种情况下,除了cpu可以用来进行数据处理,dsp也可以用来处理数据。另外,一些soc带有音频dsp处理的ip,这种情况下也是可以用来进行编程的。
5、npu
随着ai大模型的引入,运来越多的model被搬到了板子上面。这个时候,如果还是用cpu来处理model数据,是非常不划算的做法。这个时候,应该把model翻译成npu可以识别的model,用npu处理model,要比纯cpu处理的速度,要快很多。
目前rk的npu使用的比较多,资料也比较多,大家可以学一学。
6、硬件ip加速
很多常用的功能,其实soc公司都做了硬件加速。这里面包括了图像的编解码、音频的编解码、视频的编解码、图像isp处理、校验crc、加解密处理、数据dma、屏幕显示加速处理等等。这里面,注意图像的编解码和视频编解码是两码事,图像偏重于帧内压缩,视频偏重于帧间压缩。
总之,板子上能加速的部分,一定要尽量用起来,这样才能把性能做到最优。这个时候还有一种比较讨巧的办法,那就是多使用厂家的sdk。他们的sdk,一般都会把这些加速内容做一个封装,封装之后的接口就是我们需要的东西。
7、fpga加速
还有一些芯片是包含fpga,类似于xilinx公司的zynq,里面除了arm,还包含了fpga,这个时候就可以把fpga用起来。对于特定的算法,如果能够改写成ip,将会极大提高产品的竞争力。当然,这比较适合附加值比较大的产品。
8、汇编优化
最后,就算是用cpu处理软件,还是有很多可以做的。比如说,我们可以找到软件的性能瓶颈点,能dma处理的dma处理,遇到io阻塞的及时剥离,能arm neon汇编优化的就汇编优化。这样的话,最终也会极大地提高软件的性能。