切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
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实践之两个要点(转)
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
增加
对大容量物理内存的
支持
和永久存储
注册
表是在定制内核工作中常遇到的问题
@H_
502
_62@
advertisement
·
参加活动送话费 还有红包拿
·
国内长途最低价 话费节省80%
·
厉害! 中国网络电话第一品牌
·
话费充值最低价 最后13天!!
·
信不信由你! 30分钟长途免费打
·
柯达Z1275 2099元拿走
·
卡西欧Z75 1599元拿走
·
富士S8000 3399元拿走
·
索尼H7 2899元拿走
·
佳能350D套机 4499元拿走
热点推荐
·
真没想到VB也可以这样用之指针技术
·
禁止QQ登录的方法
·
给你的XML文件做个数字签名
·
ImageReady制作“焰火”小动画
·
Java加密和数字签名编程快速入门
增加
对大容量物理内存的
支持
和永久存储
注册
表是在定制内核工作中常遇到的问题。本篇
文章
将对这两个方面阐述相关的知识并指导读者如何在PB中实现。
对大容量物理内存的
支持
在PC上
增加
物理内存是很方便的,插上内存条后只要自检程序识别,那么桌面操作系统就能够
支持
。而在基于CE的产品上就没那么简单了。如果物理内存大于64MB,就要在定制内核时做一些工作。
一旦内存管理单元(MMU)开始工作,
cpu
就不再直接访问物理内存了,对于运行在x86和ARM系列
cpu
上的CE内核来说,必须先确立物理内存地址同虚拟内存地址的映射关系。这种关系实际是在一个名为OEMAddressTable的表中定义的。这个表在前面的
文章
中已经提到过。CE提供了两种虚拟地址映射
方法
,分别为静态映射和动态映射,这个表属于静态映射
方法
。静态映射的虚拟地址空间只能由内核访问,而动态映射的地址空间可以由
用户
模式的应用程序访问。OEMAddressTable在
文件
%_WINCEROOT%/Public/Common/Oak/Csp/i486/Oal/OEMInit.asm中。在这个
文件
的最后有一段
代码
:
; RAM 0x80000000 -> 0x00000000,size 64M
dd 80000000h,04000000h
dd 0,0
这段
代码
表示将虚拟地址80000000映射到物理地址0,大小为64MB。将04000000h改成实际的物理内存大小,然后保存。接着单击PB
菜单
“Build”-“Open Build Release Directory”,在命令行中先用cd命令进入上述目录,如:
cd %_WINCEROOT%/Public/Common/Oak/Csp/i486/Oal
然后键入下列命令:
build -c
sysgen i486oal
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如下:
; 64 MB of RAM (note: AUTOSIZE will adjust boundary)
IF IMGRAM64
NK 80220000 009E0000 RAMIMAGE
RAM 80C00000 03000000 RAM
UMABUF 83C00000 00400000 RESERVED
ENDIF
假如要
支持
128MB,更改如下:
IF IMGRAM16 !
IF IMGRAM32 !
IF IMGRAM64 !
NK 80220000 009E0000 RAMIMAGE
RAM 80C00000 07000000 RAM
UMABUF 87C00000 00400000 RESERVED
ENDIF
ENDIF
ENDIF
在这里没有更改NK的大小,只是
修改
了RAM的大小。
在config.bib定义之后,还可以在OAL层通过变量或者
函数
更改物理内存的大小,适合设备可能出现
增加
或减小内存的情况。CE的帮助文档介绍了几种
方法
,这里只提一下CreateStaticMapping
函数
。CreateStaticMapping
函数
作为config.bib
文件
的补充,适合在
用户
模式的应用程序或驱动程序中
调用
,
调用
这个
函数
能够将指定首地址的物理内存块映射到虚拟地址空间,
函数
返回虚拟地址。虚拟地址范围在C400 0000 到 E000 0000之间,这是内核的地址空间,只能由内核访问。相比较VirtualCopy
函数
用于动态地将指定首地址的物理内存块映射到虚拟地址空间,这个虚拟地址空间一般为
用户
进程的地址空间,因为VirtualCopy
函数
被设计专用于驱动程序
调用
,它常被用于将一个物理内存块映射到不同的虚拟地址空间。
实现永久保存
注册
表数据
关于
注册
表在前面的
文章
中已经介绍过了,这里只讲述如何实现永久保存
注册
表数据。
注册
表类型分为基于对象存储的
注册
表和基于HIVE的
注册
表,在定制内核的时候只能选择其中一种。从理论上讲这两种
注册
表都能够实现永久保存
注册
表数据,但是采用不同的类型会影响CE的启动顺序和启动速度,还会影响内存的使用量。我还是趋向于采用基于HIVE的
注册
表来实现永久保存
注册
表数据,这也是一个发展趋势。在讲解之前先简单描述如果CE采用基于HIVE的
注册
表,那么在启动时如何加载已经保存的
注册
表数据:
1、nk.exe执行,启动filesys.exe。
2、filesys.exe加载引导HIVE,此时引导HIVE位于nk.bin解压之后的
文件
中。
3、filesys.exe启动device.exe,之后处于等待状态,等待device.exe将包含系统HIVE的
文件
系统和存储设备的驱动程序加载完毕。而这个
文件
系统和存储设备的驱动程序存在于引导HIVE中。
4、device.exe加载上述所说的
文件
系统驱动程序和存储设备驱动程序,使之开始工作。之后device.exe处于等待状态。
5、filesys.exe被唤醒,加载并且安装系统HIVE。之后filesys.exe处于等待状态。
6、nk.exe按照系统HIVE的信息开始执行初始化工作。其中
包括
加载驱动程序和启动一些应用程序。其中加载驱动程序一般由device.exe执行,而启动应用程序由filesys.exe执行。这时device.exe和filesys.exe已经被唤醒。
因为引导HIVE和系统HIVE肯定有重复的地方,所以可能出现重复加载了驱动程序或者重复启动了应用程序。为此,CE允许在描述驱动程序的
注册
表信息中加入防止重复的标志,而应用程序可以采用事件对象来防止重复启动,如device.exe。
下面讲述如何设置基于HIVE的
注册
表(假如保存系统HIVE的是FAT
文件
系统):
1、在PB中加入"Hive-based Registry",如果是Geode平台,再加入BSP_ENABLE_FSREGHIVE环境变量。
2、打开platform.reg,找到如下信息:
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE/init/BootVars]
"SYSTEMHIVE"="Documents and Settings//system.hv"
"PROFILEDIR"="Documents and Settings"
"Start DevMgr"=dword:0
IF BSP_ENABLE_FSREGHIVE
"Start DevMgr"=dword:1
ENDIF
; END HIVE BOOT SECTION
"SYSTEMHIVE"的值为系统HIVE
文件
的路径。"Start DevMgr"是一个布尔值,指示是否开始就执行设备管理器device.exe,按照CE帮助文档的说法,只有想把系统HIVE存储在对象存储中才在此设置为0,所以一般都要设置为1。
3、如果是多
用户
,可以在上述的
注册
表位置下输入"DefaultUser"="<username>",指定默认的
用户名
。如果是单
用户
系统,可以不设置。
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”下。
5、在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之间的所有驱动程序的
注册
表信息中都加入下列一个标志:
"Flags"=dword:1000
这个标志是一个位掩码,它可以和其它已经存在的"Flags"或运算。值1000表示此驱动程序只加载一次,这样device.exe就不会把当前驱动程序加载两次了。
6、在包含系统HIVE的存储设备的驱动程序的
注册
表信息中,加入如下标志(假设是硬盘):
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]
"MountFlags"=dword:2
这个标志表示这个存储设备包含系统HIVE
文件
。
按照如上所述设置后的内核就能实现永久存储
注册
表数据了。对于保存
注册
表数据的执行动作在此必须阐述清楚:
正常情况下,CE能够保证重要的
注册
表数据能够从内存刷到(Flush)永久存储器上。但是这并不能完全保证所有数据都能完整地保存而不丢失,所以要保证万无一失,应该主动地
调用
RegFlushKey
函数
强制将内存中的数据刷到永久存储器上。这个
函数
的参数只有一个,就是
注册
表分支。CE还
增加
一个
注册
表项(如下所示),它的作用是每当
函数
RegCloseKey被
调用
时都
自动
调用
RegFlushKey
函数
。
[HKEY_LOCAL_MACHINE/init/BootVars]
"RegistryFlags"=dword:1
如果CE在启动过程中发现系统HIVE出现
错误
,它会
自动
删除
文件
并创建一个默认的系统HIVE
文件
,如果出现下面的
注册
表项,说明发生了这种事情。
[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()用法
打印模型
反卷积
卷积