当前位置: 首页 > news >正文 个人网站怎么建wordpress里买的模板可以改 news 2025/10/27 11:45:29 个人网站怎么建,wordpress里买的模板可以改,青海建设信用信息服务网站,如何提升线上销售的方法本书的原著为#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》#xff0c;讲解的是嵌入式系统设计模式#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之一…本书的原著为《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》讲解的是嵌入式系统设计模式是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之一硬件代理模式。 硬件代理模式 (Hardware Proxy Pattern) 是硬件抽象的典型模式。目的是封装细节。该模式通过创建软件模块来封装对特定硬件设备的操作隐藏底层硬件的实现细节和复杂性提供标准的接口给上层应用程序使用。 假设有一个嵌入式系统需要访问内存、传感器等硬件设备。如果每个应用都直接在程序中访问操作底层硬件当更换了相同功能的不同硬件设备时有可能硬件接口并不一致而且对硬件的操作与控制方式也并不一样。这种情况下就需要为每个硬件设备编写特定的访问代码增加了软件开发的复杂性和工作量。 而采用硬件代理模式后可以创建一个硬件代理来封装对内存、传感器等硬件设备的操作。应用程序通过调用硬件代理提供的标准接口来访问硬件设备无需关心底层硬件的具体实现。当更换了相同功能的不同硬件设备时只需要修改硬件代理的实现即可无需修改客户程序的代码。这样就简化了软件与硬件的交互过程提高了软件的可移植性和可维护性。 在这个过程中最难的是定义一系列标准接口。标准接口是对硬件的抽象而只要涉及到抽象大都伴随艰难的脑力劳动。一个好的接口能带来什么益处答案是稳定。硬件可能随时会变但好的接口通常不变它比硬件要稳定。因此在接口之上的应用层都不用变。这就将变化控制在硬件层这个狭小的范围内从而让变更变得容易和可控。 摘要 硬件代理模式使用类或结构体来封装对硬件设备的所有访问而不管其物理接口如何。硬件可以是内存、中断映射也可以是通过总线、网络连接的设备。硬件代理提供一些服务这些服务可以与硬件设备交互初始化、配置、关闭、读写数据等。硬件代理为上层应用提供了一个与编码和连接无关的接口因此如果硬件设备接口或者连接方式发生变化则可以方便的修改现有代码。 问题 如果每个上层应用(书中称为“客户端” )都直接访问硬件设备则由于硬件更改而导致的问题会加剧。比如数据编码方式、内存地址或连接方式发生变化则必须跟踪并修改每一个上层应用。通过提供位于上层应用和硬件之间的代理可以极大的减少硬件更改带来的影响。为了便于维护高层应用不应该知道底层次代码的细节包括数据编码方式、加密方式、压缩方式等。这些详细信息应由具有内部私有函数的硬件代理进行管理。 模式结构 模式结构见下图。 硬件代理客户端可能有多个但是硬件设备只有 1 个硬件代理。硬件代理具有公共函数和私有的函数和数据。在 UML 图中数据放在首部比如 deviceAddr: void *函数放在数据的下方比如 initialize():void;公用函数和数据使用正常字体私有函数和数据用带下划线的斜体。 模式详情 硬件设备 硬件设备 是一个具体的硬件实体它本身无需编程即可运作。把它放到图中只是为了便于理解模式结构。硬件代理 与 硬件设备 之间的 关联 是通过硬件接口实现的这些接口可以是一个寄存器地址或其他类似机制。关联关系使一个类知道另外一个类的属性和方法这里硬件代理与硬件设备是双向关联大家相互知道对方的细节。 硬件代理 硬件代理封装了针对特定硬件的数据和函数为每种硬件设备提供了一套统一的接口。通常每个硬件都会有 initialize()、configure() 和 disable() 等基本操作函数此外硬件代理还提供了一组公共函数用于对硬件进行读写访问。 尽管模式结构图中只标识出一个 access() 和 mutate() 函数但实际应用中通常有多个这样的函数每个函数都针对特定的读写目标具有明确的语义和用途。例如accessMotorSpeed() 函数用于读取电机的速度而 accessMotorDirection() 函数则用于读取电机的旋转方向。 这种设计方式使得上层应用程序(客户端)可以通过调用硬件代理提供的函数来与硬件进行交互而无需关心底层硬件的具体实现细节。这不仅简化了软件与硬件之间的交互过程还提高了软件的可移植性和可维护性。 硬件代理关键函数和数据为 initialize()在首次使用之前调用初始化设备。configure()用于配置硬件设备。disable()关闭或禁用硬件设备。access_xxx()从硬件设备读取数据。但在实际编程中更常见的做法是使用get_xxx()。mutate_xxx()向硬件设备写入数据。但在实际编程中更常见的做法是使用set_xxx()。 在编程和软件设计中函数名通常会给出关于函数功能的一些提示。access 和 mutate 这两个名字就很有代表性它们分别暗示了读取或访问数据和修改或变更数据的操作。 access 函数通常用于读取或检索数据但不修改它。例如在数据库编程中一个 access 函数可能是用来从数据库表中读取记录的。在对象导向编程中access 方法也称为 getter 方法可能用于读取对象的某个属性值。mutate 函数则用于修改或变更数据。在数据库编程中这可能意味着更新数据库表中的记录。在对象导向编程中mutate 方法也称为 setter 方法可能用于设置或修改对象的某个属性值。 marshal()私有函数。将上层应用的数据格式转换成硬件可以理解的数据格式。可能需要加密、压缩或打包。这确保了硬件设备接口的特殊性对上层应用(客户端)是隐藏的。实际硬件设备所需格式的数据被称为“原生格式”数据。容易被软件操作的数据被称为“呈现格式”数据。由于原生格式对上层应用是隐藏的因此上层应用无法访问此函数。 通过将数据处理和转换的逻辑封装在私有函数中软件设计可以确保上层应用代码与硬件设备接口的复杂性隔离开来。这样上层应用开发者只需要关心如何操作 呈现格式 的数据而不需要了解如何将这些数据转换为硬件设备能理解的 原生格式。这简化了上层应用的开发工作并提高了系统的可维护性。 unmarshal()私有函数。将硬件数据转换成上层应用可以理解的数据格式。可能需要解密、解压缩或解包。也就是将原生格式数据转换成呈现格式数据。与 marshal() 函数一样隐藏了硬件设备的细节因此上层应用无法访问此函数。deviceAddr私有变量。提供了对硬件的低层次直接访问。在代理模式中它显示为 void* 但它可能是一个整形( int* )或其它数据类型。如果使用了更复杂的方式来访问设备如 RS232 串行端口或以太网连接那么这个数据类型及其访问方法将更加复杂。无论如何硬件代理提供的公共函数完全隐藏了代理如何连接到实际硬件设备的过程。上层应用无法直接访问这个变量。 代理客户端 也就是使用硬件代理的上层应用。上层应用知道硬件代理的公用函数和数据然后调用这些服务来访问硬件设备。 结果 这种模式非常常见它提供了封装硬件接口和编码细节的所有好处。它为实际的硬件接口提供了灵活性使其可以在不改变上层应用代码的情况下变更硬件。这是因为硬件细节都封装在硬件代理中。这意味着上层应用通常不知道数据的原生格式而只以呈现格式操作它们。 然而这可能会对运行时性能产生负面影响。有时让上层应用了解编码细节并以原生格式操作数据可能更高效。但是这会降低系统的可维护性因为如果硬件接口或编码发生变化就需要修改上层应用。 实现策略 如第1章所述在 C 语言中类可以通过不同的方式实现从简单的文件到使用结构体来存储类属性再到使用支持真正多态性的虚函数表。所有这些方法都可以用来实现这个非常简单的模式。 通常一个硬件代理支持特定设备的所有功能并且每个独立的设备都使用一个不同的硬件代理但这并不是一条绝对的规则。将设备分离成不同的部分意味着这些设备可以遵循独立的维护路径因此对于未来来说非常灵活。 一般来说最好将实际硬件的位编码、加密和数据压缩隐藏在上层应用之外。然而也可以通过使原生格式对上层应用可见来实现该模式在在这种情况下无需使用 marshal() 和 unmarshal() 函数。 实例 见原书。 文章转载自: http://www.morning.bpwz.cn.gov.cn.bpwz.cn http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn http://www.morning.c7513.cn.gov.cn.c7513.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.bsxws.cn.gov.cn.bsxws.cn http://www.morning.mzgq.cn.gov.cn.mzgq.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.jcxqc.cn.gov.cn.jcxqc.cn http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn http://www.morning.rshkh.cn.gov.cn.rshkh.cn http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn http://www.morning.slkqd.cn.gov.cn.slkqd.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.wyjhq.cn.gov.cn.wyjhq.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.gcqdp.cn.gov.cn.gcqdp.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.mdgpp.cn.gov.cn.mdgpp.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.dhpjq.cn.gov.cn.dhpjq.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.rcww.cn.gov.cn.rcww.cn http://www.morning.qwfl.cn.gov.cn.qwfl.cn http://www.morning.trfh.cn.gov.cn.trfh.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn http://www.morning.rfhm.cn.gov.cn.rfhm.cn http://www.morning.xbrxk.cn.gov.cn.xbrxk.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.fstdf.cn.gov.cn.fstdf.cn http://www.morning.bpmtx.cn.gov.cn.bpmtx.cn http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.dhpjq.cn.gov.cn.dhpjq.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.mbrbk.cn.gov.cn.mbrbk.cn http://www.morning.dpplr.cn.gov.cn.dpplr.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.kwwkm.cn.gov.cn.kwwkm.cn http://www.morning.nrftd.cn.gov.cn.nrftd.cn http://www.morning.nndbz.cn.gov.cn.nndbz.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.hqxyt.cn.gov.cn.hqxyt.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.xxfxxf.cn.gov.cn.xxfxxf.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.yrmgh.cn.gov.cn.yrmgh.cn http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn http://www.morning.rrdch.cn.gov.cn.rrdch.cn http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn http://www.morning.sjwzl.cn.gov.cn.sjwzl.cn http://www.morning.ggxbyhk.cn.gov.cn.ggxbyhk.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.wiitw.com.gov.cn.wiitw.com http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.splcc.cn.gov.cn.splcc.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.zympx.cn.gov.cn.zympx.cn http://www.morning.lzdbb.cn.gov.cn.lzdbb.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.swyr.cn.gov.cn.swyr.cn http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.sqdjn.cn.gov.cn.sqdjn.cn http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn http://www.morning.qtltg.cn.gov.cn.qtltg.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.dqxph.cn.gov.cn.dqxph.cn http://www.morning.xjqhh.cn.gov.cn.xjqhh.cn http://www.morning.dxtxk.cn.gov.cn.dxtxk.cn http://www.morning.bbmx.cn.gov.cn.bbmx.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn 查看全文 http://www.tj-hxxt.cn/news/253739.html 相关文章: 开发网站的流程步骤梅州站改造高铁站 有哪些做室内设计好用的网站图片设计软件app 企业网站建设的申请国内如何做国外网站的兼职项目 微网站开发协议竹妃怎么在公众号里做网站 企业园林设计网站模板福清建设局网站 网站建设设计哪个济南兴田德润简介零基础自己建网站 上海seo外包公司seo网络排名优化 河南省网站关键词搜索爱站网 网站建设答辩ppt装修效果图实景案例 php模板网站怎么修改wordpress实现论坛功能 渝北集团网站建设做公司网站的步骤 电子毕业设计代做网站找网站开发合作伙伴 全屏展示网站图片如何做自适应自助建站系统搭建网站 建设商业门户网站的重要前端学什么 网站建设宀金手指花总十四跨境电商怎么推广引流 南宁网站建设公司seo优化网站建设责任分工 番禺网站建设平台互联网技术对人们工作生活的影响 大型网站解决方案设计网络推广方案的参考文献 长沙专门做网站建设的公司wordpress月会员邀请码 手机网站快速排名wordpress远程图片下载插件 php网站开发专业网站关键字优化工具 化工材料 技术支持 东莞网站建设网页美工设计招聘 苏州做企业网站有哪些app官网入口 建手机网站软件建设通属于官方网站 找建设项目的网站网站推广经验杂谈 网站建设济南云畅网络fc网页游戏排行榜 专业网站建设官网赵县网站建设 重庆忠县网站建设公司哪家好晋源网站建设 东莞建网站哪家强免费发布招聘信息 还有做网站的必要吗网站空间会过期吗