Platform Builder之旅(五)

本文介绍了Windows CE中的文件系统类型,包括FAT、CD/UDFS等,并详细讲解了FAT文件系统的配置与操作,以及如何实现文件系统过滤器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着CE的发展,对象存储(Object Store)的作用越来越小,而大容量的永久存储设备被越来越多地采用,这一章将针对CE的文件系统阐述相关的知识,让PB开发者除了能够加入对永久存储设备的支持,还能做一些优化。记得在以前讲过的文章中提到了如何在PB中向定制的内核加入对硬盘、光驱的支持(包括ATA设备驱动和各种文件系统),在这里就不再重复了。

CE提供了三种文件系统,基于ROM的文件系统、基于RAM的文件系统、FAT文件系统。FAT文件系统使用的范围最广,能够应用在ATA设备、Flash存储设备、SRAM存储设备上,另外CE还允许开发者自己编写并注册一套文件系统,只要接口符合Win32文件系统API即可。

CD/UDFS 文件系统

这两种文件系统被用于读取CD、DVD等。除了通过在PB的“catalog”中加入这个文件系统外,还可以在PB中添加SYSGEN_UDFS环境变量来实现。CDFS和UDFS在注册表中的注册信息如下: ; Default values for udfs. These can be overridden per profile. [HKEY_LOCAL_MACHINE/System/StorageManager/UDFS] "FriendlyName"="CDFS/UDFS FileSystem" "Dll"="udfs.dll" "Paging"=dword:1 [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/CDProfile] "Name"="IDE CDROM/DVD Drive" "Folder"="CDROM Drive" "DefaultFileSystem"="UDFS" "PartitionDriver"="" 上面注册表信息在文件common.reg中。注册表数据是从上至下有效,也就是说下面的数据可以覆盖上面的数据。从注册表数据可以看出udfs.dll包含了UDFS文件系统的驱动程序,CDROM的驱动器名为”CDROM Drive”,采用的文件系统为UDFS,没有分区驱动程序。如果我们要访问CDROM的目录或者文件就要在名字前加”/CDROM Driver/”。注意,可能你的common.reg文件中的数据在”Flolder”处不同于上面,比如为"Folder"=LOC_STORE_CD_FOLDER,那么你可以直接按照上面数据更改,或者在*.str文件中查找LOC_STORE_CD_FOLDER,找到这个ID对应的字符串再更改(查找到的文件可能很多,应查找以本国家码为目录名的目录)。

FAT文件系统

除了安全性外,FAT文件系统是一个很优秀的文件系统,很适合在嵌入式设备中使用。CE也把FAT作为外部存储设备的通用文件系统。添加FAT文件系统的环境变量为SYSGEN_FATFS。随便列出CE提供的操作FAT文件系统的函数: DefragVolume 碎块整理,在碎块整理前先进行磁盘扫描。 DefragVolumeUI 同上,但是包含一个选项对话框。 FormatVolume 按要求格式化分区。 FormatVolumeUI 同上,但是包含一个操作对话框。 ScanVolume 扫描一个分区的FAT和目录。 ScanVolumeUI 同上,但是包含一个操作对话框。 FAT文件系统在注册表中的注册信息如下: ; Default values for fatfs. These can be overridden per profile [HKEY_LOCAL_MACHINE/System/StorageManager/FATFS] "FriendlyName"="FAT FileSystem" "Dll"="fatfsd.dll" "Flags"=dword:00000024 "Paging"=dword:1 "CacheSize"=dword:0 从注册表数据可以看出fatfsd.dll包含了FAT文件系统的驱动程序。对”Flags”值的描述如下:

 

标志 描述 FATFS_UPDATE_Access 0x00000001 更新访问时间 FATFS_DISABLE_AUTOSCAN 0x00000004 不能自动调用ScanVolume FATFS_VERIFY_WRITES 0x00000008 检验所有写操作 FATFS_ENABLE_BACKUP_FAT 0x00000010 备份FAT表 FATFS_FORCE_WRITETHROUGH 0x00000020 让系统可以直接将任何缓冲区中的数据写到磁盘上,这样系统将加快写数据到磁盘的速度 FATFS_DISABLE_AUTOFORMAT 0x00000040 禁止自动格式化未格式化的分区 FATFS_DISABLE_COMPCHECK 0x00000080 禁止自动检测压缩分区 “Paging”用于指定是否能够分页,值为1可以分页,0不能分页。“CacheSize”用于指定FAT文件系统缓冲区大小。具体的值是用16进制数表示的扇区数量。假如”CacheSize”的值为400,那么用于FAT缓冲的字节数为1024 * 512 = 512KB。 存储管理器默认的文件系统是FAT文件系统,所以硬盘、USB、PCMCIA等存储设备的注册表信息默认都没有指定文件系统。 文件系统过滤器

文件系统过滤器是一个DLL。存储管理器在调用文件系统API之前先调用文件系统过滤器的过滤函数,通过过滤函数能够实现对文件数据的加密、解密、压缩甚至扫描文件是否存在病毒。实现文件系统过滤器的步骤是先编写DLL,CE提供了例子程序,位于%_WINCEROOT%/Public/Common/OAK/Drivers/FSD下。添加代码之后再修改注册表数据。注册表位置如下:

 

  1. HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/ProfileName/FileSystem/Filters
  2. HKEY_LOCAL_MACHINE/System/StorageManager/FileSystem/Filters
  3. HKEY_LOCAL_MACHINE/System/StorageManager/Filters

 

注册表键及其键值例子如下:

