切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
VB
Platform Builder实践之两个要点(转)
Platform Builder实践之两个要点(转)
2019-09-26
VB
前端之家
前端之家
收集整理的这篇文章主要介绍了
Platform Builder实践之两个要点(转)
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
增加
对大容量物理内存的
支持
和永久存储
注册
表是在定制内核工作中常遇到的问题
advertisement
·
参加活动送话费 还有红包拿
·
国内长途最低价 话费节省80%
·
厉害! 中国网络电话第一品牌
·
话费充值最低价 最后13天!!
·
信不信由你! 30分钟长途免费打
·
柯达Z1275 2099元拿走
·
卡西欧Z75 1599元拿走
·
富士S8000 3399元拿走
·
索尼H7 2899元拿走
·
佳能350D套机 4499元拿走
热点推荐
·
真没想到VB也可以这样用之指针技术
·
禁止QQ登录的方法
·
给你的XML文件做个数字签名
·
ImageReady制作“焰火”小动画
·
Java加密和数字签名编程快速入门
增加
对大容量物理内存的
支持
和永久存储
注册
表是在定制内核工作中常遇到的问题。本篇
文章
将对这两个方面阐述相关的知识并指导读者如何在PB中实现。 @H_
301
_299@ @H_
301
_299@ 对大容量物理内存的
支持
@H_
301
_299@ @H_
301
_299@ 在PC上
增加
物理内存是很方便的,插上内存条后只要自检程序识别,那么桌面操作系统就能够
支持
。而在基于CE的产品上就没那么简单了。如果物理内存大于64MB,就要在定制内核时做一些工作。@H_
301
_299@ @H_
301
_299@ 一旦内存管理单元(MMU)开始工作,
cpu
就不再直接访问物理内存了,对于运行在x86和ARM系列
cpu
上的CE内核来说,必须先确立物理内存地址同虚拟内存地址的映射关系。这种关系实际是在一个名为OEMAddressTable的表中定义的。这个表在前面的
文章
中已经提到过。CE提供了两种虚拟地址映射
方法
,分别为静态映射和动态映射,这个表属于静态映射
方法
。静态映射的虚拟地址空间只能由内核访问,而动态映射的地址空间可以由
用户
模式的应用程序访问。OEMAddressTable在
文件
%_WINCEROOT%/Public/Common/Oak/Csp/i486/Oal/OEMInit.asm中。在这个
文件
的最后有一段
代码
:@H_
301
_299@ @H_
301
_299@
; RAM 0x80000000 -> 0x00000000,size 64M@H_
301
_299@ @H_
301
_299@ dd 80000000h,04000000h@H_
301
_299@ @H_
301
_299@ dd 0,0
@H_
301
_299@ 这段
代码
表示将虚拟地址80000000映射到物理地址0,大小为64MB。将04000000h改成实际的物理内存大小,然后保存。接着单击PB
菜单
“Build”-“Open Build Release Directory”,在命令行中先用cd命令进入上述目录,如:@H_
301
_299@ @H_
301
_299@ cd %_WINCEROOT%/Public/Common/Oak/Csp/i486/Oal@H_
301
_299@ @H_
301
_299@ 然后键入下列命令:@H_
301
_299@ @H_
301
_299@
build -c@H_
301
_299@ @H_
301
_299@ sysgen i486oal
@H_
301
_299@ build命令根据
配置文件
内容
编译整个目录,sysgen批处理将build 编译的
文件
i486oal.lib
文件
复制到CE的安装目录和内核工程目录下。我安装的BSP是基于x86的,所以相应目录为%_WINCEROOT%/PUBLIC/COMMON/OAK/LIB/X86/RETAIL和%_PROJECTROOT%/cesysgen/oak/lib/x86/retail两个目录。上一步做完之后,接着开始
修改
config.bib
文件
。在以前的
文章
中讲过在config.bib
文件
中定义内存区域。在config.bib中预设的配置没有超过64MB的,所以要自己手工
添加
。可根据原有的IMGRAM64配置更改,原有的IMGRAM64如下:@H_
301
_299@ @H_
301
_299@
; 64 MB of RAM (note: AUTOSIZE will adjust boundary)@H_
301
_299@ @H_
301
_299@ IF IMGRAM64@H_
301
_299@ @H_
301
_299@ NK 80220000 009E0000 RAMIMAGE@H_
301
_299@ @H_
301
_299@ RAM 80C00000 03000000 RAM@H_
301
_299@ @H_
301
_299@ UMABUF 83C00000 00400000 RESERVED@H_
301
_299@ @H_
301
_299@ ENDIF
@H_
301
_299@ 假如要
支持
128MB,更改如下:@H_
301
_299@ @H_
301
_299@
IF IMGRAM16 !@H_
301
_299@ @H_
301
_299@ IF IMGRAM32 !@H_
301
_299@ @H_
301
_299@ IF IMGRAM64 !@H_
301
_299@ @H_
301
_299@ NK 80220000 009E0000 RAMIMAGE@H_
301
_299@ @H_
301
_299@ RAM 80C00000 07000000 RAM@H_
301
_299@ @H_
301
_299@ UMABUF 87C00000 00400000 RESERVED@H_
301
_299@ @H_
301
_299@ ENDIF@H_
301
_299@ @H_
301
_299@ ENDIF@H_
301
_299@ @H_
301
_299@ ENDIF
@H_
301
_299@ 在这里没有更改NK的大小,只是
修改
了RAM的大小。@H_
301
_299@ @H_
301
_299@ 在config.bib定义之后,还可以在OAL层通过变量或者
函数
更改物理内存的大小,适合设备可能出现
增加
或减小内存的情况。CE的帮助文档介绍了几种
方法
,这里只提一下CreateStaticMapping
函数
。CreateStaticMapping
函数
作为config.bib
文件
的补充,适合在
用户
模式的应用程序或驱动程序中
调用
,
调用
这个
函数
能够将指定首地址的物理内存块映射到虚拟地址空间,
函数
返回虚拟地址。虚拟地址范围在C400 0000 到 E000 0000之间,这是内核的地址空间,只能由内核访问。相比较VirtualCopy
函数
用于动态地将指定首地址的物理内存块映射到虚拟地址空间,这个虚拟地址空间一般为
用户
进程的地址空间,因为VirtualCopy
函数
被设计专用于驱动程序
调用
,它常被用于将一个物理内存块映射到不同的虚拟地址空间。@H_
301
_299@ @H_
301
_299@ 实现永久保存
注册
表数据@H_
301
_299@ @H_
301
_299@ 关于
注册
表在前面的
文章
中已经介绍过了,这里只讲述如何实现永久保存
注册
表数据。@H_
301
_299@ @H_
301
_299@
注册
表类型分为基于对象存储的
注册
表和基于HIVE的
注册
表,在定制内核的时候只能选择其中一种。从理论上讲这两种
注册
表都能够实现永久保存
注册
表数据,但是采用不同的类型会影响CE的启动顺序和启动速度,还会影响内存的使用量。我还是趋向于采用基于HIVE的
注册
表来实现永久保存
注册
表数据,这也是一个发展趋势。在讲解之前先简单描述如果CE采用基于HIVE的
注册
表,那么在启动时如何加载已经保存的
注册
表数据:@H_
301
_299@ @H_
301
_299@ 1、nk.exe执行,启动filesys.exe。@H_
301
_299@ @H_
301
_299@ 2、filesys.exe加载引导HIVE,此时引导HIVE位于nk.bin解压之后的
文件
中。@H_
301
_299@ @H_
301
_299@ 3、filesys.exe启动device.exe,之后处于等待状态,等待device.exe将包含系统HIVE的
文件
系统和存储设备的驱动程序加载完毕。而这个
文件
系统和存储设备的驱动程序存在于引导HIVE中。@H_
301
_299@ @H_
301
_299@ 4、device.exe加载上述所说的
文件
系统驱动程序和存储设备驱动程序,使之开始工作。之后device.exe处于等待状态。@H_
301
_299@ @H_
301
_299@ 5、filesys.exe被唤醒,加载并且安装系统HIVE。之后filesys.exe处于等待状态。@H_
301
_299@ @H_
301
_299@ 6、nk.exe按照系统HIVE的信息开始执行初始化工作。其中
包括
加载驱动程序和启动一些应用程序。其中加载驱动程序一般由device.exe执行,而启动应用程序由filesys.exe执行。这时device.exe和filesys.exe已经被唤醒。@H_
301
_299@ @H_
301
_299@ 因为引导HIVE和系统HIVE肯定有重复的地方,所以可能出现重复加载了驱动程序或者重复启动了应用程序。为此,CE允许在描述驱动程序的
注册
表信息中加入防止重复的标志,而应用程序可以采用事件对象来防止重复启动,如device.exe。@H_
301
_299@ @H_
301
_299@ 下面讲述如何设置基于HIVE的
注册
表(假如保存系统HIVE的是FAT
文件
系统):@H_
301
_299@ @H_
301
_299@ 1、在PB中加入"Hive-based Registry",如果是Geode平台,再加入BSP_ENABLE_FSREGHIVE环境变量。@H_
301
_299@ @H_
301
_299@ 2、打开platform.reg,找到如下信息:@H_
301
_299@ @H_
301
_299@
; HIVE BOOT SECTION@H_
301
_299@ @H_
301
_299@ [HKEY_LOCAL_MACHINE/init/BootVars]@H_
301
_299@ @H_
301
_299@ "SYSTEMHIVE"="Documents and Settings//system.hv"@H_
301
_299@ @H_
301
_299@ "PROFILEDIR"="Documents and Settings"@H_
301
_299@ @H_
301
_299@ "Start DevMgr"=dword:0@H_
301
_299@ @H_
301
_299@ IF BSP_ENABLE_FSREGHIVE @H_
301
_299@ @H_
301
_299@ "Start DevMgr"=dword:1@H_
301
_299@ @H_
301
_299@ ENDIF @H_
301
_299@ @H_
301
_299@ ; END HIVE BOOT SECTION
@H_
301
_299@ "SYSTEMHIVE"的值为系统HIVE
文件
的路径。"Start DevMgr"是一个布尔值,指示是否开始就执行设备管理器device.exe,按照CE帮助文档的说法,只有想把系统HIVE存储在对象存储中才在此设置为0,所以一般都要设置为1。@H_
301
_299@ @H_
301
_299@ 3、如果是多
用户
,可以在上述的
注册
表位置下输入"DefaultUser"="<username>",指定默认的
用户名
。如果是单
用户
系统,可以不设置。@H_
301
_299@ @H_
301
_299@ 4、保证将包含系统HIVE的
文件
系统驱动程序的
注册
表信息和存储设备的驱动程序的
注册
表信息被包含在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之间,在这两个语句之间的
注册
表数据全部属于引导HIVE。假如我们将系统HIVE
文件
system.hv存放在硬盘上,并采用FAT
文件
系统。那么就要将[HKEY_LOCAL_MACHINE/System/StorageManager/FATFS]和[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]移动到“; HIVE BOOT SECTION”下。@H_
301
_299@ @H_
301
_299@ 5、在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之间的所有驱动程序的
注册
表信息中都加入下列一个标志:@H_
301
_299@ @H_
301
_299@
"Flags"=dword:1000
@H_
301
_299@ 这个标志是一个位掩码,它可以和其它已经存在的"Flags"或运算。值1000表示此驱动程序只加载一次,这样device.exe就不会把当前驱动程序加载两次了。@H_
301
_299@ @H_
301
_299@ 6、在包含系统HIVE的存储设备的驱动程序的
注册
表信息中,加入如下标志(假设是硬盘):@H_
301
_299@ @H_
301
_299@
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]@H_
301
_299@ @H_
301
_299@ "MountFlags"=dword:2
@H_
301
_299@ 这个标志表示这个存储设备包含系统HIVE
文件
。@H_
301
_299@ @H_
301
_299@ 按照如上所述设置后的内核就能实现永久存储
注册
表数据了。对于保存
注册
表数据的执行动作在此必须阐述清楚:@H_
301
_299@ @H_
301
_299@ 正常情况下,CE能够保证重要的
注册
表数据能够从内存刷到(Flush)永久存储器上。但是这并不能完全保证所有数据都能完整地保存而不丢失,所以要保证万无一失,应该主动地
调用
RegFlushKey
函数
强制将内存中的数据刷到永久存储器上。这个
函数
的参数只有一个,就是
注册
表分支。CE还
增加
一个
注册
表项(如下所示),它的作用是每当
函数
RegCloseKey被
调用
时都
自动
调用
RegFlushKey
函数
。@H_
301
_299@ @H_
301
_299@
[HKEY_LOCAL_MACHINE/init/BootVars]@H_
301
_299@ "RegistryFlags"=dword:1
@H_
301
_299@ 如果CE在启动过程中发现系统HIVE出现
错误
,它会
自动
删除
文件
并创建一个默认的系统HIVE
文件
,如果出现下面的
注册
表项,说明发生了这种事情。@H_
301
_299@ @H_
301
_299@
[HKEY_LOCAL_MACHINE] "RegPersisted"=dword:1
上一篇:使用VB将Excel导入到Sql中
下一篇:30个优秀.net在线学习资源站点
猜你在找的VB相关文章
VB Format函数
Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------...
作者:前端之家 时间:2020-08-07
vb6/ASP FORMAT MM/DD/YYYY
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTi...
作者:前端之家 时间:2020-08-07
VB.net 捕获项目全局异常
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的...
作者:前端之家 时间:2020-08-07
实现用VB.Net/(C#)开发K/3 BOS 插件的真正可行方法
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,...
作者:前端之家 时间:2020-08-07
vb,wps,excel 分裂
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m...
作者:前端之家 时间:2020-08-07
VB.NET MYSQL DataGridView 增删改查(INSERT,SELECT,UPDATE,DELETE)
Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS ...
作者:前端之家 时间:2020-08-07
VB.NET 使用ADODB連接資料庫滙出到EXCEL
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop Private Sub A1() Di...
作者:前端之家 时间:2020-08-07
vb.net 多线程運用 ping
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class F...
作者:前端之家 时间:2020-08-07
VB等待进程结束
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5...
作者:前端之家 时间:2020-08-07
vb中去掉string数组的一部分
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时...
作者:前端之家 时间:2020-08-07
编程分类
PHP
Java
Java SE
Python
C#
C&C++
Ruby
VB
asp.Net
Go
Perl
netty
Django
Delphi
Jsp
.NET Core
Spring
Flask
Springboot
SpringMVC
Lua
Laravel
Mybatis
Asp
Groovy
ThinkPHP
Yii
swoole
最新文章
• VB Format函数
• vb6/ASP FORMAT MM/DD/YYY
• VB.net 捕获项目全局异常
• 实现用VB.Net/(C#)开发K/3
• vb,wps,excel 分裂
• VB文件 hash 查看器
• VB.NET MYSQL DataGridVie
• VB.NET 使用ADODB連接資料
• vb.net 多线程運用 ping
• VB等待进程结束
热门标签
更多 ►
文件时间
pythonm
相等性
PHP Warning
时间问题
问题解决
pcntl_signal
采样点
wav模块
动态文本
调用频率限制
对外暴露
多个访问请求
更新数据表
模型结构
type()方法
比较速度
手写体
sobel算子
保存模型
Image类
nn.Conv2d
pytorch1.0
kaggle
DCGAN
交并比
range()用法
打印模型
反卷积
卷积