当前位置:首页 > 操作
  • 电视巨头新攻略:新显示技术+自主操作

    当中国家电企业扎堆开发互联网电视时,全球最大的两家电视企业三星和LG在做什么?2014年1月份即将开幕的国际消费电子展(CES)上,这两家公司将展示的新产品技术或许更能代表行业风向标:曲面显示屏技术、体感功能和智能操作系统。据悉,一年一度的CES盛会上,三星和LG均将展出105英寸曲面超高清电视,此外,三星电视将凸显在其“手指手势”功能,LG则将推出酝酿已久的基于webOS操作系统的电视产品。三星和LG是全球排名前两位的电视企业。DisplaySearch的数据显示,今年上半年,三星在全球平板电视市场的份额为27%,LG为16%。OLED电视:突破价格关口成关键三星、LG是少数能够生产大尺寸OLED电视机的公司。在即将开展的美国CES展上,他们均会展示最新的105英寸OLED电视。OLED被视为韩国电视企业视为未来显示技术的制高点,两家公司一直在争夺OLED的主导地位。不过,由于OLED电视面板所需的上游材料成本昂贵、生产良品率偏低等问题,导致OLED电视面板出货量较低,价格昂贵。今年9月份,三星55英寸OLED电视虽然晚于LG两天发布,但在价格上与竞争对手展开较量,将其售价直接拉低至54999元,比LG同款电视低5000元。而在此之前,三星在8月份率先于LG下调了旗下55英寸曲面OLED电视机价格,从13500美元降至8910美元,幅度达34%。随后,在德国IFA展,LG将55英寸柔性曲面OLED电视从原来的15000美元降至8999美元。两家公司不久后将推出的大屏OLED电视则提供了遥控型曲面屏幕,能够让用户对电视屏幕进行柔性调控,从而获得最佳观看角度,尽管目前OLED电视市场尚未普及,但双方均寄望这种新功能可以推动OLED电视的进一步普及。  智能电视:摆脱Android谷歌的Android操作系统占据了目前智能电视市场的主流,但三星和LG均计划逐步摆脱谷歌的影响,开发自主的智能电视操作系统。据悉,在明年1月初开幕的CES上,LG将首次发布基于webOS系统的智能电视,而搭载三星自主研发的Tizen操作系统的电视产品明年也会正式亮相。“Android是基于手机上的应用,这些应用并不适合电视。”三星电子大中华区彩电营销部部长区文生此前曾表示。不过,过去三星、诺基亚等公司在手机自主操作系统上的教训表明,三星和LG构建自主生态系统的挑战仍在于如何吸引开发者。韩国自主智能电视系统在中国等市场还会面临更多的竞争对手。中国智能电视市场的内容接入有固定的几家服务提供商,而具备庞大用户数量的视频和电商公司则纷纷推出自己的智能电视业务,阿里巴巴、乐视等公司都在建立自身的生态系统或推出电视操作系统。目前,三星和LG电视产品在中国的市场份额低于全球。数据显示,今年1-11月份,中国品牌与外资品牌的市场份额占比分别为78%和22%,其中三星为9%,LG3%。

    时间:2014-01-01 关键词: 操作 巨头 攻略 自主

  • Diodes封装MOSFET有助于实现低温操作

    Diodes公司推出首款采用微型DFN1212-3封装MOSFET。该器件的结点至环境热阻(Rthj-a)为130ºC/W,能在持续状态下支持高达1W的功率耗散,相比于占位面积相同、Rthi-a性能为280ºC/W的SOT723封装,能实现更低温度运行。这款无铅DFN1212-3封装MOSFET与采用SOT723封装的MOSFET一样,印刷电路板(PCB)面积为1.44mm2,并具备0.5mm的狭小离板高度,但后者的热效率则较低。这对采用DFN1212-3封装的MOSFET可简易替换高可靠性的信号以及负载开关应用,用于包括数码相机、平板电脑和智能手机在内的高便携式消费电子产品。Diodes公司首次推出的这对MOSFET,额定电压为20V,包含DMN2300UFD N通道以及DMP21D0UFD P通道组件。在VGS为1.8V的情况下,该N通道MOSFET的典型导通电阻为400mΩ,比最受欢迎的同类型SOT723封装MOSFET大约低50%,有助于大幅减少传导损耗和功率耗散。Diodes之后还会推出采用DFN1212-3封装、额定电压为30V与60V的组件和一系列双极型器件。

    时间:2012-01-03 关键词: 封装 操作 低温 有助于

  • 胎心仪操作流程和注意事项

    胎心仪主要用来做胎心监护,通过监测胎动和胎心率来反映胎儿在母体内的状况。胎心过快或过慢都是有问题的表现,往往是胎心过慢的风险更大,需要医生及时予以处理。提倡更加科学的胎儿家庭监护,其主要内容就是利用胎心仪监测胎心率是否在正常范围,了解到胎儿的健康情况。发现胎心率及胎动异常时,立刻去医院检查治疗。胎心仪如何正确操作?需要注意哪些事项?1、打开胎心仪电池盖,装入符合要求电池,将耳机到主机的耳机插座。2、打开开机按钮,对照工作指示灯,来判断当前模式。3、准妈妈要找准胎位,找到胎心最佳位置,将适量超声耦合剂均匀抹在超声探头声学面上,再将探头贴在孕妇腹壁,获取最佳胎心信号。4、调节音量,进行正确的胎心率计算。5、操作结束后关机,用软布擦干净探头。6、不要擅自打开仪器内部,避免伤害到其内的精密电子线路,应请合格工程师维修。7、正确安装电池,以免引起短路等。仪器长时间不用时,应将电池取出。8、胎心仪应避免被水溅湿,也不要在有可燃性气体的环境中使用,以免爆炸。9、胎心仪应避免碰撞、远离锋利刀具和高频手术设备,避免移动电话等强的电磁干扰源。10、将胎心仪存放在阴凉、干燥的环境。

    时间:2014-02-12 关键词: 流程 操作 注意事项 心仪

  • 汽车自动变速器的操作和保养维护

    汽车保有量逐渐提升,越来越多的人开始选择开车出行。除了想享受操控感的车主会选择手动挡外,大部分车主都开始偏爱自动档汽车。但如何对汽车的自动变速器进行保养维护呢?这个问题却是很多车主不了解的。要减少自动变速器的故障率,就必须从使用、养护、维修检查三方面入手。正确使用自动变速器的各个档位,有助于延长自动变速器寿命。一般自动变速器分为P停车挡、R倒车档、N空挡、D驱动档、1陡坡档、2长坡档、3坡路档等档位。只有在车辆完全停稳时才可以挂入P停车挡,挂入该该挡后机械装置会将驱动车轮锁止,车轮无法转动。当车辆静止且发动机怠速运转时,才可以挂入R倒车档。当你想将排挡杆移入或移出倒车挡,可以按下排挡杆手柄按钮。应避免在车辆行进中挂入R挡,以免严重损坏自动变速器。在点火开关打开状态下,车辆静止或车速低于5Km/h时,挂入N空挡后,排挡杆会被锁止电磁铁锁止。一般可选用D驱动档,变速器控制单元根据车速及发动机负荷等参数,控制变速器在1-4挡中自由切换。如果行驶在有坡度的路面上,可以挂入3坡路档,自动变速器会在1-3挡中自动换挡。在遇到较长距离的坡路可选择2长坡档,控制车辆在1、2挡中自动换挡。当上下非常陡峭的坡路选用1陡坡档,之后汽车总处于1挡行驶状态而不会换入其他档位,保证有足够动力爬坡。自动变速器的保养维护,需要在日常行驶中重视相关注意事项。只有排挡杆置于P、N位置时,方可起动发动机,而P挡可作为手制动的辅助制动器,但不可替代手制动器。车辆被牵引时排挡杆须置于N位置,牵引时车速不可超过50Km/h。若自动变速器的控制单元因电气故障而导致其进入应急状态时,应及时去修理。

    时间:2013-12-10 关键词: 自动 操作 变速器 保养维护

  • 除尘设备分类及操作保养注意事项

    除尘设备能够对矿山采掘工作面及掘进隧道等地点的粉尘进行有效的治理。除尘设备的泡沫通过良好的覆盖、湿润、黏附等方式作用于粉尘,有效地降低采掘面上的粉尘浓度,极大地改善了采掘工作面的工作环境,提高井下作业人员的工作效率,并提升安全性。除尘设备按照不同标准划分有着不同的分类。机械力除尘设备包括重力除尘设备、惯性除尘设备、离心除尘设备等。洗涤式除尘设备包括水浴式除尘设备、泡沫式除尘设备,文丘里管除尘设备、水膜式除尘设备等。过滤式除尘设备包括布袋除尘设备和颗粒层除尘设备等。此外还有静电除尘设备、磁力除尘设备等。除尘设备在使用中,应注意哪些事项?如何进行保养呢?1、使用前认真阅读说明书,以免因操作不当造成人为损伤会危及安全。2、工业吸尘器工作环境一般海拔不超过1000米,温度不超过40度,保持良好通风,并确保环境中没有易燃、腐蚀性气体。在吸取液体物质时,要将滤芯取下,并注意及时将液体排空。3、干式除尘设备则应在操作时双手保持干燥,设备不能吸水,同时避免大的纸团或大口径废料废物堵塞吸管,应事先将其清理掉。4、为了确保安全,确保除尘设备有良好接地。同时为了防止电机过热而烧毁,工业吸尘器最好连续工作不超过8小时,采用特制的散热系统的特殊设计的工业吸尘器除外。5、装有自动卷线装置的工业吸尘器在使用时,电源线不要拉过头,尤其是在电源线有黄色或红色的标记出现时该停止拉线。6、工业吸尘器软管不应过度扩展或频繁折来折去。7、确保除尘设备电源插头和电源线完好无损,以免发生漏电情况。8、移动除尘设备要防止撞击,工业吸尘器桶体要防止破损漏气。9、除尘设备在存放时,应放置在通风干燥的环境,若设备主机发热,有焦味、异常抖动和作响等,应立马进行检修。

    时间:2013-03-26 关键词: 操作 注意事项 保养 除尘设备

  • 滴定仪在操作中应注意哪些事项?

    滴定仪该如何操作呢?要注意哪些事项呢?1、PH电极在从溶液里拿出来后,需要用蒸馏水清晰并擦干。将吸液管和滴定管都插好,前者要插入蒸馏水中,后者要插入废液瓶中。2、将仪器电源打开后,启动工作程序。在界面对仪器运行参数进行设置,同时安排设置滴定情况。3、输入体积,然后点击“发送”按钮,管道将充满液体。这时要注意查看是否有气泡出现,如果有气泡就要用气泡针插入定量管中吸出气体。4、将吸液管插入标液中,滴定管插入待测液中,将待测液放在磁力搅拌器上,并进行相应操作。5、将清洁过的PH电极插入待测液中,电极头要被液体覆盖。6、待电极电位稳定,启动测量程序。仪器会在滴定结束后求出相关参数和数据。7、测量结束后电极要进行清洁,并放回KCL饱和液体中待用。结束操作后,要关闭仪器电源。8、仪器在使用时一定要有稳定的电流,结束后要对管内残留液体进行处理,却确保管内清洁。如果实验结果不精确,应考虑样品的均匀性和配样浓度等因素。

    时间:2012-07-31 关键词: 操作 哪些 事项 滴定

  • 无需用手操作的“呼气鼠标”问世!

    近日消息,日本近畿大学宣布开发出了全球首创的“呼气鼠标”。因重度残障等原因无法用手操作鼠标的患者只需将一根管子衔在口中,就可通过呼气或吸气来控制电脑。近畿大学正在与健康仪器制造商洽谈合作事宜,力争两年后将这种鼠标推向市场。 使用者通过呼气吸气的时间长短和强弱的不同组合就可实现上下左右移动光标和左右按键功能。残障人士可以借助屏幕上显示的键盘输入文字,进行收发邮件等网上交流活动,提高生活质量。 日本近畿大学研发出可通过用嘴呼气吸气控制电脑的“呼气鼠标” 呼气鼠标虽使用了高精度传感器,但因工业用传感器较为便宜,售价可控制在5万日元(约合人民币3100元)左右。 据了解,近畿大学正致力于开发能帮助肌萎缩侧索硬化症(ALS)和颈椎受损患者的仪器设备及辅助系统,呼气鼠标便是其中之一。负责开发的福祉工学专业副教授北山一郎表示:“利用社交网络等可拓宽残障人士的交际面,或许还能帮助他们从事一定的工作”。

    时间:2013-11-04 关键词: 鼠标 操作 问世 无需

  • [图]3D透明计算机:可虚拟操作

    TED大会的Jinha Lee一直都在与微软公司合作开发3D桌面。他告诉BBC道,以与固体物体交互作用的同样方式来与机器相互作用可能会使计算机更加直观。他认为这种系统能够在十年内实现通用。这个系统含有一个透明的LED显示器,嵌入式摄像机将追踪使用者的手势和眼睛移动。他说道,身体直观的记住物体在哪的空间记忆是人类特有的一项技巧。将其转化成数字世界将能够使人们更容易的使用计算机并且完成更复杂的工作。他告诉BBC道:“如果你正在处理一个文档,你可以捡起它并且像看书一样进行浏览。”对于更精密的任务来说手势是不够精确的,它配有一块触摸板,比如说它能够使建筑师来实现3D模型的操作。▲ 麻省理工学院媒体实验室的一段视频展示了这项技术如何工作他说道:“设计师的想法和计算机的能力之间的裂缝是巨大的。如果你能够把手伸到计算机里并且处理数字内容,那么你就能够更加完整的表达出想法。”不是每个人都信服这种少数派报告式的未来的。Awl网站设计者克里斯汀-布朗说道:“人类的手和手指擅长于感觉质地和细节,而且擅长于抓取物体,接触界面无法利用它们。”Lee先生同样演示了他正在研究的其它项目。包括一个利用电磁学来保持漂浮状态的浮球,它与软件搭配能够实现各种各样的应用。他也致力于一种增强现实购物应用程序的研究,它所配备的虚拟现实手柄能够让使用者在线对手表等物品进行试穿。Lee先生的最终目标是将数字世界和物质世界联合在一起。随着现实世界和技术之间缝隙的关闭,计算机正变得越来越人性化。他说道:“第一台计算机问世时的巨大缝隙,已经随着触屏等技术的问世变得越来越小。唯一仅存的界限就是我们的想象力。”(译/过客)

    时间:2013-03-05 关键词: 透明 计算机 虚拟 操作

  • ARM汇编常用伪操作总结

    在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与理解障碍,就总结了启动代码中用到的伪操作以供熟悉和查阅PS: 这里说一下自己对汇编指令的看法,感觉就如英语单词似的,在进行阅读之前必须具备一些词汇量,但不需要精记,因为精记的话量太大太杂,不容易掌握,效果也不好。最好的方法是一些单词有一些大概的印象,也就是粗记,然后在阅读中不断的加强印象,最终牢固掌握它。所以在这里不需要对所有的伪操作都记牢,配合着小例子先对其有个印象,然后在看启动代码的过程中不断的复习查阅,就能很快掌握之~~全局操作GET (或 INCLUDE )语法格式:GET 文件名GET 伪操作用于将一个源文件包含到当前的源文件中 ,并将被包含的源文件在当前位置进行汇编处理。可以使用 INCLUDE 代替 GET 。可以使用路径信息(路径信息中可以包含空格)。汇编程序中常用的方法是在某源文件中定义一些宏指令,用 EQU 定义常量的符号名称,用 MAP 和 FIELD 定义结构化的数据类型,这样的源文件类似于 C 语言中的 .H 文件。然后用 GET 伪操作将这个源文件包含到其他的源文件中。使用方法与 C 语言中的 include “*.h” 相似。GET 伪操作只能用于包含源文件,包含目标文件需要使用 INCBIN 伪操作使用示例:AREA Init , CODE , READONLYGET a1.s ;通知编译器当前源文件包含源文件 a1.sGET C:\project\file2.s ;通知编译器当前源文件包含源文件 C:\project\file2.sENDAREA语法格式:AREA 段名 属性 1 ,属性 2 , ……AREA 伪指令用于定义一个代码段或数据段 。其中,段名若以数字开头,则该段名需用 “ | ” 括起来,如 |1_test| 。还有一些代码段具有约定的名称,如 |.text| 表示 C 语言编译器产生的代码段或者是与 C 语言库相关的代码段。属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下:— CODE 属性:用于定义代码段,默认为 READONLY 。— DATA 属性:用于定义数据段,默认为 READWRITE 。— NOINIT 属性:指定本数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各内存单元初始化为 0.— READONLY 属性:指定本段为只读,代码段默认为 READONLY 。— READWRITE 属性:指定本段为可读可写,数据段的默认属性为 READWRITE 。 使用示例:AREA Init , CODE , READONLY该伪操作定义了一个代码段,段名为 Init ,属性为只读ENTRY语法格式:ENTRYENTRY 伪操作用于指定汇编程序的入口点 。在一个完整的汇编程序中至少要有一个 ENTRY (也可以有多个,当有多个 ENTRY 时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个 ENTRY (可以没有)。使用示例:AREA Init , CODE , READONLYENTRY ;指定应用程序的入口点……END语法格式:ENDEND 伪操作用于通知编译器已经到了源程序的结尾 。使用示例:AREA Init , CODE , READONLY……END ;指定应用程序的结尾符号操作ALIGN语法格式:ALIGN { 表达式 { ,偏移量 }}ALIGN 伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式 。其中,表达式的值用于指定对齐方式,可能的取值为 2 的幂,如 1 、 2 、 4 、 8 、 16 等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为: 2 的表达式次幂+偏移量。下面的情况中,需要特定的地址对齐方式:1 ) Thumb 的宏指令 ADR 要求地址是字对齐的,而 Thumb 代码中地址标号可能不是字对齐的。这时就要使用伪操作 ALIGN 4 使 Thumb 代码中的地址标号字对齐。2 ) 由于有些 ARM 处理器的 CACHE 采用了其他对齐方式,如 16 字节的对齐方式,这时使用 ALIGN 伪操作指定合适的对齐方式可以充分发挥该 CACHE 的性能优势。3 ) LDRD 以及 STRD 指令要求内存单元是 8 字节对齐的。这样在为 LDRD/STRD 指令分配的内存单元前要使用 ALIGN 8 实现 8 字节对齐方式。4 ) 地址标号通常自身没有对齐要求。而在 ARM 代码中要求地址标号是字对齐的,在 Thumb 代码中要求字节对齐。这样需要使用合适的 ALIGN 伪操作来调整对齐方式。使用示例:在 AREA 伪操作中的 ALIGN 与 ALIGN 伪操作中表达式含义是不同的AREA Init , CODE , READONLY , ALIEN = 3 ;指定后面的指令为 8 字节对齐。CODE16 、 CODE32语法格式:CODE16 (或 CODE32 )CODE16 伪操作告诉编译器,其后的指令序列为 16 位的 Thumb 指令 。CODE32 伪操作告诉编译器,其后的指令序列为 32 位的 ARM 指令 。若在汇编源程序中同时包含 ARM 指令和 Thumb 指令时,可用 CODE16 伪操作通知编译器其后的指令序列为 16 位的 Thumb 指令, CODE32 伪操作通知编译器其后的指令序列为 32 位的 ARM 指令。因此,在使用 ARM 指令和 Thumb 指令混合编程的代码里,可用这两条伪操作进行切换,但注意他们只是告诉编译器其后指令的类型,本身并不能对处理器进行程序状态的切换。使用示例:AREA Init , CODE , READONLY……CODE32 ;通知编译器其后的指令为 32 位的 ARM 指令LDR R0 ,= NEXT + 1 ;将跳转地址放入寄存器 R0BX R0 ;程序跳转到新的位置执行,并将处理器切换到 Thumb 工作状态……CODE16 ;通知编译器其后的指令为 16 位的 Thumb 指令NEXT LDR R3 ,= 0x3FF……END ;程序结束EQU ( “ * ” )语法格式:名称 EQU 表达式 { ,类型 }EQU 伪操作用于为程序中的常量、基于寄存器的值和程序中的标号定义一个字符名称,其作用类似于 C 语言中的# define 。名称为 EQU 伪操作定义的字符名称,表达式为基于寄存器的地址值、程序中的标号、 32 位的地址常量或者 32 位的常量。当表达式为 32 位的常量时,可以指定表达式的数据类型,可以有以下三种类型:CODE16 、 CODE32 和 DATA使用示例:Test EQU 50 ;定义标号 Test 的值为 50Addr EQU 0x55 , CODE32 ;定义 Addr 的值为 0x55 ,且该处为 32 位的 ARM 指令。EXPORT (或 GLOBAL )语法格式:EXPORT 符号 {[WEAK]}EXPORT 伪操作声明一个符号可以被其他文件引用,相当于声明了一个全局变量 。 EXPORT 可用 GLOBAL 代替。符号在程序中区分大小写, [WEAK] 选项声明其他的同名符号优先于该符号被引用。使用示例:AREA Init , CODE , READONLYEXPORT DoAdd ;下面的函数名称 DoAdd 可以被其他源文件引用DoAdd ADD r0,r0,r1ENDIMPORT语法格式:IMPORT 符号 {[WEAK]}IMPORT 伪操作告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号 ,而且不论本源文件是否实际引用该符号,该符号均会被加入到本源文件的符号表中符号在程序中区分大小。符号在程序中区分大小写, [WEAK] 指定这个选项后,如果符号在所有的源文件中都没有定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被 INCLUDE 进来的库中去查找该符号。使用 IMPORT 伪操作声明一个符号是在其他源文件中定义的。如果连接器在连接处理时不能解析该符号,而 IMPORT 伪操作中没有指定 [WEAK] 选项,则连接器会报告错误。如果连接器在连接处理时不能解析该符号,而 IMPORT 伪操作中指定了 [WEAK] 选项,则连接器将不会报告错误,而是进行下面的操作:1 ) 如果该符号被 B 或者 BL 指令引用,则该符号被设置成下一条指令的地址,该 B 或者 BL 指令相当于一条 NOP 指令2 ) 其他情况下该符号被设置为 0.使用示例:AREA Init , CODE , READONLYIMPORT Main ;通知编译器当前文件要引用标号 Main ,但 Main 在其他源文件中定义 ……ENDEXTERN语法格式:EXTERN 符号 {[WEAK]}EXTERN 伪操作告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。如果本源文件没有实际引用该符号,该符号将不会被加入到本源文件的符号表中。注:与 IMPORT 的不同之处使用示例:AREA Init , CODE , READONLYEXTERN Main ;通知编译器当前文件要引用标号 Main ,但 Main 在其他源文件中定义 ……END控制操作MACRO MEND语法格式:MACRO[$ label] macroname{ $ parameter1 , $ parameter ,…… }指令序列MENDMACRO 伪操作标识宏定义的开始, MEND 标识宏定义的结束。用 MACRO 及 MEND 定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段。其中, $ label 在宏指令被展开时, label 会被替换成相应的符号,通常是一个标号。在一个符号前使用 $ 表示程序被汇编时将使用相应的值来替代 $ 后的符号。macroname 为所定义的宏的名称。$parameter 为宏指令的参数。当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数,可以在宏定义时为参数指定相应的默认值。宏指令的使用方式和功能与子程序有些相似,子程序可以提供模块化的程序设计、节省存储空间并提高运行速度。但在使用子程序结构时需要保护现场,从而增加了系统的开销,因此,在代码较短且需要传递的参数较多时,可以使用宏汇编技术。首先使用 MACRO 和 MEND 等伪操作定义宏。包含在 MACRO 和 MEND 之间的代码段称为宏定义体,在 MACRO 伪操作之后的一行声明宏的原型(包含宏名、所需的参数),然后就可以在汇编程序中通过宏名来调用它。在源程序被汇编时,汇编器将宏调用展开,用宏定义体代替源程序中的宏定义的名称,并用实际参数值代替宏定义时的形式参数。本文引用地址:http://www.eepw.com.cn/article/201611/340834.htm宏定义中的 $label 是一个可选参数。当宏定义体中用到多个标号时,可以使用类似 $label.$internallabel 的标号命名规则使程序易读。MACRO 、 MEND 伪操作可以嵌套使用。使用示例:MACRO$HandlerLabel HANDLER $HandleLabel ; 宏的名称为 HANDLER ,有 1 个参数 $HandleLabel$HandlerLabelsub sp,sp,#4 ;decrement sp(to store jump address)stmfd sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address)ldr r0,=$HandleLabel ;load the address of HandleXXX to r0ldr r0,[r0] ;load the contents(service routine start address) of HandleXXXstr r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stackldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)MEND;在程序中调用该宏HandlerFIQ HANDLER HandleFIQ ;通过宏的名称 HANDLER 调用宏,其中宏的标号为 HandlerFIQ ,参数为 HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI HANDLER HandleSWIHandlerDabort HANDLER HandleDabortHandlerPabort HANDLER HandlePabort;程序被汇编后,宏展开的结果HandlerFIQsub sp,sp,#4stmfd sp!,{r0}ldr r0,=HandleFIQldr r0,[r0]str r0,[sp,#4]ldmfd sp!,{r0,pc}IF 、 ELSE 、 ENDIF语法格式:IF 逻辑表达式指令序列 1ELSE指令序列 2ENDIFIF 、 ELSE 、 ENDIF 伪操作能根据条件把一段源代码包括在汇编程序内或者将其排除在程序之外。 [ 是 IF 伪操作的同义词, | 是 ELSE 伪操作的同义词, ] 是 ENDIF 伪操作的同义词。IF 、 ELSE 、 ENDIF 伪指令可以嵌套使用。使用示例:MACROMOV_PC_LR[ THUMBCODEbx lr|mov pc,lr]内存操作DCD “ & ”(或 DCDU )语法格式:标号 DCD ( 或 DCDU) 表达式用于分配一段字内存单元并用伪操作中指定的表达式初始化 。其中,表达式可以为程序中的标号或数字表达式。用 DCD 分配的字存储单元是字对齐 的,而用 DCDU 分配的字存储单元并不严格字对齐。使用示例:DataTest DCD 4,5,6 ; 其值分别为 4 , 5 和 6 。data2 DCD memaddr+4 ; 分配一个字单元,其值为程序中标号 memaddr 加 4 个字节MAP ( “ ^ ” )语法格式:MAP 表达式 { ,基址寄存器 }用于定义一个结构化的内存表的首地址 。表达式可以为程序中的标号或数字表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。MAP 伪操作通常与 FIELD 伪操作配合使用来定义结构化的内存表。使用示例:MAP 0x100 , R9 ; 定义结构化内存表首地址的值为 0x100 + R9 。FILED ( “ # ” )语法格式:标号 FIELD 表达式用于定义一个结构化内存表中的数据域 。表达式的值为当前数据域在内存表中所占的字节数。FIELD 伪操作常与 MAP 伪操作配合使用来定义结构化的内存表结构。 MAP 伪操作定义内存表的首地址, FIELD 伪操作定义内存表中的各数据域的字节长度,并可以为每个数据域指定一个标号供其他的指令引用。注意 MAP 和 FIELD 伪操作仅用于定义数据结构,并不实际分配存储单元。示例 1 :下面的伪操作序列定义一个内存表,其首地址为固定地址 4096 ,该内存表中包括 5 个数据域: consta 长度为 4 个字节; constb 长度为 4 个字节; x 长度为 8 个字节; y 长度为 8 个字节; string 长度为 256 个字节。这种内存表称为基于绝对地址的内存表。MAP 4096 ;内存表的首地址为 4096 ( 0x1000 )consta FIELD 4 ; consta 长度为 4 个字节,相对位置为 0constb FIELD 4 ; constb 长度为 4 个字节,相对位置为 5000constb FIELD 4 ; constb 长度为 4 个字节,相对位置为 5000x FIELD 8 ; x 长度为 4 个字节,相对位置为 5004y FIELD 8 ; y 长度为 4 个字节,相对位置为 5012string FIELD 256 ; string 长度为 256 字节,相对位置为 5020; 在指令中可以这样引用内存表中的数据域:LDR R6 , consta上面的指令仅仅可以访问 LDR 指令前面(或后面) 4KB 地址范围的数据域示例 2 :下面的伪操作序列定义一个内存表,其首地址为 0 ,该内存表中包括 5 个数据域: consta 长度为 4 个字节; constb 长度为 4 个字节; x 长度为 8 个字节; y 长度为 8 个字节; string 长度为 256 个字节。这种内存表称为基于相对地址的内存表。MAP 4096 ;内存表的首地址为 0consta FIELD 4 ; consta 长度为 4 个字节,相对位置为 0constb FIELD 4 ; constb 长度为 4 个字节,相对位置为 4x FIELD 8 ; x 长度为 4 个字节,相对位置为 8y FIELD 8 ; y 长度为 4 个字节,相对位置为 16string FIELD 256 ; string 长度为 256 字节,相对位置为 24; 可以通过下面的指令方便地访问地址范围超过 4KB 的数据MOV R9 , #4096LDR R5 , [R9,constb] ;将内存表中数据域 constb 读取到 R5 中在这里,内存表中各数据域的实际内存地址不是基于一个固定地址,而是基于 LDR 指令执行时 R9 寄存器中的内容。这样通过上面方法定义的内存表结构可以在程序中有多个实例(通过在 LDR 指令中指定不同的基址寄存器值来实现)。通常用 R9 作为静态基址寄存器。0次

    时间:2018-05-31 关键词: ARM 操作 嵌入式处理器 常用

  • 单片机的状态迁移与复位操作

    本文以经典的80c51单片机为例,利用工作状态及其状态辽移的新概念、新观点和新方法,揭示一些单片机运作的内在规律,对于单片机学习者和应用开发者具有一定的启迪作用和实际意义。1 单片机的工作状态及其状态迁移80c51单片机的各种活动,可以描述成多个不同的工作状态或工作模式。这里利用笔者构思的一个单片机工作状态迁移图(如图1所示)来说明。不过,这里重点关注的是复位状态。经过仔细分析之后,从图1中可以看出:① 把单片机经历的所有生存状态归纳和描绘成5个状态--1个非工作状态(即无电状态)和4个工作状态。 ② 只有复位状态是一个暂态,其他均为稳态;并且每次单片机进入正常运行状态时,都要经历一次复位状态。③ 只有在正常运行状态(这里记作normal)下,单片机才按照程序存储器中固化的用户程序按部就班地一步一步执行,从而完成开发者设计的各项任务。④ 停机状态(或pd模式)和待机状态(或idl模式),主要是为节能降耗而规划的节电状态(或称"睡眠状态")。⑤ 从无电状态离开的唯一条件就是上电,并且唯一能够到达的是一个暂态--复位状态。⑥ 复位状态以外的4个状态都有迁移到复位状态的途径,只是导致迁移的条件不尽相同。⑦ 无电状态之外的4个工作状态,都可能因为随时断电而导致单片机进入"无电状态"。⑧ 从另外3个工作状态迁移到复位状态,基本都是依靠外部引脚rst上的复位信号。原始复位源比较单一,这是因为传统80c51的复位逻辑相对简单。如果想增加"电源欠压复位"和"看门狗复位"等其他复位源,则需要片外扩充独立电路来实现。⑨ 标准80c51没有设计"软件复位"功能,如果需要该功能,可以通过用户程序自行实现。不同的是,软件复位不会令cpu经历一次复位状态。2 复位源、复位操作和复位状态 像数字电路中的时序逻辑电路器件需要具备复位功能一样,各种类型的单片机也都需要具备复位功能(reset)。复位功能按其英文原意是重新设置的意思,也就是从头开始执行程序,或者重新从头执行程序(restart)的意思。复位是单片机的一项重要操作内容,其目标是确保单片机运行过程有一个良好的开端,确保单片机运行过程中有一个良好的状态。需要强调的是:关于"复位"一词,它既包含复位活动的意思,又包含复位状态的意思。或者说,复位既是一个动态的概念(指复位活动、复位操作、复位处理或复位过程等),又是一个静态的概念(指复位状态或复位模式等)。2.1 常规复位源和扩充复位源从现今的技术高度来看,标准80c51单片机的复位功能设计得不够完善,不仅没有设置复位标志位寄存器,而且复位源的种类也很少。所谓"复位源",就是导致或者引起单片机内部复位的源泉。对于当前市场上出现的种类比较齐全的单片机,其典型复位源大致可以归纳为以下6种:上电复位、人工复位、电源欠压复位、看门狗复位、非法地址复位和软件复位。这些复位源的特点是:① 上电复位这一种复位源是必不可少的。因为每次给单片机加电时,其电源电压的稳定,以及时钟振荡器的起振和振幅稳定,都需要一定的延迟时间。 ② 只有上电复位和人工复位这两种复位源,是讲解80c51单片机的教科书、技术文章和文献资料巾比较常见的。③ 对于电源欠压复位、看门狗复位和非法地址复位3种复位源,标准80c51是不具备的,不过可以额外扩充,可由单片机用户根据实际需要通过附加一些软件或硬件的手段来实现。④ 虽然电源欠压复位、看门狗复位、非法地址复位3种复位源可以额外扩充,但是都必须借助于复位引脚rst来实施复位操作或复位锁定。⑤ 标准80c51本来不具备软件复位功能,但是可以通过纯软件方式以及虚拟手段,来实现或者部分实现其他单片机的软件复位。这种方法扩充的软件复位是一种比较特殊的复位源,一是不通过rst引脚实现复位,二是复位操作的内容与众不同。软件复位作为一种新技术,目前有越来越多的新型单片机配备了该功能。例如philips公司的p87lpc700和p89lpc900系列、ti-bb公司的msc1200系列、sunplus公司的spmc65系列等,内部都设计了专门用于实现软件复位的控制寄存器或者控制位。2.2 复位操作的具体内容单片机复位功能的实现过程实质上就是在单片机内部进行一系列的复位操作。在复位期间,单片机内部的复位操作究竟完成了哪些内容,是程序设计人员应该搞清的问题,因为单片机复位操作完成之后的内部状态,就是运行用户程序和进行软件处理的背景、基础和起点。 对80c51单片机来说,只有软件复位的具体内容和影响范围,是可以由用户自由定制的;而凡是直接作用于复位引脚rst上的复位源(如上电复位等),

    时间:2019-03-19 关键词: 单片机 操作 嵌入式处理器 状态

  • 飞思卡尔将ADC及5V操作引入低端S08MCU系列

    飞思卡尔半导体将为嵌入式产品开发商提供一种经济高效的微控制器(mcu) 解决方案,帮助他们开发更广泛的应用。个人电子设备变得越来越小、越来越先进且对成本越来越敏感,因此,设计师们对成本低廉且特性丰富的mcu产生了迫切需求。为了满足这一需求,飞思卡尔即将推出8位s08 mcu系列产品的新成员 ,其设计旨在降低小型设备和直流风扇应用的主板空间、系统成本和功耗。   mc9s08qd4(qd4)设备非常灵活且功能强大,能够帮助开发人员设计更为广泛的嵌入式应用。qd4设备是高度集成的,可在一个小巧的8针脚封装内支持5v操作,因此非常适合用于需要较高电压的成本敏感型应用。应用实例包括电机控制、安全系统、对讲机、相机变焦控制、吸尘器、工业压缩机和小型发动机应用的点火控制(例如不需要汽车电子委员会aec认证的摩托车)。   qd4集成了一个4信道的10位adc,可提供更高的分辨率、更快的转换和自动比较功能。该adc使mcu可以轻松连接到传感器等设备的模拟输入装置,因为它可以将模拟信号转换成数字值。自动比较功能使mcu可以计算数值,并与预先设置的阈值进行对比。   qd4 还包括一个内部时钟源(ics)模块,其中包含由内部或外部参考控制的频率锁定环(fll)。内部参考时钟的使用可以消除所有外部时钟组件的成本,有助于减少主板空间,提高系统可靠性。   当设计人员需要扩展功能时,qd4可提供强大的支持环境并在飞思卡尔mcu系列内进行针脚兼容的迁移。qd4的针脚可兼容超低端mc9rs08ka2及高度集成的mc9s08qg8微控制器。共享外围设备和通用开发工具使工程师可以轻松而快速地利用他们以往的设计。   mc9s08qd4的特性   · 16mhz的hcs08中央处理器   · hc08指令集,带有增强背景(bgnd)指令   · 4kb的闪存   · 256b的ram   · 整个运行电压和温度范围内的闪存读取/编程/清除   · 4信道,10位adc   · 2个16位芯片定时器   · 内部时钟振荡器,支持2%的温度和电压偏差   · 单线后台调试界面   · 8针脚pdip和8针脚小巧soic封装     为了帮助客户加快并简化开发工作,飞思卡尔还提供codewarrior™ development studio的免费特殊版本,该版本针对mc9s08qd4等s08核心控制器进行了优化。该studio包括在demo9s08qd4演示板中,也可以免费在线下载。codewarrior development studio的功能不仅限于基本的代码生成和调试。设计人员一打开设备包装箱就可以利用这些工具来简化应用设计。它带有直观、先进的项目管理器和构建系统、高度优化编译器、图形源代码级调试器、集成的配置文件生成功能和芯片模拟器等。   定价与供货信息      mc9s08qd4的样品已开始批量上市,1万件的建议零售价为69美分。 demo9s08qd4演示板的当前建议零售价为59美元。

    时间:2018-12-25 关键词: 低端 操作 嵌入式处理器 系列 卡尔

  • 基于MSP430F149的电力操作电源智能电池巡检系统的设计

    1 引言 电力操作电源监测系统是随着电力系统自动化运行而产生的,该系统可以对变电站中的交流供电电源、直流控制电源、备用操作电源以及开关状态等进行参数监测、故障报警等操作。从而及时地发现电力系统的异常情况,提前做好防范以保证电力系统连续可靠地运行。同时,当电力系统出现故障时为继电器以及断路器等二次设备提供备用操作电源,对设备进行保护。 电池巡检仪是备用电源的检测装置,主要的功能是对单体电池的电压、温度、容量等参数进行检测,提供充电控制以及故障报警等功能,从而可以合理地控制电池,延长电池使用寿命,提高系统的可靠性。 电源监控系统起步于80年代末,当时它只能监控一个独立的直流供电系统或一个局(站),且电源监控水平不高,可靠性较低。90年代以后尤其是近几年来,伴随着计算机、通信技术的迅猛发展和电源装备水平的提高,电源监控也逐渐成熟起来,发展到可以监控多回路甚至是多个系统。 电力操作电源监控系统配合合理的控制器,通过控制高压断路器以及其他的继电器设备,可以完全实现电力系统的安全运行和自动调度,从而满足现代化电力调度的需要。 2 系统总体设计方案 此电源管理仪器主要用于中小型变电站的操作电源以及备用电源的监测和管理,为了更好的节约备用电池的能源,选择低功耗的MSP430F149微控制器作为设备的处理器。 2.1 采样模块 交流模块采用ATT7022B交流三相电能计量器件处理交流部分的有功功率、无功功率、谐波、电压、电流等参数。ATT7022B价格比较便宜,而且具有SPI(serial peripheral interface,串行外围设备接口)接口,能够方便地与MSP430F149单片机进行通信。 开关量监控,包括交流断路器分合闸状态(主、备用电源共两路)、交流控制电源8路、直流断路器的分合状态。 直流量监控,包括环境温度、电池温度、单片机温度、单体电池电压、直流合闸电源2路、操作电压和合闸电流。 2.2 人机接口模块 键盘是主要的输入来源。为了节约成本,系统采用扫描方式实现矩阵键盘,采用中文液晶显示。 2.3 通信模块 由于单片机内具有UART,因此采用RS-232串行通信方式实现与上位机的通信。为了实现与上位机电平匹配,采用SP3220E作为接口电平转换器。设备的工艺流程如图1所示。

    时间:2019-03-12 关键词: 电力 电池 嵌入式开发 电源 操作

  • 提高非接触有值IC卡操作的可靠性研究

    提高非接触有值IC卡操作的可靠性研究

    引言 IC卡(Integrated Circuit Card)又称为“集成电路卡”,是将一个集成电路芯片镶嵌于塑料基片中,封装成卡的形式,其外形与覆盖磁条的磁卡相似。IC卡作为一种安全、方便、快捷的支付工具和轻便、详实的个人信息资料库,在现代的社会中已受到广大用户的青睐。 特别是非接触射频IC卡的出现,极大地方便了用户的使用,克服了传统的接触式IC卡触点容易磨损、使用不方便的缺点。但同时也带来一些问题,因为是非接触式IC卡,有时用户刷卡的速度过快,会导致IC卡读卡器尚未完成对IC的操作,卡已经离开了天线区域,从而出现不可预知的后果,严重的话会使IC卡里的数据丢失,给用户造成损失。 出现这些问题主要是由硬件和软件两方面的因素造成的。硬件方面,主要与天线和卡的个体差异有关。我们做过实验,不同的卡即使在同一读卡器上,它们的读卡距离差别还是很大的;同样,同一张卡在不同读卡器上的读卡距离的差别也很大。读写距离的缩短,致使在一定的时间内没完成卡的读写,从而出现异常情况。软件方面,可在尽量缩短卡的操作时间的同时采取一些弥补措施,以弥补先天的硬件不足,从而提高IC卡的可靠性操作,避免了一些不必要的麻烦。  Philips公司是世界上最早研制非接触式IC卡的公司,其产品系列有Mifare standard、Mifare Light、Mifare PLUS和Mifare PRO。以Mifare standard系列MF1 IC S50为例,按Philips公司的标准,该卡与读写器天线之间完成一次数据交换的时间可小于0.1 s。但在实际中,由于种种原因交易的时间比这要长些,而且处理不好的话,还会出现不可预料的后果。  1 非接触IC卡天线组成  非接触IC卡天线是影响读卡性能的一个决定性因素,天线设计的好坏直接影响到读卡系统的稳定性。如图1所示,整个天线部分电路由EMC滤波电路、接收电路和天线线圈电路3部分组成。EMC滤波电路的作用是减弱由天线发射电路产生的高次谐波对外界的影响。接收电路由R1、R2、C3、C4组成。 R2、C4的作用是使接收脚RX上的直流电平与内部参考电压输出VMID保持一致;R1则用于调整接收脚RX上交流信号的幅度。虚线右方所示的电路即为所要设计的天线,包扩天线线圈和相关的谐振元器件。 其中,Rext用于调节天线的品质因素,而天线的中心频率f及对外输出阻抗Za则主要通过改变谐振电容 C1a、C1b、C2a、C2b的值来调整。所以外接电阻Rext和谐振电容器件参数的确定为天线线圈电路设计中不可缺少的一环。根据Philips公司关于非接触式IC卡天线设计资料,天线调谐分为2个步骤: ① 调整天线的谐振频率f和输出阻抗Za到期望的13.56 MHz和500 Ω;② 对天线进行调节,找到最大的读卡距离。具体方法为将天线接入电路中,然后在系统工作的情况下,不断调整C2的值并测试卡的读写距离,直至找到最大读卡距离时C2的值。找出最大读卡距离的目的是为了使卡进入天线辐射范围的时间足够长,以圆满地完成对卡的操作。图1 天线模块电路  2 非接触IC的电子钱包功能  有值卡一般用于小额消费中,电子钱包就是典型的应用。电子钱包的操作包括读(READ)、加(INCREMENT)、减 (DECREMENT)、传送(TRANSFER)和恢复(RESTORE)等。电子钱包一般采用值段方式进行存储,厂家也提供值段操作函数帮助用户方便地进行开发。值段也称为“值块(Value Block)”,Value的长度为4字节(包括符号位)。为了提高错误检测和纠错能力,在一个Value Block中每一个Value存入3次,如下所示: 在进行任意计算之前,在芯片内部检查3个Value的一致性。余下的4字节(A和)为8位任意地址(Address)字节,同一地址存入4次(A和)。  Value Block中的内容第一次由WRITE命令写入到所要求的地址中,以后可以用DECREAMENT/INCREMENT/RESTORE命令修改内容。数据的计算过程如图2所示。计算结果暂存入DATA寄存器(即数据寄存器),然后用TRANSFER命令写入寄存器。    图2 Value计算示意图  3 软件的实现  MF1 IC S50有8 Kb EEPROM,分成16个区,每个区又分成4个块(Block0~3),一个分组有16字节。为了方便用户使用,Philips公司给出了值段操作函数 M500PiccValue(),使用该函数可以方便地进行加(INCREMENT)、减(DECREMENT)、传送(TRANSFER)、恢复 (RESTORE)等操作。但是该函数存在一定的缺陷,当返回值为“非MI_OK”时,会有两种情况出现:① 值操作未完成,值为原值不变; ② 值操作已完成,值为正确计算结果。这将导致无法根据函数返回值来判断值操作成功与否(只有返回值是MI_OK才能确定是正确的)。换句话说,虽然为 MI_OK时能确定操作正确,但是由于为“非MI_OK”时可能完成操作,也可能未完成操作,因此如果这是返回重新进行值操作,那么一直等到MI_OK,就会出现多操作的现象。比如要求刷一次卡扣1元,那它可能扣掉2元、3元,甚至更多。这当然不是所期望看到的。 针对上述的情况,为了保证能正确地对卡进行操作和保证数据不丢失,一般在一个区划分2个数据块作为电子钱包,采用值段格式进行存储,分别定义为主值块(①块)和备份值块(②块),主值块和备份块相互备份。 图3 软件操作流程  先将主值块的值减去消费额得到的值存在备份值块中(①块→②块,使用“减”和“传送”操作),此时主值块还没改变;如果此操作为MI_OK,则继续下面的操作将备份值块的值送回主值块(②块→①块),使用恢复操作;如果操作为MI_OK,则此时①块和②块的值相等。每一步操作都判断结果,失败则重做。具体软件操作流程如图3所示。  4 结论  电子钱包作为有值卡的一种,对其操作的稳定性是非常重要的。在硬件方面,尽量把读卡器天线的读卡范围调到读卡的最大距离,以保证卡和天线有充分的时间耦合,为卡创造一个良好的硬件条件。但是由于读卡器的个体差异和个人刷卡习惯的不同,也会导致一些异常现象。这时需要用软件来弥补硬件上的不足。双值块操作虽然牺牲一些刷卡的时间,但是解决了单值块操作出现的一些问题,即使一个值块出现了问题,也能从另一个值块把数据传送过来,从而提高了系统的稳定性。另外,为了保证能够在卡离开天线之前完成对卡的操作,可以增加一些声光提示作为辅助(比如操作顺利完成后才进行声光提示)。这些细节也是必要的。该方法在室内已经经过严格测试,并投入运行阶段,工作稳定。本文来源:单片机与嵌入式系统应用 作者:潘绍明 潘仕彬

    时间:2019-02-14 关键词: 可靠性 非接触 嵌入式开发 ic 操作

  • 用VC++建立支持VB进行I/O端口操作的动态链接库

    摘 要:介绍了DLL的基本特点,论述了用VC++5.0构造输入/输出端口操作的DLL方法,举例说明了VB5.0对DLL的调用过程。 关键词:DLL 端口操作 VC++ VB Microsoft Windows已经广泛被人们所接受,人们越来越多地体会到了图形用户界面(GUI)给人们带来的好处。Visual 就是一种Windows环境下最主要的可视汉化的高级编程语言。由于使用简单,功能强大,比直接用VC++编写Windows下的程序更为方便而倍受程序设计人员的青睐。但由于VB不能直接对寄存器进行操作,没有直接的输入输出端口操作语句,使得它在测控领域中的应用有一定局限。而VC++同时具有汇编语言和高级语言的功能与特点,如果利用VC++编制一个动态链接库,库中包含对输入输出端口的读/写函数,然后在VB程序中,通过声明DLL中的函数并提供DLL路径来调用这些函数完成控制行为,就可利用VB编写数据采集与控制程序,使VB的应用更为广泛。 1 动态链接库DLL 所为动态链接库( Library,简称DLL),简单地说就是一个可执行模块,模块中包含了可以被应用程序或DLL共享的例程和资源。与生成应用程序链接的静态库不同的是,DLL与应用程序是独立分开的,只在运行时需要DLL的特定功能时才链接。此外,提供服务的机器代码不是加进应用程序中,而是仍然作为动态链接库的一部分,可以把DLL看成一个黑盒子,能用于完成特定任务或返回特定数。DLL的优点有: (1)公用服务 DLL提供的功能可以在不同时间或同一时间的多个不同应用程序中共享。不同应用程序调用DLL时,尽管只有一份执行代码,但每个调用程序中函数使用的数据是分开的。 (2)结构紧凑 尽管当前的编程趋势是充分利用内存降价和CPU增速的好处,但使用DLL仍然是减少执行文件的有效方式。不管应用程序如何编译,也不管是编译或解释,DLL提供的函数都不放到应用程序的.exe文件中,DLL提供的所有函数仍然留在DLL内,只有在需要时才调用。此外,由于在多个应用程序共享服务时也仍然只有一份DLL,所以节省了复制代码所需要的空间。 (3)易于修改,且执行速度快。 2 用VC++5.0构造DLL 若需要在DLL中构造二个函数来完成输入输出端口的读写功能,它们是: 8位端口读函数  int _input(int Num); 8位端口写函数  int _(int Num,int Data); 为了用VC++5.0生成DLL,首先启动VC++5.0并在IDE中选择File New Project标签,并选择Win32 Library选项,然后按照屏幕指示生成项目的基本文件。若输入工程名为WST,则生成的基本文件有WST.CPP源文件、WST.H头文件、WST.DEF定义文件。 (1)DEF文件 .DEF文件即定义文件,提供一列输出函数,使其在已编译的DLL中以外部程序可以访问的形式出现。 尽管不用.DEF文件也可以编译和链接DLL,并且不产生错误报告,但VB程序调用时,这个库没有可识别的进入点。 WST.DEF文件很简单,由一列仅有函数名的输出函数组成,也可以包括每个输出函数的序号。标准的.DEF文件以Library和语句开始。Library语句定义了DLL库名,语句是可选的,用于输入库的用途说明。然后是Exs语句,列出库中的输出函数名单,每个函数后面还可以加上序号: LIBRARY    "WST"  ′I/O and write Library′ EXPORTS  Port_input @1   Port_ @2 如果不显示定义序号,则DLL编译和链接时会按顺序指定缺省序号。 (2)头文件 与可选的.DEF文件不同,.H文件是绝对需要的,其它要使用WST.DLL库的C/C++应用程序要用.H头(在#include语句中)使应用程序能访问输出函数,VB不用.H头,但要求对应的函数语句。WST.H中的第一个项目为#define语句,将Export宏表示为:  Extern"C"_declspec(dllexport) 头文件或.CPP源文件在编译时出现EXPORT字样时,这个宏即展开为如下完整的语句: #define EXPORT extern"C"_declspec(dllexport) 在宏定义以后,需定义二个输出函数如下: EXPORT int CALLBACK port_input(int PortNum)   EXPORT int CALLBACK port_(int PortNum,int PortData);这里,EXPORT表示了每个函数为外部函数,变元采用C调用格式,库采用输出函数。CALLBACK宏已经在VC++中定义,展开为FARPASCAL,表示调用函数所需的处理过程。 (3)CPP文件 每个动态链接库都要有个入口点,习惯上取名为DLLMain,就象Windows中执行文件的入口点为WinMain,DOS中为Main一样。同样,调用DLLMain时的参数也是预定不变的。DLL的入口点函数在.CPP源文件中的最简单形式如下: int WINAPI DLLMain(HINSTANCEhinstance,DWORD dwReason,PVOID pvReserved) { TRUE; } 在DLLMain过程中,可以进一步修改,例如可以对库进行某种特殊的初始化。一般来说,在DLLMain过程中只要返回True向系统表示DLL加载正确即可。一旦提供了DLLMain过程,就可以编译和链接源文件,生成有效的DLL库了。当然这个库还没有任何功能,下一步要加进功能,至少提供一个输出过程。DLL过程与任何C/C++过程差不多,只是多了个EXPORT指定。源文件中要重复.H头中的过程定义,但这时不用终止分号,并具有变量类型标识符和变量名: EXPORT int CALLBACK port_intput(int PortNum) { _inp(PortNum); } EXPORT int CALLBACK port_output(int PortNum,int PortData){ _outp(PortNum,PortData); 0; } 在写完上面二个文件后就可以编译、链接该工程,生成WST.DLL文件 3 VB5.0调用DLL函数的方法 由于DLL中的函数对于VB5.0程序来讲是外部函数,因此用户须向VB5.0提供要使用的DLL函数的有关信息。这种提供信息的方法就是声明。VB5.0就是通过这种声明访问DLL的。其编译器根据这种声明确定参数、类型检查,而且在运行期间,VB5.0也将依据声明将参数压栈。一旦在窗体声明部分或在共用模块中声明了DLL过程,用户就可以象使用VB5.0关键字或是用户自己定义的VB5.0过程一样,很方便地使用DLL中的函数。 在主窗体中WST.DLL输出函数声明方法如下: Private Declare Function port_input Lib"D:\fort\WST.DLL"Alias"#1"(ByvalPortNum As Integer)As Integer  Private Declare Function port_output Lib"D:\fort\WST.DLLl"Alias"#2"(ByvalPortNum%,Byval PortData%)AsInteger 进行如上声明之后,在VB5.0窗体程序中,就可编写对端口进行操作的采集与控制程序。端口读/写操作语句示范如下: port_output(&h280,&h0A) '从端口280H输出数据0AH Value=port_input(&H280)  '从端口280H读入数据赋给变量Value   由于这种方法简单可行,无需编写复杂的设备驱动程序即可实现VB5.0对端口的读写操作,因此对利用VB5.0编写测控程序的开发人员来说,不失为一种方便的途径。

    时间:2018-12-12 关键词: vc 端口 操作 动态链接库 总线与接口

  • 基于VRTX操作系统实现V5接口协议

    基于VRTX操作系统实现V5接口协议

    引言接入网的概念是由传统的用户线发展起来的。近年来,由于电话业务的发展、新业务种类的增多、对线路带宽要求的提高以及各种新兴技术(特别是光纤通信技术)的发展,使得传统的用户线的概念逐渐发展成为接入网的概念。前几年,国际电信联盟(ITU)正式定义了用户接入网。引入接入网后,现有的电信网将减少端局数量,简化中继网的复杂程度,有利于中继网的管理。接入网所覆盖的范围可以由三类接口来界定,如图1所示。接口的标准化、性直接影响到接入网的建设成本及接入网能承载的业务能力,为此,ITU-T考虑各种需要,终于通过了关于接入网和本地交换机之间标准化的V5.1和V5.2接口的建议[1,2]。图1接入网的界定V5接口是一种在接入网中适用范围广、标准化程度高的新型开放的数字接口,对于设备的开发应用、多种业务的发展和网络的更新起着重要的作用。V5接口的标准化代表了重要的网络演进方向,影响深远。其意义在于交换机通过此接口可以支持多种类型的用户接入,而且V5接口的开放性意味着交换机和接入网的技术和业务演进完全独立开来。接入网的发展可以不受交换机的限制,使得接入网市场完全开放。一、 V5接口协议结构窄带V5接口包括V5.1和V5.2接口。V5.1接口由1条2048Kb/s链路构成,通过时隙传递公共控制信号,支持模拟电话接入,基于64Kb/s的业务数字网基本接入(2B+D)和用于半永久连接的、不加带外信令信息的模拟接入和数字接入。这些接入类型都具有指配的承载通路分配,即用户端口与V5.1接口内承载通路有固定的对应关系。V5.2接口按需要可以由1~16个2048Kb/s链路构成,除支持V5.1接口的业务外,还支持 PRI(30B+D)接入,其基于呼叫的时隙分配使得V5.2接口具有集中功能。V5.1接口是V5.2接口的子集,V5.1接口应当能够升级到V5.2接口。V5接口协议由3层组成,接入网侧和本地交换机侧呈不对称布置,层与层之间的信息传递采用原语实现,而同层子层间的信息传递则采用映射。V5接口物理层由1~16条2048Kb/s的链路构成,电气和物理特性符合G.703建议,帧结构符合G.704/G.706建议。每帧由32个时隙组成,其中:时隙TS0用作帧定位和CRC-4规程;时隙、和可以用作通信通路(C通路),运载信令信息和控制信息,通过指配来分配;其余时隙可用作承载通路。 V5接口的数据链路层仅对于C通路而言。第二层协议(LAPV5)规范以建议Q.921中规定的协议和规程为基础,允许将不同的信息流灵活地复用到C通路上去。第二层协议分为两个子层:封装功能子层(LAPV5-EF)和数据链路子层(LAPV5-DL)。此外,第二层功能中还应包括帧中继功能(AN-FR)。 V5接口的第三层协议簇包括协议、控制协议、链路控制协议、BCC协议和保护协议(后三种协议为V5.2接口特有)。协议负责处理与业务有关的信令;控制协议负责用户端口状态指示与控制,协调两侧在网管控制下的数据指配;链路控制协议负责协调和控制AN、LE两侧的链路阻塞、链路解除阻塞和链路标识功能;BCC协议用来把一特定2048Kb/s链路上的承载通路基于呼叫分配给用户端口;保护协议提供V5.2接口在出现故障时通信路径切换的保护功能。 如图2所示,当第三层协议有信令信息需要发送时,通过数据链路子层(LAPV5-DL),请求封装功能子层(LAPV5-EF),用给定的封装功能地址传送数据链路子层端到端数据。图2 V5接口协议结构 二、 V5接口的实现笔者曾参与IDS2000综合数字通信系统(接入网侧)V5.2接口的开放研制工作。IDS2000综合数字通信系统是电力自动化研究院为了满足电力通信网发展的需要而开发的一种综合接入设备。该设备具备V5接口,使得IDS2000系统可以很方便地通过开放接口和大型交换设备互连,取代了原先接入大型交换设备时所用的音频Z接口或专用接口。 V5接口协议分3层结构。物理层和数据链路层部分功能由硬件实现,这在超大规模集成电路飞速发展的今天,难度已不是太大。公司生产的大规模E1接口芯片就是一种很合适的芯片[3]。是一种单E1接口,综合了成帧器和LIU。重要特性包括数据链路接入、告警、中断、环回和诊断,并内嵌了两个控制器(),特别适用在V5接口(封装功能子层功能和协议类似)。 V5接口的第三层协议包含内容较多,由软件实现。本文主要结合嵌入式系统编程来介绍V5接口的第三层软件结构,对于协议细节的实现不多赘述。 1 实时多任务操作系统[4]目前,嵌入式应用领域的一个发展倾向是采用实时多任务操作系统( Operating )。的广泛使用与应用的复杂化有关。过去1个应用程序所控制的外设和履行的任务不多,采取1个主循环和几个顺序调用的子程序模块即可满足要求;但现在1个嵌入式控制系统可能要同时控制/监视很多外设,要求实时响应,有很多处理任务,各个任务之间有很多信息传递,如果仍采用原来的方法,存在两个问题:一是中断可能得不到及时响应,处理时间过长;二是系统任务多,要考虑的各种可能也多,各种资源若调度不当就会造成死锁,降低软件可靠性,程序编写任务量成指数增加。正是这种情况的出现,推动着的应用迅速发展。对于V5接口,系统软件工作量相当大,包括5个核心协议功能的处理,须管理很多器,有很多用户端口需要监视,并且要求实时处理,若采用传统的软件编程方法,很难实现。在IDS2000系统中,笔者采用VRTX实时多任务操作系统[5]作为开发平台,大大减轻了软件的工作量,而采用面向对象的编程方法和事件驱动的消息机制,使得协议程序具有高可靠性、可控、可观测、易于维护和管理。 2 V5接口软件框图如图3所示,V5接口软件主要包括: (1) 数据链路层模块(仅包括数据链路子层功能,封装功能子层由硬件板完成);   (2) PSTN协议处理模块;   (3) 控制协议处理模块(包括用户端口状态机、指配控制状态机、公共控制状态机);   (4) 链路控制协议处理模块(包括链路控制状态机、链路控制L3状态机);   (5) BCC协议处理模块;   (6) 保护协议模块;   (7) V5接口AN侧系统管理模块;   (8) V5接口AN侧资源管理模块;   (9) 器管理模块;   (10) 消息处理模块;   (11) 用户端口模块;   (12) 10ms中断。图3 V5接口软件框图 上述模块中,模块1~7完成V5接口协议的核心功能。其中,数据链路层模块对模块2~7所产生的消息进行处理,交由V5硬件接口板完成封装功能,再发送给LE侧实体;PSTN协议处理模块主要功能是建立用户端口状态和LE侧国内协议实体之间的联系;控制协议模块用于表示用户端口状态指示与控制,还和系统启动、重新启动、指配有关;V5接口AN侧系统管理模块是协议功能正常实现的重要部分,在AN和LE中,不同的FSM之间或第二层协议实体之间没有直接的通信,而是通过系统管理来协调V5接口各个协议实体之间的操作。另外,系统管理负责从AN或LE的各种功能模块中接收和处理有关状态和故障的信息。系统管理还是维护台或网管系统与V5接口之间的桥梁,它负责接收维护命令,并对V5接口执行相应的操作,随时向上层网管报告系统的运行状况。模块8~12完成V5接口协议的辅助功能。其中用户端口模块负责用户端口状态扫描与控制,直接与硬件端口联系;AN侧资源管理模块配合BCC协议处理模块完成V5接口中BCC协议功能;消息处理模块是为了减轻操作系统的负担设立的,它负责协同操作系统管理各模块的消息队列;定时器管理模块负责产生、管理系统中所需要的定时器,当定时器溢出时,发送消息至相应模块;10ms定时中断程序负责调度系统中需周期性运行的任务,采用“信号量”(semaphores)的通信机制完成。 3 有限状态机在上述程序模块中,存在大量的有限状态机(FSM),如控制协议中的用户端口FSM、公共控制FSM、BCC协议中的承载通路连接FSM等。有限状态机是描述通信协议过程的一般方式,是一种面向对象的描述方法,与具体实现程序无关。有限状态机具有有限状态集,在任意给定的时刻,必有惟一确定的状态,在某状态下必须依赖于外部输入的特定消息触发,才能引起状态转移或执行某种任务。 有限状态机对于系统软件而言相当于一个“黑匣子”。它可以接收有限的消息组,也可以发送特定的消息组,但其内部结构不为系统部分所知。它的功能完全由它接收和发送消息顺序所决定。有限状态机的这种描述方式很适合用面向对象的方法实现。在传统的实现方法中,状态变量和状态表可以在状态机模块外被访问,易于遭到破坏。面向对象的实现方法提供了一种更加结构化和更加直观的FSM实现方法,更利于“数据隐藏”,而且这些优点随着FSM规模的增大越发明显。我们只须要定义一个FSM基类,利用封装、继承和多态性的特点,就很容易从先前定义的基类中派生出所需要的FSM,大大减少了软件的工作量,软件也易于维护。 4 定时器的实现机制定时器对于正确实现通信协议功能有着很重要的作用。V5接口协议中存在大量的定时器,当话务量较大时,可能有数百个定时器同时运行。定时器的设计是正确完成V5接口协议功能的一个重要部分。 本系统中由定时器管理进程负责管理V5接口中所有的定时器。由于各种定时器所要求的精度各不相同,所选择时间的长度对各定时器进行监视和计数累计是问题的关键:时间间隔太小,影响系统运行效率;时间间隔太长,影响定时器的精度。为了解决这个问题,系统中设定了三种不同分辨率的定时器:10ms、和1s(分辨率指计数时间间隔)。若某应用进程须要使用定时器,首先要向定时器管理进程发送一消息,消息中应包含申请定时器的分辨率、预置计数值、溢出后应发送的消息等信息。定时器管理进程收到该消息后,根据定时器的分辨率将其放到合适的定时队列中,启动定时。若定时器计数为零,则表示该定时器溢出,定时器管理进程应向相应的应用进程发送溢出消息,同时应释放该定时器。应用进程若主动要求放弃一定时器,则应向定时器管理进程发送一释放定时器消息。消息中应包含所申请定时器的标号、分辨率以及溢出目标进程、目标对象等。定时器管理进程接收到此消息后,在合适的定时器队列中寻找到该定时器后,将其释放。 定时器管理进程管理其他各应用进程所申请的定时器。在定时器管理进程中,有三个链表分别用于存放这3种不同分辨率的定时器。定时器管理进程完成以下一些基本功能: (1) 管理10ms、和1s三种定时器链表。(2) 当10ms定时间隔到,应遍历10ms定时器链表,完成对链表中各定时器的计数处理。若有定时器溢出,则向相应的进程发送溢出消息,并从定时器链表中释放该定时器。同样,当或1s的定时间隔到时,也应对100ms或1s定时器链表作相同处理。 (3) 处理从其他进程接收到的消息。当收到从其他进程发送的申请定时器的消息时,应在相应分辨率的定时器链表中插入所申请的定时器;在接收到从其他进程来的释放定时器的消息后,应寻找到该定时器,并将其释放。5 编写可重入函数 V5接口中有大量的函数需要编写。和传统的编程环境不同,本系统中,V5接口软件运行在多任务环境上,函数的可重入性(reentrancy)显得很重要。所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。在编写函数时应尽量只使用局部变量,对于要使用的全局变量需要加以保护(如采用关中断、信号量等措施),这样构成的函数一定是可重入的;而编译器是否具有可重入的库,与它所服务的操作系统有关,如DOS下的 C和Microsoft C/C++等就没有可重入函数库,这是因为DOS是一个单用户、单任务的操作系统。 为了确保每一个调用函数的任务控制自己私有变量,在一个可重入的C函数中,将这样的变量申明为局部变量,C编译器将这样的变量存放在调用栈上或寄存器里。在VRTX操作系统下编写可重入的函数,须要遵循以下原则: (1) 将所有局部变量申明为或寄存器(register)类型; (2) 尽量不要使用static或extern变量,不可避免使用全局变量时,需加以保护; (3) 用VRTX库函数sc_gblock分配大的数据结构。三、 V5接口发展的趋势从长远看,为了克服现有一系列SNI(业务节点接口)功能的限制,须要开发附加的SNI,特别是模块型和B-接入型SNI。目前,以ATM为基础的VB5接口的标准化工作正在进行。VB5参考点可分为VB5.1和VB5.2两种形式。ITU-T已经通过了关于VB5参考点的建议,规定了VB5既支持AN与SN的直接连接,又支持两者的远程连接;既支持基于ATM的B-接入,又支持各种非ATM的接入。此外,VB5还应支持接入各种SN的接入功能,并能同时连接到多个不同的SN。有关VB5的技术框架还有待进一步研究和开发。V5接口

    时间:2018-10-25 关键词: 协议 接口 操作 系统实现 总线与接口

  • 初学stm32例程——GPIO Test(端口操作实验)

    初学stm32例程——GPIO Test(端口操作实验)

    GPIO实验是最简单,也是一般最先开始的一个实验,他可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。建议,当该实验顺利完成后,作为一个模板,供以后实验使用,确保您可以将精力花费在需要实现的功能上。本实验需要实现:四个LED的简单控制。1.1 硬件设计:1. 确认硬件连接:根据开发板原理图,如图,得知:与LED相连的有PB12、PB13、PB14、PB15;以下就是对这四个引脚的配置,及相关操作;1.2 软件设计://main()程序开始……1.2.1 头文件:#i nclude "stm32f10x.h"#i nclude "main.h"//#i nclude "k_gpio.h" //已经转移到main函数中;#define VECT_TAB_RAM //选择在RAM中调试;//main()函数:1.2.2 系统初始化SystemInit(); //选择系统运行时钟,默认是72MHz,可以调试跟踪进行修改;#ifdef VECT_TAB_RAM //设置仿真调试区域,这里设置成在RAM中; // Set the Vector Table base location at 0x20000000 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ // Set the Vector Table base location at 0x08000000 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif1.2.3 GPIO配置 //首先,选择GPIOB外设时钟;只有选择好时钟后,才可以进行下面的配置;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //配置端口,开始时,不需要知道所有的细节,从字面上理解就ok;gpio.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &gpio); GPIO_SetBits(GPIOB, GPIO_Pin_12); //将端口拉高,灭LED灯;GPIO_SetBits(GPIOB, GPIO_Pin_13);GPIO_SetBits(GPIOB, GPIO_Pin_14);GPIO_SetBits(GPIOB, GPIO_Pin_15);如此,GPIOB连接LED的四个端口都配置好了;1.2.4 GPIO操作While(1){ GPIO_ResetBits(GPIOB, GPIO_Pin_12); Delay(0xffffff); GPIO_ResetBits(GPIOB, GPIO_Pin_13); Delay(0xffffff); GPIO_ResetBits(GPIOB, GPIO_Pin_14); Delay(0xffffff); GPIO_ResetBits(GPIOB, GPIO_Pin_15); Delay(0xffffff); Delay(0xffffff); Delay(0xffffff); GPIO_SetBits(GPIOB, GPIO_Pin_12); Delay(0xffffff); GPIO_SetBits(GPIOB, GPIO_Pin_13); Delay(0xffffff); GPIO_SetBits(GPIOB, GPIO_Pin_14); Delay(0xffffff); GPIO_SetBits(GPIOB, GPIO_Pin_15); Delay(0xffffff); GPIO_ResetBits(GPIOB, GPIO_Pin_12); GPIO_ResetBits(GPIOB, GPIO_Pin_13); GPIO_ResetBits(GPIOB, GPIO_Pin_14); GPIO_ResetBits(GPIOB, GPIO_Pin_15);}如此而已;这是最简单的实验,可以为此建立一个拥有自己特色的工程模板;1.3 Test注意A、硬件必须首先确保正确;B、开发环境搭建确保正确;C、系统时钟的选择要清楚;仿真所处的区域要清楚;D、外设时钟的配置是第一位的,其他配置都在其后;

    时间:2018-12-19 关键词: TEST 端口 操作 例程 总线与接口

  • DSP中DMA操作的无阻塞请求实现

    DSP中DMA操作的无阻塞请求实现

    DMA在DSP应用中至关重要,本文给出了DMA操作非阻塞的请求方法,针对TMS320C620x,实现了与CSL中DAT接口一致的驱动模块QDAT,并指出了EDMA相关的高级特征。 在DSP中,DMA控制器实际是一个外设,与其他集成的串口、主机接口、片外内存接口等都在系统外设总线上,也与其他外设一样有一组相关的控制/状态/数据寄存器,CPU可以访问。 非常重要的一点是,DMA通道能够用于内存之间的数据传送。这里内存都是统一编址的,包括:片上内存,程序和数据分立;接在EMIF上的片外内存,如SDRAM;外设的寄存器也都是内存映射的(memory-mapped),所以DMA通道也可以用于外设和内存之间,进行外设数据接收与发送。 在DSP的处理模型中,所有数据应位于片上供CPU处理,不鼓励CPU直接访问片外数据,因为CPU访问片外资源的时间较长,周期数也不确定,对于实时性和确定性不利。片上内存有时也能够配置成为缓存(cache),缓存控制器会根据一定策略、使用DMA方式切换片外的数据进出缓存,最终使得用户能够在片上访问数据,这个过程对用户是透明的。正因为缓存的机制是透明的,所以也是很难控制的。比如,一段调用频率很高的代码很可能被不常用的部分清出缓存,因为它们映射相同,但随后又很快被调入,这样会造成局部的效率降低。 所以,如果能够明确掌握程序流或数据流的运转特征,不使用缓存模式,用户通过DMA进行自定义的调度,可能提高效率。有的处理器不具备缓存控制器,不支持片上内存作为缓存,如C6205的片上数据内存就不能够配置为缓存,所以主动使用DMA移动数据不可避免。DSP的DMA功能一般也都较为强大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D数据传送,对DMA的合理使用可能替代相当的编程效果,如排序、采样或裁剪。 TI的CSL(Chip Support Library,芯片支持库)对于使用DMA给出了很好的支持,有专门的DMA模块,便于对DMA的各个寄存器进行控制。还有一个DAT模块,使用DMA进行内存数据传送,函数DAT_copy()和DAT_fill()就像常用的内存操作memcpy()、memset()一样,只需要在API接口指出源地址、目的地址和长度,或者其他的维数属性等即可,不需要再去管具体的寄存器,非常方便。 视频处理实例分析 DAT模块易用,但因为是在CSL中,所以只能将DMA控制器直接的功能表达出来。对于灰度图像处理(先不考虑将算法处理后的结果传回片外的情况),在下面的处理框架中,每次DMA执行操作时,CPU在前台还可以做算法处理任务。 ... task=DAT_copy(...);//启动头一个DAT任务 ... while(not_finished){ DAT_wait(task); //本次task完成 task=DAT_copy(...); //启动下一次的DMA pingpong_alg_process(...); //对本次传送的数据处理 } 当视频为4:2:0 YUV图像(planar模式)序列,需要处理某一区域时,实际上是在相同时机处理Y、U、V三块数据,通常它们并不连续,也就是说,将会同时使用三个DMA操作。 这里可能可以同时启动多条DMA通道,但有一些限制: 1. 有的处理器支持同时启动的DMA通道数有限,有些DSP有4条通道,但寄存器集只能完整地支持两条; 2. 由于共享总线和某些接口,同时工作的DMA通道数过多将可能增加访问冲突,降低系统性能; 3. 有时多条通道又必须同时使用,比如系统视频、音频采集进入的数据必须占用独立的通道。 所以,上面的任务能够尽量使用一个DMA通道完成,不失一般性,DAT模块的所有操作实际上是在一条打开的通道上完成的。那么,对于YUV图像,处理程序框架类似上面,可能如下, ... taskY = DAT_copy(...); taskU = DAT_copy(...); taskV = DAT_copy(...); ... while(not_finished){ DAT_wait(taskY); DAT_wait(taskU); DAT_wait(taskV); taskY = DAT_copy(...); taskU = DAT_copy(...); taskV = DAT_copy(...); YUV_pingpong_process(...); 这时问题出现了:C620x的DMA通道一次只能接受一个传送请求,也就是说,每次请求必须等到该通道空闲时才可能真正提交上去,这样taskY和taskU在后台操作时,前台无法进行taskU和taskV的启动,即实际上前台没有什么处理任务可做,浪费了效率。而这三个dat任务绑定在一起,启动时机很难拆开。显然,如果能够允许DMA请求连续地提交,将提高效率。 DMA通道请求非阻塞提交的方法 把DMA通道看作一个单处理单元,每个DMA操作作为一个任务,这就形成了一个单处理多任务的模型,任务调度就是FIFO。不妨定义: 1. DMA通道请求上下文是一个数据结构,它包含启动一次DMA传送所需要设定的寄存器参数集合,如源、目的、长度、index寄存器(维数)等等; 2. DMA通道请求上下文队列,一个DMA请求上下文的队列用以缓存DMA请求; DMA通道的使用和请求非阻塞的提交应有以下两条原则: a. 应用程序的使用DMA通道的方法: 提交DMA通道请求(无阻塞),获得此次任务的id;在需要使用某任务的目标内存时,应检查该id任务状态直到完成;如果完成,即可进行相应的处理。 b. 无阻塞提交DMA通道请求的实现:标志此次DMA传送任务正在进行;如果DMA通道空闲,设置寄存器启动DMA操作,标志DMA通道正在工作;如果DMA通道正在工作,则将此次DMA请求插入上下文队列。 3. DMA中断服务程序(注:DAT模块不使用ISR,只是查询对应标志,确定DMA传送是否完成):标志此次DMA传送任务完成;如果DMA请求上下文队列为空,标志DMA通道空闲;如果DMA请求上下文队列非空,则从队列中取出头一个DMA请求上下文,用以设置相应的寄存器启动DMA操作。 QDAT:一个非阻塞的DMA模块实现 在TI C620x DSP上,一个非阻塞的DMA模块QDAT根据以上原理得以实现。 QDAT的API与DAT模块的基本一致,优点是使用上述的YUV图像处理应用程序中,不会发生DMA请求阻塞; QDAT与DAT模块功能相似,但属于驱动程序层次的实现,基于:CSL的DMA模块;CSL的IRQ模块;以及DSP/BIOS的QUE模块。 不过实现十分简便、轻盈。 该模块独立于应用和算法,已经在基于TI C620x DSP上的多个项目中使用,效果十分理想,特别是因为QDAT任务中的DMA操作经过了串行化,也大大降低了在EMIF上访问内存时的冲突。 EMDA的先进特征这些项目向新的TI DM642媒体处理器上移植时,以上的操作将利用EDMA的先进特征, 因为TI C6x1x 和 C64x DSP开始使用EDMA,值得注意的是,EDMA通道控制器(EDMACC)有专门的PRAM(parameterRAM)来缓存DMA请求参数,EDMA事件参数表中有标志以及LINK address,用来指示本次DMA传送结束后, 是否有新的DMA请求参数需要重载入操作寄存器; 如果有,LINK address所指就是新的参数在PRAM的位置。 显然因为这样的链表机制,使用该通道连续两次传送之间无需中断处理程序(CPU)介入队列管理,效率将提高。 对于频繁的内存数据传送,如DAT操作一般使用QDMA, 它由CPU直接将传送请求(TR)提交给传送控制器(EDMATC),TC中有四个优先级队列,每个TR都将进入其对应(已指定)的一个队列。 对于不同的请求源,队列的长度可编程,每个队列最多可以接收7个QDMA请求。 如果队列有空,TR就可以进入;若满了,CPU将会停止(stall)几个EDMA周期等待TC的执行,队列随即空出一个位置。 总之,EDMA执行机构这种纯硬件的队列机制使得效率提升更加极大化, 减少了软件对此的相关开销。 欲获取相关技术信息可以访问www.embeddedcore.com。

    时间:2018-09-05 关键词: DSP dma 实现 操作 驱动开发 无阻塞请求

  • 开关操作静噪电路

    开关操作静噪电路

    ;;; 开关操作静噪电路主要是卡座中录放ECJ1VC1H110G开关等操作时的静噪电路。当电路处于通电工作状态时,若电路中的某一开关发生转换动作,电路会产坐噪声,这一静噪电路就是用来消除这种类型的噪声的。;;;;;;;;;; ;;; 录放开关操作静噪电路;;; 图5-8所示是录放开关操作静噪电路。A131构成前置放大器电路。SW102-C是录放开关中一组特殊的刀开关,它的特点是在开关图5-8录放开关操作静噪电路转换时(无论是从录音转换到放音,还是放音转换到录音),开关的3个触点均有一个很短时间的同时接通过程,然后开关进入断开状态,,所以这一点与普通录放开关不同,静噪电路正是利用这一特点来工作的。;;; 当录放开关在转换时,由于3个触点同时接通,这样直流电压+V经电子滤波管VT711集电极和发射极、SW102-C、R151和R152分别加到VT131、VT132基极,两管导通,对前级送来的噪声分流,达到开关操作静噪目的。在开关转换的机械动作完成之后,SW102-C的触点断开,此时VT131和VT132基极没有电压,两管截止,没有静噪作用,放大器进入正常工作状态。

    时间:2019-02-26 关键词: 电路设计 电路 操作

  • linux设备号之操作

    linux设备号之操作

    作者:李强,华清远见嵌入式学院讲师。在Linux设备驱动中,设备号设一个很重要的概念和变量。不论是主设备号,还是次设备号,在设备驱动中都占据了很重要的地位。那么他在Kernel中是如何操作的?这个数据结构都是通过那些函数可以很容易的在我们写Linux设备驱动模块时被我们所使用呢?在include/linux/type.h文件中我们能看到一个关于dev_t的定义如下:...typedef __u32 __kernel_dev_t;typedef __kernel_fd_set fd_set;typedef __kernel_dev_t dev_t;...从这个定义中我们能看到dev_t是一个无符号的32位的整型。首先我们需要说明的是,在linux中主次设备号是放置在一个无符号的32位的整型中,那么这32位整型对于主次设备号如何分配呢?从源代码中我们可以看到,主设备号占据12个位,次设备好占据20位。这在一定的时期内,主次设备号是完全可以满足系统需要的。同时在include/linux/kdev_t.h文件中我们能发现很多函数或者宏定义的操作都是针对dev_t的。具体可以看到我们经常用到的MAJOR(dev)、MINOR(dev)、MKDEV(ma,mi)。下面我们就具体分析下这三个我们经常用到的宏定义:#define MINORBITS 20#define MINORMASK ((1U << MINORBITS) - 1)#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))从这个宏定义中我们可以看到其把无符号的32位的整型做位操作运算:右移20位。在C语言中如果是右移,那么左边补0,这样在这32位的整型中通过这个操作就只保留了原先第19位到31位的有效值,而这也正是我们所需要的。下面我们看下MINOR这个宏定义:#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))要明白这个宏定义的具体是多少,我们需要首先明白宏定义MINORMASK是什么?我们从前面的宏定义中,我们看到:#define MINORMASK ((1U << MINORBITS) - 1)MINORMASK 是1U也就是1左移位20个字节,二进制的话就是10000000000000000000,也就是1后面带20个0。然后在减1呢,就成了二进制11111111111111111111,也就是20个1,十六进制的话是0xFFFFF。好现在我们知道MINORMASK是20个1,也就是十六进制0xFFFFF,那么我们在与dev_t做一个位的与运算,就把32位中的前12为置0,保留其后面的20位,也正是我们想要的表是设备次设备号的后20个字节。好下面我们看下如果我们知道了主设备号、次设备号,我们如何生成一个dev_t的数据结构。宏定义:#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))明白了前面我们所说的,其实这个就比较简单了,把主设备号左移20位,然后与上次设备号,就是我们所需要的dev_t的数据结构。那么我们前面所说的关于dev_t的操作是新的2.6.x系列中的,在之前的2.4.x系列中,由于对设备号的总共就16个字节,也就是一个短整型,那么一个系统中所能拥有的设备号就是及其有限的了。我们看下在老版本中的内核中他们的表示:#define MAJOR(dev) ((dev)>>8)#define MINOR(dev) ((dev) & 0xff)#define MKDEV(ma,mi) ((ma)<<8 | (mi))从中我们可以看出,他是以8为为分界线,高8位为主设备号,低8位为次设备号,那么一个8位所能表示的最多也即是255个数值,那么当我们系统中如果拥有的设备大于这个数值的时候,在老版本的内核中就没有办法处理了。在内核实现中还实现了两个打印的函数,其实也是宏定义:#define print_dev_t(buffer, dev) \sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev))#define format_dev_t(buffer, dev) \({ \sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev)); \buffer; \})从代码中我们可以看出。第一就是把设备的主设备号和次设备号以字符串的形式存放到buffer中,在使用这个宏定义的时候需要注意的是:buffer需要提前开辟空间,而且还需要是够用的空间。第二所实现的功能和第一个很类似。这儿我们就不具体说明,请参考第一个宏定义的实现。在这个文件中还有很多的函数,这些函数的主要功能就是和老版本的内核代码兼容而产生的,比如:static inline int old_valid_dev(dev_t dev){return MAJOR(dev) < 256 && MINOR(dev) < 256;}此函数是判断一个dev_t是否可以转换成旧制的dev_t。static inline u16 old_encode_dev(dev_t dev){return (MAJOR(dev) << 8) | MINOR(dev);}把32位的设备号转换成16位的旧制的设备号。其中主要操作为:首先把主设备号左移8位,为次设备好空出8位的位置,然后与上次设备号。在使用这个函数的时候需要注意的就是需要首先判断下32位的设备号是否可以有效的转换成16位的设备号。static inline dev_t old_decode_dev(u16 val){return MKDEV((val >> 8) & 255, val & 255);}上面函数的反操作。主设备号右移8位,然后与上255,即8个1。也就是取此变量的低8位,次设备号与上255,也是取此变量的低8位即可。static inline u32 new_encode_dev(dev_t dev){unsigned major = MAJOR(dev);unsigned minor = MINOR(dev);return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);^^^^^^^^^^^^^次设备号取其低8位 ^^^^^^^^^^^^^^主设备号左移8位。^^^^^^^^^^^^^^^^^^^^^^^次设备号低8位清零,左移12位。}static inline dev_t new_decode_dev(u32 dev){unsigned major = (dev & 0xfff00) >> 8;unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00);return MKDEV(major, minor);}次函数比较简单,再次就不多说了,请参考前面的实现。“本文由华清远见http://www.embedu.org/index.htm提供”华清远见

    时间:2018-07-11 关键词: 设备 Linux 操作

  • 遥操作机器为系统中6自由度输入设备的设计

    作者:武汉华中理工大学控制科学与工程系(430074) 彭 刚 黄心汉 熊春山 王 敏 来源:《电子技术应用》 摘要:介绍基于超声波测距技术的6自由度3-d输入设备的设计原理。采用检测渡越时间的方法,结合自动增益控制(agc),自适应可变阈值技术和温度补偿技术,提高距离检测精度。经过空间解析几何运算,确定输入设备在空间坐标系中的位置和姿态。同时,检测按键的状态,确定所要实现的操作。可用于遥操作机器人系统中末端执行器的定位与定向、虚拟现实系统的3-d交互设备、头盔跟踪、视点导航和目标操纵等。 关键词:3-d输入设备 定位与定向 超声波测距 遥操作机器人 虚拟现实 传统的2-d输入设备,如鼠标,轨迹球和绘图板等只能提供二维(平面)位置信息,不能提供其在空间坐标系中的三维位置和方向信息,从而限制了它们在未来3-d图形化人机交互界面系统,尤其是遥操作机器人和虚拟现实系统中的应用。 当前的3-d输入设备依据原理可分为机械式、电磁式、光学式、声学式和惯性式等[1]。由于声学式的3-d输入设备具有易于实现、成本低、对光线不敏感、无电磁辐射等优点,我们采用超声波测距技术来实现具有6个自由度(dof)的3-d输入设备,并结合自动增益控制(agc),自适应可变阈值技术和温度补偿技术,以提高距离检测精度,从而测得安装在输入设备上的超声波发射探头到三个接收探头的距离。经过空间解析几何运算,可得3-d输入设备在空间坐标系中的6个自由度信息:位置(x,y,z)和方向(γ,β,α)(即姿态,也就是绕x、y和z轴的旋转角),如图1所示。同时,检测3-d输入设备上的按键状态,确定所要实现的操作。 1 超声波测距 1.1 测距原理 输入设备的三维定位与定向基于一维测距技术。要实现三维定位与定向,就需要获得发射点到接收点的距离值。超声波测距的方法有多种:如相位检测法、声波幅值检测法和渡越时间检测法等[2]。相位检测法虽然精度高,但检测范围有限;声波幅值检测法易受反射波的影响。本文采用渡越时间检测法,其原理为:检测从发射换能器发出的超声波,经气体介质传播到接收换能器的时间,即渡越时间。渡越时间与气体介质中的声速相乘,便可得到超声波发射器和接收器之间的距离。 在3-d输入设备定位与定向系统中,选用工作频率为40khz的pzt5压电陶瓷振动模式的超声波换能器。超声波测距原理结构框图如图2所示。三路超声波发射接收框图都相同,图2只画出了一路超声波发射接收框图。 1.2 渡越时间检测 时序电路控制超声波换能器以固定的时间间隔来发射超声波。电路时序及各信号波形如图3所示[3]。 整个电路的时序由trigger信号控制。control信号由trigger信号负跳沿触发,它把触发周期t1和t2合并为一个检测周期,这样是为了达到可变阈值检测的目的。其中,t1为精密峰值检测周期,t2为可变阈值检测周期。gate信号是为了屏蔽虚假接收波。wave信号为超声波发射及接收信号。发射的脉冲数应选择合适,脉冲个数多有不少优点:脉冲能量大,受其它声波模式影响较小等;但脉冲个数多,盲区大,且余振波头也多。通过实验,取4个脉冲。peak信号是精密峰值信号,由积分充电电路得到。由于接收波随距离增加迅速衰减,为了使接收波的幅值不随测量距离的变化而大幅度地变化,采用可变增益控制(agc)技术,有利于获得精确的距离信息。 threshold信号为自适应可变阈值信号,它反映前一周期接收波信号的幅值大小。相邻两个接收波信号的峰值相差不大,将t1周期得到的精密峰值乘以一个比例因子,得到threshold信号,作为t2周期的阈值,和wave信号相比较,保证每次在同一个接收波头(在本系统中,n=4)后开始封锁计数器,获得渡越时间(如图4和图5),从而不

    时间:2019-03-08 关键词: 设备 机器 操作 自由度 设计教程

首页  上一页  1 2 3 4 5 6 下一页 尾页
发布文章

技术子站

更多

项目外包

更多

推荐博客