嵌入式硬件专家之路:F103芯片软件开发仿真详解

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        一般的软件开发,都是指的是pc软件开发。既然是pc软件,那么几乎不用担心各种资源的掣肘,这里面就包括了cpu资源、ddr资源、存储资源和网络资源。但是,嵌入式不一样,大多数情况下,嵌入式板子的资源都是很少的。不管是mcu,还是soc,像树莓派这么资源丰富的板子,还是很少的。但是我们实际开发的时候,又要涉及到软硬件交互,怎么做才会效率比较高呢?

1、建立统一的硬件接口

        有的时候,我们为了降成本,用一款芯片代替另外一款芯片,这都是常有的事情。如果是这种情况,不妨构建统一的硬件接口。比如说,linux下面的统一驱动接口就不错,类似于这样,

int open(char* dev);
int close(int handle);
int read(int handle, void* pmem, int size);
int write(int handle, void* pmem, int size);
int ioctl(int handle, int opr_mode, int opr_data);

2、软硬件分离

        建立了统一的硬件接口之后,这样替换芯片的部分,肯定是不用担心了。毕竟每次替换的时候,只需要适配好对应的硬件接口就可以了。但是还是存在一个问题,很多时候,我们开发只需要开发纯业务部分,这个时候使用最多的就是按键和显示,可能还会有少部分网络,如果全部都是板子上面进行打印、调试,其实这样效率是非常低的。这种情况下,不如多定义几个虚拟设备函数,软件就可以跑在pc电脑,或者是更高级的arm板子上运行,一下子把开发效率拉起来。

3、构建仿真编译脚本

        原先的代码可能是用keil,或者是qt creator编译的。这个时候如果是用电脑,或者高性能开发板进行仿真测试,一般需要自己编写编译脚本。这里有两种方法供大家参考,一种是自己编写makefile,还有一种就是构建visual studio solution工程。和设备强相关的内容,可以不包含在内,只有和业务耦合比较紧的代码,才会添加到编译脚本里面去。

4、按键部分用电脑键盘仿真

        很多嵌入式板子上面都有按键功能。这种情况下,可以用电脑的键盘进行仿真处理。个人比较常用的方法,就是使用qt库来解决,因为在MainWindow下面有两个函数,一个是keyPressEvent,一个是keyReleaseEvent,利用这两个函数就可以实现键盘的仿真。同时,键盘按键数量多,可以满足绝大多数场景的需要。

        例如,我们在一个低端arm soc开发界面,这种情况下就可以用树莓派来进行仿真。仿真的时候,用mobaxterm直接命令行启动界面,并且通过键盘仿真的方式进行交互,就可以达到快速开发的目的。

5、显示部分使用跨平台库

        有些显示库天生是支持跨平台的。比如说qt库,支持windows,支持linux;支持x86,还支持arm;支持32位,还支持64位。对于这些库,本身已经为跨平台使用做了很多的准备。所以相同的代码,几乎不需要很大的改动,就可以用更高级的平台来进行仿真。资源多,调试也更方便一点。

6、用高性能的arm板子仿真性能一般的arm板子

        有的soc板子,虽然跑的还是arm,系统也是linux,但板子本身资源非常少。而另外一部分板子,资源多,价格便宜,本身还带有编译环境、调试环境。类似于树莓派就是这样的板子。所以,对于一些不是那么复杂的功能,完全可以用高性能的arm板子,模拟一般性能的arm板子来进行调试。这样调试好了之后,直接port到低性能的板子上面去,这也是可以的。

7、使用windows进行软件仿真

        如果不习惯linux+arm+串口这种开发模式,或者是不习惯ssh、telenet的调试方式,还有一种方法,就是用windows进行仿真调试。只不过调试的时候没有前面高性能arm板子的方式来的方便。毕竟在同样是arm,很多头文件、库函数、甚至是编译链接都不需要修改。但是回到 windows,很多的编译都要打桩,这种情况下,做好一些特定函数、特定模块的仿真可能更加务实一点。

        或者是虽然用pc仿真,但是用x86 ubuntu来做,可能更好一点。

作者:嵌入式-老费

物联沃分享整理
物联沃-IOTWORD物联网 » 嵌入式硬件专家之路:F103芯片软件开发仿真详解

发表回复