当前位置:  编程技术>移动开发
本页文章导读:
    ▪Qt4.8.1 帮助文档无效 用不了 怎么处理        Qt4.8.1 帮助文档无效 用不了 怎么办?       Qt大名鼎鼎的是他的帮助文档非常好,无奈自然状态下安好qt4.8.1后竟然用不了,连输入Widget尽然都查找不到。以前qt4.8.0下,是可以的。不需要配.........
    ▪ Java中堆跟栈的区别        Java中堆和栈的区别堆和栈最主要的区别是:栈是指向一个对象,如String str="abc";而堆每次都要创建一个对象,如String str=new String("abc"); Java的堆是一个运行时数据区,类的(对象从中分配空间.........
    ▪ NK.bin跟NK.nb0详解       NK.bin和NK.nb0详解1.       NK.bin Bin:Microsoft Windwos CE binary image data format(.bin)文件格式中包含若干个独立的记录(record),以记录(record)为单位来组织数据,每个record都包含了起始地址,长度,.........

[1]Qt4.8.1 帮助文档无效 用不了 怎么处理
    来源: 互联网  发布时间: 2014-02-18
Qt4.8.1 帮助文档无效 用不了 怎么办?

       Qt大名鼎鼎的是他的帮助文档非常好,无奈自然状态下安好qt4.8.1后竟然用不了,连输入Widget尽然都查找不到。以前qt4.8.0下,是可以的。不需要配置的,这里要先配置一下:

点QtCreator----工具------选项------(左侧栏)帮助-----(右侧栏)文档-----点击添加, 会自动打开QtSdk安装的位置。找到Documentation,选择qt.qch(56.2M),就可以了。或者将里面的所有文件都添加进去也可以。

上张图:






    
[2] Java中堆跟栈的区别
    来源: 互联网  发布时间: 2014-02-18
Java中堆和栈的区别

堆和栈最主要的区别是:栈是指向一个对象,如String str="abc";而堆每次都要创建一个对象,如String str=new String("abc");

Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、new array、a new array和multi a new array等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。 

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类 型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 

栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: 
int a = 3; 
int b = 3; 
编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。 

这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。 

要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。 

String是一个特殊的包装类数据。可以用: 
String str = new String("abc"); 
String str = "abc"; 
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。 
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。 

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。 
String str1 = "abc"; 
String str2 = "abc"; 
System.out.println(str1==str2); //true 
可以看出str1和str2是指向同一个对象的。 

String str1 =new String ("abc"); 
String str2 =new String ("abc"); 
System.out.println(str1==str2); // false 
用new的方式是生成不同的对象。每一次生成一个。 


因此用第一种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。 

另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的 对象。只有通过new()方法才能保证每次都创建一个新的对象。 
由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。


    
[3] NK.bin跟NK.nb0详解
    来源: 互联网  发布时间: 2014-02-18
NK.bin和NK.nb0详解

1.       NK.bin

Bin:Microsoft Windwos CE binary image data format(.bin)文件格式中包含若干个独立的记录(record),以记录(record)为单位来组织数据,每个record都包含了起始地址,长度,检验码和这个record中包含的数据内容,Platform Builder调用工具RomImage.exe将WINCE内核所有文件以bin格式合并成一个文件(至于RomImage.exe是怎么合成NK.bin的,后面需要好好深入了解),默认文件名为nk.bin。BootLoader又以同样的格式将nk.bin分解成多个文件放到RAM中,NK.bin这个文件在存储上是按照下面的结构来存储的:

 

标记(7)

Image开始地址(1)+Image长度(1) 

备注:上面前7个字节是标记:B000FF,后面00 00 1A 80(801A0000)是Image开始地址,C8 34 0D 02(020D34C8)这个是Image长度

在下圖用了紅色框,框出Record的起始、長度、檢查碼,緊跟的白色框,則是該Record的實際資料內容。


记录0地址+记录0长+记录0校验和+记录0内容(文件内容)

记录1地址+记录1长+记录1校验和+记录1内容(文件内容)

………………………..

也就是

"B000FF/x0A" //7字节大小

ImageStartAddress, ImageLength //8字节大小

RecordAddress, RecordLength, RecordChecksum, Data…….// module/file toc信息

RecordAddress, RecordLength, RecordChecksum, Data…// modulese信息

RecordAddress, RecordLength, RecordChecksum, Data…// files信息

RecordAddress, RecordLength, RecordChecksum, Data为 0x43454345 // ROM signature

RecordAddress, RecordLength, RecordChecksum, Data为 0x43454345 // TOC pointer

RecordAddress, RecordLength, RecordChecksum, Data为 0x43454345 // copylist信息

RecordAddress, RecordLength, RecordChecksum, Data为 0x43454345 // romhdr信息

………………………………

0x00000000 , JumpAddress , 0x00000000 //启动地址startup地址

请注意,最后的record的jumpAddress是OAL层的startup函数的地址,这个函数在/Src/Oal/Oallib/startup.s中定义,通过viewbin –r nk.bin可以看到nk.bin的组织格式:

………………………………….

可以知道OAL层的startup函数的地址是0x802C1AF8

我们在download NK.bin的时候,先是读取出magic number(也就是"B000FF/x0A"),用来判断download的是什么样格式的NK(在这里是bin格式的),接着读取出NK.bin的image start地址及image length,然后就是接下来以record的格式来读取record的数据到RAM中。Bin文件格式可以使得映像文件最下,加载时间短,但需要bootloader给予解释加载才能运行,这个解析的工作是在DownloadBin函数中进行的。

 

2.       NK.nb0

Nb0:nb0文件就是可执行映像的原始Flash映像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式,nb0文件的尺寸比bin大,但是可以直接运行,要生产NK.nb0,就需要在congfig.bib中加入下面的内容

ROMSTART = 80200000

ROMWIDTH = 32

ROMSIZE = 02300000

ROMSTART指WINCE image在内存中的起始地址,ROMWIDTH指数据总线的宽度,ROMSIZE指WINCE image的大小。现在我们的系统的NK.bin大小是26889KB,生成的NK.nb0大小为

现在我们设置ROMSIZE=01A00000,NK.bin=26889KB > 01A0000(26MB),也就是说如果WINCE image大小大于ROMSIZE指定的大小的时候,除了生成NK.nb0之外还会生成NK0.nb1,NK.nb2,….,下图是ROMSIZE=01A00000设置时生成的NK.nb0及NK.nb1的大小和ROMSIZE(01A00000)指定的大小一致的。

而如果把ROMSIZE=00800000时,生成的文件如下:

NK.nb0=NK.nb1=NK.nb2=NK.nb3=8192KB,也就是0x800000,所以从中可以看出NK.nbn的大小时由ROMSIZE来指定的。

如果把ROMSIZE=01B00000时,这时NK.bin=26889KB< 01B0000(27MB),所以只要生成的WINCE image大小小于ROMSIZE指定的大小的时候,就只会生成NK.nb0,见下图:

 

3.       NK.bin和NK.nb0的区别

NK.bin和NK.nb0的区别主要有以下这些区别:

⑴NK.BIN中的内容是被压缩过的,而NK.NB0中的内容是没有压缩的,两者大小的区别是因为在生成过程中BIN会将设定的后面的NULL自动去掉,而NB0就不会。由于NK.NB0是非压缩的数据,里面的数据就是NK.BIN展开以后在内存里面的数据。而NK.BIN是有压缩的数据,里面的数据时压缩以后类似于record的数据,被loader拷贝到内存以后没有区别,由于BIN文件需要解压,因而其下载方式也不一样,通常,通过串口直接下载nb0,pb下载用BIN。

⑵NK.BIN和NK.NB0都可下载到RAM中,如果下载到RAM的是NK.BIN文件,因为是压缩的,显然需要先通过bootloader进行解压才能往NAND Flash中烧写。而如果下载到RAM中的NK.NB0就不需要解压了,可以直接烧写到NAND Flash即可。

⑶NK.NB0就是NK.BIN展开后的文件,bootloader可以支持下载NB0,也可支持下载BIN,一般的做法是对于NB0的文件下载到RAM后就直接烧写到NAND Flash中,对于BIN的文件下载后先解压然后再烧写到NAND Flash上,其实也可以做成BIN烧写到NAND Flash中,然后启动的时候load出来后再解压,但这样会加长启动时间,这种方法一般只会用在NAND Flash空间不够的情况。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3