"Dll" := "fsdspy.dll" ////DLL名称 Order = 0 ////顺序

这里ProfileName是指Profile的名称,比如HDProfile。FileSystem是指具体的文件系统,如FATFS, UDFS, RELFSD。数字1指出的文件系统过滤器对指定存储硬件的文件系统有效;数字2指出的文件系统过滤器对指定的文件系统有效;数字3为所有文件系统多有效。

存储管理器

存储管理器 (Storage Manager) 是 Windows CE .NET 的新功能,主要管理存储设备驱动程序、文件系统驱动程序、分区驱动程序、文件系统过滤器。存储管理器根据注册表数据来加载需要的模块。具体注册表数据如下: [HKEY_LOCAL_MACHINE/System/StorageManager] "Dll"="fsdmgr.dll" "PNPUnloadDelay"=dword:1000 fsdmgr.dll包含存储管理器的代码。”PNPUnloadDelay”是指存储管理器在接收到即插即用设备的卸载通知后的延时时间。具体存储管理器需要管理的存储设备的注册表信息在HKEY_LOCAL_MACHINE/System/StorageManager/Profiles下。例如硬盘的注册表信息如下: [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile] "Name"="IDE Hard Disk Drive" "Folder"="Hard Disk" "AutoMount"=dword:1 "AutoPart"=dword:0 "AutoFormat"=dword:0 "MountFlags"=dword:0 "FileSystem"="fatfsd.dll" "PartitionDriver"="mspart.dll" “Name”指名称;”Folder”指目录名,可以在此更改目录名称;”AutoMount”指如果检测到分区后就自动安装文件系统;”AutoPart”指如果没有分区则自动将最大可用空间划分成一个分区;”AutoFormat”指如果没有格式化则自动格式化;”FileSystem”指定这个存储设备采用的文件系统,如果不指定就采用默认的文件系统;”PartitionDriver”指定分区驱动程序;”MountFlags”指文件系统如何被安装。值为1指定一个隐藏文件系统,如果文件系统被隐藏,那么这个文件系统将不会被查找文件的API发现,但是如果指定文件的绝对路径,还是可以访问的。值为2指定当前文件系统能够包含系统注册表。一个存储设备第一个分区将包含基于HIVE的系统注册表(关于基于HIVE的注册表见以前讲过的文章)。值为4指定这个文件系统作为整个文件系统的根(/),这里要说明一下,CE默认对象存储作为整个文件系统的根(/),当在根下放置一个文件时,例如/a.dat,这个文件实际存放在对象存储中。如果指定其它文件系统作为根,那么文件将存放在这个文件系统所在的存储设备中。值为8指定当指定值为4时隐藏ROM。

内容概要:本文围绕直流微电网中带有恒功率负载(CPL)的DC/DC升压转换器的稳定控制问题展开研究,提出了一种复合预设性能控制策略。首先,通过精确反馈线性化技术将非线性不确定的DC转换器系统转化为Brunovsky标准型,然后利用非线性扰动观测器评估负载功率的动态变化和输出电压的调节精度。基于反步设计方法,设计了具有预设性能的复合非线性控制器,确保输出电压跟踪误差始终在预定义误差范围内。文章还对比了多种DC/DC转换器控制技术如脉冲调整技术、反馈线性化、滑模控制(SMC)、主动阻尼法和基于无源性的控制,并分析了它们的优缺点。最后,通过数值仿真验证了所提控制器的有效性和优越性。 适合人群:从事电力电子、自动控制领域研究的学者和工程师,以及对先进控制算法感兴趣的研究生及以上学历人员。 使用场景及目标:①适用于需要精确控制输出电压并处理恒功率负载的应用场景;②旨在实现快速稳定的电压跟踪,同时保证系统的鲁棒性和抗干扰能力;③为DC微电网中的功率转换系统提供兼顾瞬态性能和稳态精度的解决方案。 其他说明:文中不仅提供了详细的理论推导和算法实现,还通过Python代码演示了控制策略的具体实现过程,便于读者理解和实践。此外,文章还讨论了不同控制方法的特点和适用范围,为实际工程项目提供了有价值的参考。
内容概要:该论文介绍了一种名为偏振敏感强度衍射断层扫描(PS-IDT)的新型无参考三维偏振敏感计算成像技术。PS-IDT通过多角度圆偏振光照射样品,利用矢量多层光束传播模型(MSBP)和梯度下降算法迭代重建样品的三维各向异性分布。该技术无需干涉参考光或机械扫描,能够处理多重散射样品,并通过强度测量实现3D成像。文中展示了对马铃薯淀粉颗粒和缓步类动物等样品的成功成像实验,并提供了Python代码实现,包括系统初始化、前向传播、多层传播、重建算法以及数字体模验证等模块。 适用人群:具备一定光学成像和编程基础的研究人员,尤其是从事生物医学成像、材料科学成像领域的科研工作者。 使用场景及目标:①研究复杂散射样品(如生物组织、复合材料)的三维各向异性结构;②开发新型偏振敏感成像系统,提高成像分辨率和对比度;③验证和优化计算成像算法,应用于实际样品的高精度成像。 其他说明:PS-IDT技术相比传统偏振成像方法具有明显优势,如无需干涉装置、无需机械扫描、可处理多重散射等。然而,该技术也面临计算复杂度高、需要多角度数据采集等挑战。文中还提出了改进方向,如采用更高数值孔径(NA)物镜、引入深度学习超分辨率技术等,以进一步提升成像质量和效率。此外,文中提供的Python代码框架为研究人员提供了实用的工具,便于理解和应用该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值