tag 标签: dll

相关博文
  • 热度 3
    2017-9-26 15:29
    5718 次阅读|
    1 个评论
    关键技术之一 --- 差分时钟 差分时钟是 DDR 的一个非常重要的设计,是对触发时钟进行校准,主要原因是 DDR 数据的双沿采样。由于数据是在时钟的上下沿触发,造成传输周期缩短了一半,因此必须要保证传输周期的稳定以确保数据的正确传输,这就对 CK 的上下沿间距有了精确的控制的要求。一般说来,因为温度、电阻性能的改变等原因, CK 上下沿间距可能发生变化,此时与其反相的 CK# 就起到纠正的作用,因为, CK 上升沿快下降沿慢, CK# 则是上升沿慢下降沿快。也就是,与 CK 反相的 CK# 保证了触发时机的准确性。 关键技术之二 --- 数据选取脉冲( DQS ) DQS 是 DDR SDRAM 中的另一项关键技术,它的功能是用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗芯片都有一个 DQS 信号线,它是双向的,在写入时它用来传送由芯片发来的 DQS 信号,读取时,则由内存生成 DQS 向芯片发送。因此可以认为 DQS 就是数据的同步信号。 我们知道 DDR 之前的 SDR 就是使用 clock 来同步的,因此理论上, DQ 的读写时序完全可以由 clock 来同步。但是,由于速度提高之后,可用的时序余量越来越小,而引入 DQS 是为了降低系统设计的难度和可靠性,也就是可以不用考虑 DQ 和 clock 之间的直接关系,只用分组考虑 DQ 和 DQS 之间的关系,很容易同组同层处理。 DQ 和 DQS 只是组成了源同步时序的传输关系,可以保证数据在接收端被正确的所存,但是 IC 工作时,内部真正的同步时钟是 clock 而不是 DQS ,数据要在 IC 内部传输存储同样需要和 clock( 内部时钟比外部时钟慢 ) 去同步,所以就要求所有的 DQ 信号还是同步的,而且和 clock 保持一定的关系,所以就要控制 DQS 和 clock 之间的延时了。 在写入时,以 DQS 的高 / 低电平期中部为数据周期分割点,而不是上 / 下沿,但数据的接收触发仍为 DQS 的上 / 下沿。 关键技术之三 --- 延迟锁定回路( DLL ) 第三个关键技术是 DLL 技术,也就是延迟锁定回路。需要这种技术的原因是,内外时钟的不同步问题。内外时钟不同步在 SDRAM 中就存在了,不过因为它的工作 / 传输频率较低,所以内外同步问题并不突出。但是, DDR SDRAM 对时钟的精确性有着很高的要求,而 DDR SDRAM 有两个时钟,一个是外部的总线时钟,一个是内部的工作时钟,在理论上 DDR SDRAM 这两个时钟应该是同步的,但由于种种原因,比如温度、电压波动而产生延迟使两者很难同步,更何况时钟频率本身也有不稳定的情况。我们熟悉的 DDR SDRAM 的 tAC 就是因为内部时钟与外部时钟有偏差而引起的,它很可能造成因数据不同步而产生错误。 怎么解决呢?实际上,因为不同步就是一种正 / 负延迟,如果延迟不可避免,那么若是设定一个延迟值,如一个时钟周期,那么内外时钟的上升与下降沿还是同步的。鉴于外部时钟周期也不会绝对统一,所以需要根据外部时钟动态修正内部时钟的延迟来实现与外部时钟的同步,这就是 DLL 的任务。 DLL 主要的目的就是生成一个延迟量给内部时钟,来补充正负不同步造成的正负延迟。 有了这些技术就构成了内存帝国的最基本的元素,之后的 DDR2 , DDR3 和 DDR4 以及即将推出的 DDR5 将以此为基础,内存的功耗及频率得到一次又一次的飞跃。 ​ ​
  • 热度 29
    2014-7-30 08:44
    2228 次阅读|
    0 个评论
    共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。 共有两种链接方式: 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。 静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。 关于lib和dll的区别如下: (1)lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。 (2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。 (3)动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。 使用lib需注意两个文件: (1).h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。 (2).LIB文件,略。 使用dll需注意三个文件: (1).h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。 (2).LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误。 如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。 (3).dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。 使用lib的方法: 静态lib中,一个lib文件实际上是任意个obj文件的集合,obj文件是cpp文件编译生成的。在编译这种静态库工程时,根本不会遇到链接错误;即使有错,也只会在使用这个lib的EXT文件或者DLL工程里暴露出来。 在VC中新建一个static library类型的工程Lib,加入test.cpp文件和test.h文件(头文件内包括函数声明),然后编译,就生成了Lib.lib文件。 别的工程要使用这个lib有两种方式: (1)在project-link-Object/Library Module中加入Lib.lib文件(先查询工程目录,再查询系统Lib目录);或者在源代码中加入指令#pragma comment(lib, “Lib.lib”)。 (2)将Lib.lib拷入工程所在目录,或者执行文件生成的目录,或者系统Lib目录中。 (3)加入相应的头文件test.h。 使用DLL的方法: 使用动态链接中的lib,不是obj文件的集合,即里面不会有实际的实现,它只是提供动态链接到DLL所需要的信息,这种lib可以在编译一个DLL工程时由编译器生成。 创建DLL工程的方法(略)。 (1)隐式链接 第一种方法是:通过project-link-Object/Library Module中加入.lib文件(或者在源代码中加入指令#pragma comment(lib, “Lib.lib”)),并将.dll文件置入工程所在目录,然后添加对应的.h头文件。 #include  " stdafx.h " #include  " DLLSample.h " #pragma comment(lib,  " DLLSample.lib " )     // 你也可以在项目属性中设置库的链接 int  main() {         TestDLL( 123 );    // dll中的函数,在DllSample.h中声明          return ( 1 ); } (2)显式链接 需要函数指针和WIN32 API函数LoadLibrary、GetProcAddress装载,使用这种载入方法, 不需要.lib文件和.h头文件,只需要.dll文件即可 (将.dll文件置入工程目录中)。 #include  iostream #include  windows.h           // 使用函数和某些特殊变量 typedef  void  ( * DLLFunc)( int ); int  main() {         DLLFunc dllFunc;         HINSTANCE hInstLibrary  =  LoadLibrary( " DLLSample.dll " );          if  (hInstLibrary  ==  NULL)          {           FreeLibrary(hInstLibrary);         }         dllFunc  =  (DLLFunc)GetProcAddress(hInstLibrary,  " TestDLL " );          if  (dllFunc  ==  NULL)          {           FreeLibrary(hInstLibrary);         }         dllFunc( 123 );         std::cin. get ();         FreeLibrary(hInstLibrary);          return ( 1 ); } LoadLibrary函数利用一个名称作为参数,获得DLL的实例(HINSTANCE类型是实例的句柄),通常调用该函数后需要查看一下函数返回是否成功,如果不成功则返回NULL(句柄无效),此时调用函数FreeLibrary释放DLL获得的内存。 GetProcAddress函数利用DLL的句柄和函数的名称作为参数,返回相应的函数指针,同时必须使用强转;判断函数指针是否为NULL,如果是则调用函数FreeLibrary释放DLL获得的内存。此后,可以使用函数指针来调用实际的函数。 最后要记得使用FreeLibrary函数释放内存。 注意:应用程序如何找到DLL文件? 使用LoadLibrary显式链接,那么在函数的参数中可以指定DLL文件的完整路径;如果不指定路径,或者进行隐式链接,Windows将遵循下面的搜索顺序来定位DLL: (1)包含EXE文件的目录 (2)工程目录 (3)Windows系统目录 (4)Windows目录 (5)列在Path环境变量中的一系列目录  
  • 热度 5
    2013-8-10 00:01
    3036 次阅读|
    1 个评论
    1. LabVIEW 支持的数据类型 xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /     另外,可参考 …\Program Files\National Instruments\LabVIEW 2009\examples\dll\data passing\Call Native Code.llb\Call DLL.vi 。 ‘ 此 VI 列举了 LabVIEW 与 C 语言中兼容的数据类型。见下表。 2.  在 VI 里调用 DLL 时,在 DLL 的左侧给输出端口添加初始化的值。 给输出端口添加初始化值的目的是分配内存给输出端口。该初始化数组元素的个数至少为实际输出数组的个数。若过小,则 DLL 不正常运行;若相等,则 DLL 正常运行;若过大,则 DLL 的数组输出端口除有效数据外,还有其他一些为 0 的非有效数据。 xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" /    3. 使用 DLL 的步骤 1 )制作子 VI ,添加控件接口到连接端( connector )。 2 )在新建的 VI 中添加 DLL ,在 DLL 中指定其路径,会自动添加该 DLL 包含的输入输出端口。对于数值型输出,选择 Point to value 。     选中“ Specify path or diagram ”,表示动态调用该 DLL ,此时路径取决于 最上端的路径输入端, Library name or path 里输入的路径无效。 在 parameters 页,系统会自动添加 DLL 的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。 需检查 DBL 输入: Value ; DBL 输出 Pointer to Value 。   3 )务必给 DLL 的每个输出端添加初始值,否则 DBL 数组没有输出。 len 、   len2 分别为输入数组、输出数组的个数,需将这两个参数设置为与实际的数组大小一致。 4 ) C 调用,具体为什么选择 C 调用,可参考: Calling convention  用于指明被调用函数的调用约定。这里只支持两种约定: stdcall  和  C call 。它们之间的区别在于, stdcall  由被调用者负责清理堆栈; C call  由调用者清理堆栈(在LabVIEW中调用该DLL,则选择C调用)。这个设置错误时,可能会引起  LabVIEW  崩溃,所以一定要小心。反过来说,如果  LabVIEW  调用  DLL  函数时出现异常,首先就可以考虑这个设置是否正确。 ( Windows API  一般使用的都是  stdcall ;标准 C 的库函数大多使用  C call 。如果函数声明中有类似  __stdcall  这样的关键字,它就是  stdcall  的。)具体链接为: http://www.testdevelop.com/forum/viewthread.php?tid=255extra=page=9 另外,也可以这样理解。 对库函数的调用规则,选择stdcall。比如调用凌华的数据采集卡驱动提供的DLL,则选择stdcall调用规范。 调用自己用C语言写的程序而后编译成DLL文件时,调用规范选择“C”。 5 )选择哪种线程? 选择 Run in UI thread ,具体为什么选择该界面线程( Run in UI thread ),可参考如下链接: http://ruanqizhen.wordpress.com/2007/01/26/labview-%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84%e7%ba%bf%e7%a8%8b-4-%e5%8a%a8%e6%80%81%e8%bf%9e%e6%8e%a5%e5%ba%93%e5%87%bd%e6%95%b0%e7%9a%84%e7%ba%bf%e7%a8%8b/ 6 )如果动态调用,则必须设置调用 DLL 的那个 VI 。设置该 VI 的执行系统不能够为“ User Interface ”。 如果是静态调用,则可不用设置该项。 关于调用 DLL 导致 LabVIEW 崩溃的解决办法,可参考如下链接: http://digital.ni.com/public.nsf/allkb/C48880127BDB18B5482571BC00289A23   4.  生成 DLL 的两种方式 1). LabVIEW 环境 不过多赘述。在 DLL 和 LabVIEW 之间传递参数,最常用的三种数据类型是:数值类型、字符串、数值型数组。 2 )VC 等环境 以 VC 环境为例,参考一个例子解释: http://cspiao1986.blog.163.com/blog/static/70113974200911225944903 此例子讲述了如何在 VC 中建立 DLL ,以及如何在 VC 中使用 DLL 。 5.动态链接库 1)静态库和动态库 静态库:函数和数据被编译成一个二进制文件(一般为LIB格式),在使用静态库编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他的模块组合起来创建最终的可执行文件(EXE文件)。 动态库:在使用动态库时,往往提供两个文件:引入库(.lib)和一个DLL(.dll)文件。该引入库不同于静态库,因为引入库文件包含了该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。在使用动态库编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL。 2)使用动态链接库的好处 动态链接库通常不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含了能被可执行程序或其他DLL调用来完成某项工作的函数。只有在被调用时,才被载入内存。如果多个应用程序同时调用该DLL,则在内存中只需载入一次,从而避免多个应用程序调用相同DLL时内存资源的浪费。   转载地址: http://blog.163.com/lxfan_0406@126/blog/static/6096992620118159222229/
  • 热度 24
    2013-7-28 17:40
    1281 次阅读|
    0 个评论
    http://pcedu.pconline.com.cn/empolder/gj/vc/0509/698632.html
  • 热度 22
    2013-4-22 13:55
    11601 次阅读|
    0 个评论
    前天用Keil MDK 4.7A  + jlink   调试LPC2131开发板,忽然出现下面这个错误:在网上有找到解决方法,但是指标不治本,没找到原因。经过两天多的折腾(经过软件卸载、重装、系统重装);最后终于解决这个问题,下面附上解决方法。我出现这个问题的根本原因是一个寄存器地址写错了(引用的别人的模板 ),应该是寻址带来的问题吧。 问题截图如下:    Error:Flash Download failed - Target DLL has benn cancelled  + 解决方法分两步: 1、用 ISP 软件擦除整个芯片; 2、仔细查找出哪个寄存器地址错误。 然后可以正常下载使用了。   说明:MDK的官方网站上有这个问题解决的第一步,但是没有写明原因;我完成第一步之后并没有检查源代码,以致于花费了两天的时间查硬件和编译器的错误,最后没办法重装系统,浪费的大把时间。   写在这,供需要的人查询!  
相关资源
  • 所需E币: 5
    时间: 2021-9-10 11:12
    大小: 139.79KB
    上传者: czd886
    基于DLL的嵌入式系统中的软件组件化
  • 所需E币: 0
    时间: 2021-4-29 15:13
    大小: 596.45KB
    上传者: 落叶chen
    DependsWallker是一个VC反编译工具,可以查看PE模块的导入模块以及导入和导出的函数以及动态剖析PE模块的依赖性和解析C++的函数名称。
  • 所需E币: 0
    时间: 2021-4-24 19:36
    大小: 739KB
    上传者: Argent
    随着FPGA技术的不断发展,许多消费类产品都嵌入了FPGA程序,ZYNQ架构属于主流,搜集的部分有关FPGA学习资料,希望对您有所帮助,欢迎下载。
  • 所需E币: 0
    时间: 2020-9-18 20:37
    大小: 2.59KB
    上传者: LGWU1995
    如何调试LabVIEW调用的DLL
  • 所需E币: 0
    时间: 2020-9-18 20:51
    大小: 2.58KB
    上传者: LGWU1995
    如何调试LabVIEW调用的DLL
  • 所需E币: 0
    时间: 2020-9-18 20:51
    大小: 2.49KB
    上传者: LGWU1995
    为什么在CLN节点中,会自动配置某些DLL函数的参数信息
  • 所需E币: 0
    时间: 2020-9-10 03:40
    大小: 9KB
    上传者: Goodluck2020
    76.为什么在CLN节点中,会自动配置某些DLL函数的参数信息.doc
  • 所需E币: 1
    时间: 2020-9-4 18:48
    大小: 31.24KB
    上传者: zendy_731593397
    LicenseAgreement关于DLL的文件
  • 所需E币: 0
    时间: 2020-5-25 14:59
    大小: 236.91KB
    上传者: Argent
    VB是早期比较流程的编程语言,VisualBasic由微软公司开发,是世界上使用人数最多的语言。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。感兴趣的网友们快来下载,练练手吧。
  • 所需E币: 5
    时间: 2019-12-26 01:39
    大小: 301.86KB
    上传者: 238112554_qq
    如何为keilc51编写自己的硬件调试dll……
  • 所需E币: 5
    时间: 2019-12-25 23:27
    大小: 137.87KB
    上传者: 978461154_qq
    一.模块功能做到在互连网的语音通信功能,使用g.729压缩,在北京--------重庆间测试过,一端是长城宽带。一端是56kmodem拨号上网。语音比较清晰,但有一点停吨现象。二.结构dll中用了一个tcp连接,表示双方连通没有,用udp发送语音数据,发送端表明了发送顺序,接收端重排了顺序。……
  • 所需E币: 4
    时间: 2019-12-25 21:59
    大小: 104.06KB
    上传者: wsu_w_hotmail.com
    一.模块功能做到在互连网的语音通信功能,使用g.729压缩,在北京--------重庆间测试过,一端是长城宽带。一端是56kmodem拨号上网。语音比较清晰,但有一点停吨现象。二.结构dll中用了一个tcp连接,表示双方连通没有,用udp发送语音数据,发送端表明了发送顺序,接收端重排了顺序。三.注意模块也参考了其他人的程序部分代码,可以参考115软件工厂NETTALK11DEMOSRC。延迟,控制延迟,主要是网络的延迟加上重排序的时间。你可自己改进。在例子中没有重载Cinterface,请你使用的时候重载它。模块退出的时候有点小问题,可能的原因在CwaveIn已经说明。请注意。四.使用你可以自由免费的使用本软件。如果你使用在商业用途,由于免费,我不保证其稳定性,对出现的问题不负任何责任。并请保留本文档在其中并在你的软件中注明引用出处。如你改进,或则有想法,请来信探讨。……
  • 所需E币: 4
    时间: 2019-12-25 17:04
    大小: 616.38KB
    上传者: quw431979_163.com
       MercurydeviceshaveClockLock,ClockBoost,andadvancedClockShiftfeatures,whichusegeneral-purposephase-lockedloops(PLLs)toincreaseperformanceandprovideclock-frequencysynthesis. ……
  • 所需E币: 4
    时间: 2019-12-25 12:41
    大小: 7.55KB
    上传者: givh79_163.com
    NET架构的核心开发技术……
  • 所需E币: 4
    时间: 2020-1-1 22:44
    大小: 806.11KB
    上传者: givh79_163.com
    通过共享库文件共享代码是业界最常用的方式。本集介绍了在LabVIEW中调用dll的各种技巧。……
  • 所需E币: 4
    时间: 2020-1-3 19:01
    大小: 57.25KB
    上传者: 二不过三
    128×64点阵LCD仿真DLL……
  • 所需E币: 5
    时间: 2020-1-4 23:29
    大小: 577.1KB
    上传者: wsu_w_hotmail.com
    xilinx-SpartanIIE内部锁相环(DLL)的使用(1)……
  • 所需E币: 3
    时间: 2020-1-4 23:29
    大小: 577.1KB
    上传者: 二不过三
    xilinx-SpartanIIE内部锁相环(DLL)的使用……
  • 所需E币: 4
    时间: 2019-12-24 19:38
    大小: 546.86KB
    上传者: rdg1993
    【应用手册】AN550:UsingtheDLLPhaseOffsetFeatureinStratixFPGAsandHardCopyASICsThisapplicationnotedescribeshowtoimplementthedelay-lockedloop(DLL)phaseoffsetfeaturewithAltera®Stratix®FPGAsandHardCopy®ASICs.AN550:UsingtheDLLPhaseOffsetFeatureinStratixFPGAsandHardCopyASICsMarch2010AN-550-2.0Thisapplicationnotedescribeshowtoimplementthedelay-lockedloop(DLL)phaseoffsetfeaturewithAlteraStratixFPGAsandHardCopyASICs.IntroductionADLLprovidesaprocess,voltage,andtemperature(PVT)-compensateddelaythatyoucanusetophaseshiftthereadclockfromanexternal……
  • 所需E币: 5
    时间: 2019-12-24 18:52
    大小: 2.69MB
    上传者: 2iot
    【用户指南】ALTDLL和ALTDQ_DQS宏功能模块用户指南(ALTDLLandALTDQ_DQSMegafunctionsUserGuide)ALTDLL和ALTDQ_DQS宏功能模块用户指南ALTDLLandALTDQ_DQSMegafunctionsUserGuide101InnovationDriveSoftwareVersion:9.1SanJose,CA95134DocumentVersion:5.0www.altera.comDocumentDate:February2012Copyright2010AlteraCorporation.Allrightsreserved.Altera,TheProgrammableSolutionsCompany,thestylizedAlteralogo,specificdevicedesignations,andallotherwordsandlogosthatareidentifiedastrademarksand/orservicemarksare,unlessnotedotherwise,thetrademarksandservicemarksofAlteraCorporationintheU.S.andothercountries.Allotherproductorservicenamesarethepropertyoftheirrespectiveholders.AlteraproductsareprotectedundernumerousU.S.andforeign……