第六十一篇:移植不带系统应用程序到有ARM-LINUX系统的S32V234上

上一篇讲了一下有统的应用程序移植,相对来说比较简单

从今天开始要移植一个没有系统的应用程序到S32V234上,处理预处理需要用到ISP外,还要使用APEX,还要使用linux系统管理加载文件,原来的应用程序中的文件加载管理是自定义的文件打开和读取函数

先分析一下需要做的工作,先抬头看路,后埋头拉车

1、读懂程序:核兴算法实现原理,读懂应用程序调用硬件资源的相互关系

2、再次读应用工程程序,需要区分那些是需要linux系统代替进行管理硬件资源的部分,那些是现有linux平台已经提供了硬件资源只需要应用层接口函数调用就可以的,一些配置文件的在lin5ux系统中的加载和运行方式,linux文件管理等

3、从应用程序的主函数开始,一步步添加到当前的平台中,在A53上先实现独立的功能

4、在A53上已经实现的功能函数,将需要使用APEX处理的部分分块化转移到APEX处理,需要预处理的部分,转移到ISP部分进行相关的处理

5、最终功能的配置,一些配置文件在移植中可能被暂时放置,整个应用程序移植完毕后,可再次配置这些文件,修改核当前平台上相关的参数设置(如接口函数的图像大小,摄像头的内、外参,摄像头的角度,车宽等参数),确保源程序功能实现完整。

初步移植的思想按照以上的方法来进行,有大神路过的请指教一下!!!


初步的了解后,发现这个别人优化3年的程序,确实太多文件了,所以,决定除了部分配置进行借鉴之外,主要的算法直接自己写出来,然后把借鉴的配置算法添加进去,主要考虑到这个算法、配置文件、硬件交叉在一起,而且基本是全部使用了类,和模板,进行了重复叠加的继承,感觉好累,主程序工程下的头文件有113个,这还不包括与驱动交叉的调用的文件和硬件驱动初始化文件,所以自己感觉与其移植,还不如自己写算了,至于大量的配置,萝卜白菜各有所爱,可以自己写出来,这都是小事。


下面说一堆废话!!!


说到这里,我根据自己的经验,总结一下有系统和没有系统的程序框架有什么区别(不讲硬件结构的影响)

1、有系统:应用程序与底层的驱动没有直接的关系,硬件资源有linux系统完成,所以应用程序移植非常好做(前提是驱动这部分已经完成,算法写好了),所以分出了应用工程师和驱动工程师。驱动偏向于硬件配置(驱动的移植、添加),所以对硬件必须要懂,能看懂硬件的技术手册,对linux驱动原理要非常熟悉,应用工程师就是要使用linux系统文件接口把自己的算法和硬件接起来

有系统,按照传统的分类,很确定,就是三层(包含硬件):

最上一层:应用层。放置应用算法,确定并行处理消息传递,UI等。说白了就是把没有系统的应用工程去掉硬件、底层相关的部分,全部放到应用层

中间层:linux系统驱动层:连接硬件和软件之间的层,放置硬件驱动等。

最底层:班级支持包,和硬件密切相关,对硬件的内存管理,设置启动等。

2、没有系统(在已经有板级支持包的基础上):我觉得程序设计部分也可以分为隐形的三层,

第一层就是纯接口的匹配和定义的文件,主要是定义IO口,硬件模块的接口定义,主控芯片的引出角接口定义 

第二层就是应用程序之间通信,包括算法之间的消息传递,比如一张图像从上一个处理后传递给下一个处理,还有硬件接口的消息响应,按键,红外接收器,等等,硬件接口的响应响应需要有专门的接收和发送函数,以确保数据接收的准确性和可靠性,属于外部与控制系统的通信。算法消息传递一般不需要特殊处理,因为程序是顺序流执行,比较成熟的算法工程师会写检测函数去确保每一个环节不会出问题,便于测试和检查程序。

第三层:算法,一个模块封装成一个部分,这样组合起来的算法的移植性好,模块可以被方便快捷的重用和更改。算法和数据结构有关算法的核心是数据结构+数学公式,用定义的数据结构实现一个公式,数据结构是为了方便算法的处理和适应不同的处理对象,一副图像可以封装在一个有长、宽、高、深度、存储的类型等组成的一个类里面,要对一副图像处理的时候,可以方便的使用这些参数,一个好的程序,定义的数据类不能太多,太多会导致重复。


才疏学浅,上面简单讲一下,欢迎拍砖,共同进步!!!



好了,快1个多月了,今天是11.24,基本的核心算法,自己已经写完了,主程序1000多行,感觉比原工程文件里面30多个cpp文件要爽的多,然后就可以轻松的放置到开发板上了,回过头看一下,觉得对于移植走了很多弯路,没有系统的工程移植到带系统的上面,如果能力不足,建议走的路线是:

了解硬件系统---读懂核心算法----分解功能----判断算法硬件依赖----按照算法思路在PC自己写出算法(可以将原工程中的算法部分copy过来)----将算法放置到arm-Linux的系统上


上面的移植方法对于大的工程文件比较适合,如果是小的工程,文件不是很多,可以理清楚算法的硬件依赖,可以直接移植过去。


你可能感兴趣的:(S32V234)