拿到这块板子已经有一个多月了,处理器是三星公司的S5PV210AH-A0,主频最高可达1GHz,ARM CortexTM-A8内核,v7精简指令集,512MB DDR2 RAM,4GB 8-bit eMMC,这配置是相当高了。配备7寸的LCD显示屏,外部接口有17路外部中断GPIO,4路ADC,3路UART,1路SPI,2路PWM。
首先拿到板子启动它自带的是andorid4.0系统,工作中要用的是QT,于是就折腾到内核和文件系统,学习如何下载内核和文件系统,理解板子带的demo,读配置bash,后来还自己编译了一遍QT4.8.6,因为板子自带的是QT4.5.0,而我电脑上装的QT Creater版本是3.0.1版本,在加载kits的时候报错,这也是自己觉得云里雾里的原因才折腾的。
今天下载做了两天的界面程序到板子中运行的时候,遇到了问题,内存溢出,启动程序后系统自动的吧程序进程杀死了,于是使我意识到了在ARM平台上写程序不能像我在PC上写程序那样了,不计较对象的定义方式,直接在头文件中吧要用到的对象全部给定义出来,导致在ARM板子上出错,实验得出的经验呐。在对界面的设计的时候需要用到图片,最好的方式是通过调用,而不是将图片编译到代码中去。初步以为这个做界面的框架用不了多长时间,真正的去做的时候才感觉有很多问题需要解决,项目要求这周把界面框架做出来,我还以为这是一件很好完成的事情,结果这不是想象中的容易啊。
问提情况如下:
我搭建的界面框架有很多界面,其中就必然有一个主界面,我把主界面的按钮点击要进入的界面类全部在主界面类的头文件中定义为私有对象,如下
private: Ui::MainWindow *ui; Dialog_HistoryData historydata;//定义历史数据对话框对象 Dialog_BeginDetection begindetection;//定义开始测试对话框对象 Dialog_Setting setting;//定义设置对话框对象 Dialog_SystemDebug systemdebug;//定义系统调试对话框对象 Dialog_Help help;//定义帮助对话框对象 Dialog_history_select history_select;//定义选择历史记录查看对话框对象
这样就出现了上述的问题,主界面的这个类太大了,内存溢出(这里是不是内存溢出?按理说我的板子配置这么高,只跑了一些界面设计内容和加载了数据库以及很小的背景图片就出现了问题)。
Out of memory: Kill process 1608 (program) score 943 or sacrifice childKilled process 1608 (program) total-vm:400672kB, anon-rss:372764kB, file-rss:4kB
经过思考作出以下方面的修改:
类的对象的定义放在使用的地方,在什么时候使用,就在什么时候定义,做到即拿即用,用完归还。这里还遇到了一个问题,就是直接定义对象的时候,没有弹出窗口,而我定义指针对象并new后能够实现弹出窗口,所以这里就有问题。
//点击实时浓度按钮 void MainWindow::on_pushButton_RealTimeConcentration_clicked() { real_time_concentration *widget_real; widget_real = new real_time_concentration(); widget_real->showFullScreen(); qDebug()<<"widget_real.show();"; }