我安装了CVI2009和VDM2010,但是我在CVI中无法看到VDM的三角函数图像。要如何引用呢?

(转帖)LabWindows/CVI中多&*.uir和多&*.c&的实现以及子父面板的实现、子面板的最大化
这几年做过的项目,基本上一个工程都是只包含一个*.uir、一个*.h头文件和一个*.c源文件。代码的规模也一直在三万行以内,用户窗口也不是很多,所以也懒的去做成多个源文件和多个用户界面文件;另外一个原因,说实话,对预处理一直是比较忌讳的,刚开始的时候也看求不懂,理解起来也更是费脑子,能回避尽量回避,所以也走了不少湾路。网上搜索,也是问的多,回答的少。
前几天在《C和指针》P5中,偶然看到一段提示:“假如这个程序的源代码由几个源文件组成,那么使用该函数的源文件都必须写明该函数的原型。把原型放在头文件中并使用#include指令包含它们,可以避免由于同一个声明的多份拷贝而导致的维护性问题。”反复看了好多遍,还是无从下手去做,现在手头上这个项目代码规模越来越大,随着功能的增加用户界面也越来越多,代码修改起来也实在是别扭,回调函数和自定义的函数排的乱七八糟的,自己看着都过意不去。没办法,硬着头皮上吧,折腾了这好几天了,终于拆分成功,在这里总结下,也算不上什么经验,写下来以后忘了看看。贴出来和大家分享,希望对需要的朋友有所帮助。
首先来说说多*.uir,其实很简单,就是把在功能上相近的,或同一类的面板放在一个uir文件中,修改好保存后,CVI会自动生成一个与uir文件同名的.h头文件,只需要把这些.uir文件和自动生成的头文件添加到工程中即可。整个工程拆分后的效果如下:
至于程序运行时,什么时候将这些uir文件中的面板导入到内存中,可以根据需要,在用户选择某一功能时,将该功能对应的面板导入,操作结束后再将该面板从内存中删除;也可以在程序初始化时,在main函数中一次性的将所有面板都导入,这样在需要的时候只需要用DisplayPanel显示对应面板,使用结束后用HidePanel隐藏面板即可,就不用每次导入然后再删除,麻烦!在导入时,只需要指定面板所在的uir文件名即可。像下面代码所示,可以将某一面板导入到另外一个面板中作为其子面板,只需在导入时指定其Parent
Panel Handle为父面板的句柄即可,但有一点要注意,这样生成的子面板只有“关闭”按钮,没有“最大化”和“最小化”。
& if((mainPanel = LoadPanel(0, "AudioTest.uir",
MAIN_PANEL)) & 0)
& & return -1;
& if((BasePanel = LoadPanel(0, "AudioTest.uir",
PANEL_BASE)) & 0)
& & return -1;
& if((SizePanel = LoadPanel(0, "AudioTest.uir",
SIZE_PANEL)) & 0)
& & return -1;
& if((OscillographPanel = LoadPanel(0,
"AudioTest.uir", PANEL_OSCI)) & 0)
& & return -1;
& if((OutputAPanel = LoadPanel(0, "AudioIO.uir",
PANEL_OA)) & 0)
& & return -1;
要想有子、父面板,还想子面板有“最大化”和“最小化”按钮,没问题,实现起来也很简单。这里贴出来和大家一起分享:像上面代码所示,正常导入面板,不指定任何父面板,然后导入完成后增加下面代码:
GetPanelAttribute (mainPanel, ATTR_SYSTEM_WINDOW_HANDLE,
GetPanelAttribute (BasePanel, ATTR_SYSTEM_WINDOW_HANDLE,
SetParent((HWND)Child, (HWND)Parent);
OK!运行程序,儿子、老子都有了,而且“最小化”、“最大化”和“关闭”按钮一个都不少!但这样让人很不爽的是,如果老子的额头上有菜单栏和工具栏,儿子“最大化”了就全给挡住了,而且儿子的标题栏还不消失,父面板右上角“关闭”按钮下方本应出现的缩小了的“最小化”、“还原”和“关闭”按钮也没有。没办法,CVI不给力啊!大家谁要能给它弄出来也希望能和大家分享下。我在这里也可以给大家介绍个苯办法:弄三个Picture
Command Button
放到父面板的右上角,开始时隐藏,等子面板最大化后显示,对应在每个Button回调中添加调整面板大小的代码,基本上还是可以实现想要的效果的。需要用到的Panel
Event有:EVENT_PANEL_SIZE 和
EVENT_PANEL_SIZING。用GetPanelAttribute(AnaPanel, ATTR_WINDOW_ZOOM,
&PanelStatus); 获取面板的ZOOM状态是 VAL_MINIMIZE 、VAL_MAXIMIZE
还是VAL_NO_ZOOM。就可判断是最大化还是最小化了。
下面来说说多.c源文件的实现问题。首先了解下内存的分配方式:
& 从静态存储区域分配,在程序的整个运行期间都存在,像全局变量、static变量等。
& 在栈上分配,像函数内部定义的变量,其在函数执行结束时释放。
在堆上分配,也就是动态内存分配,也是最灵活的内存分配方式,生存期由我们自己决定,但也是最容易出错的地方,内存泄露要多郁闷有多郁闷。
另外,属于文件作用域的声明在缺省情况下具有external链接属性,如果要在别的源文件中使用,则需要在那个源文件中用extern声明;如果在全局变量定义或函数声明时前加static关键字,就会将该标识符的链接属性从external改为internal,其作用域也就只限于所在的源文件了。这些网上书上到处都有说明,扯再多都一样,下面说说正题。
简单点说,就是先新建一个头文件并命名,然后将所有用到的头文件、全局变量、结构体、数据指针、公共函数的原型声明等,反正只要是只要在两个以上的源文件中有用到的,统统都扔到这个头文件中,然后在每个源文件中只写一条
#include&&“头文件名.h”
就可以了,然后再新建一个.c源文件,名字和这个公共头文件的名字一样,然后把头文件中所有声明的函数的实现部分(函数体)放到这个.c源文件中,注意这个源文件中也要#include&&“头文件名.h”
哦,然后对这个源文件单独编译,保证没有错误。最后将这个头文件和源文件添加到工程中。OK!现在就可以建立多个.C源文件了,以后只要需要增加全局变量或公用函数,只需要修改这一对.h头文件和.c源文件就可以了。
需要注意的是:
在这个公共的头文件中声明变量、数据指针时,不要初始化,否则在编译的时候会提示你“重复定义”的错误,当然,在声明结构体时是没法初始化的。最好是在主函数中用一个函数集中初始化这个公用头文件中定义的变量、指针和结构体。
& 不要在这个公用的头文件和其对应的源文件中出现“static”关键字。
& 为了不重复include,有两种做法,一种是在公用头文件中,用如下格式来建立头文件:
#ifndef _AUDIO_H&
&//与公用头文件名一样,只不过小写字母都变成了大写,并以“_”开头,“.“改为“_”
#define _AUDIO_H
#include&&
。。。。。
#include&&"AudioTest.h"
。。。。。。
。。。。。。。。
。。。。。。
当然,也可以在每个源文件中按下面的格式来写:
#ifndef _AUDIO_H& &
#define _AUDIO_H
#include&&"Audio.h"
注意只选一中方法就可以,要不会出错的,有兴趣的可以试试哈。
其实最后一点是多余的,我相信写代码比我规范的人多的是。注释一定要够狠才行,尤其是在这个公用的头文件中,如果是多人合作的话,就更应该注意了。不管谁都可以在里面添加变量,但一定要说清楚添加的理由、添加的目的、将会在那里被调用、可能出现的值范围等,反正是越详细越好,另外随着程序的修改,也要及时的修改这些注释。对于函数声明,除了上述的注释内容以外,还要加上函数的作用、参数描述、调用位置、创建日期、作者、最后修改日期等。对于函数参数,如果不希望传入的值在函数体内被修改,最好是在前面家“const”关键字,
以上就是这两三天的奋斗成果,如果有那些说的不对的,还请大家多多指出来。有兴趣的朋友可以加我QQ直接和我联系,吃饭睡觉时间外,基本都在的,嘿嘿!转载的话请指明原文链接地址:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。VDM51.dll文件下载(针对6.9以上版本安装时没有此文件无法和KEIL 联调情况) - 下载频道
- CSDN.NET
&&&&VDM51.dll文件下载(针对6.9以上版本安装时没有此文件无法和KEIL 联调情况)
VDM51.dll文件下载(针对6.9以上版本安装时没有此文件无法和KEIL 联调情况)
字针对6.9以上版本安装时没有此文件无法和KEIL 联调情况,同时还有详细的安装方法。
PROTEUS与keil整合构建的单片机虚拟实验室
利用PROTEUS与keil整合构建单片机虚拟实验室,解决了传统单片机教学中以理论为主实践少,且实践以验证实践为主;学校设备落后的问题。使得每个学单片机的人,都可以拥有自己的“实验室”。
下面我具体介绍一下,如何来构建自己的单片机实验室:
1.首先,安装PROTEUS和keil软件。
2.把PROTEUS\MODEL目录下VDM51.DLL文件复制到keil安装目录的\c51\bin目录中
3.修改keil安装目录下的TOOLS.INI文件,在c51字段中加入TDRV5=BIN\VDM51.DLL(“PROTEUS VSM MONITOR-51 DRIVER”),并保存。
注:不一定要用TDRV5,根据原来字段选用一个不重复的数值就可以了,引号中的名字可随意写。
4.运行PROTEUS,画出要设计的电路图,在debug菜单中选择Use Remote Debug Monitor选项。
5.在keil中编写相应的程序代码。
6.在keil中Project菜单中选择Options for target'target 1'选项.
7.在弹出的对话框中单击debug选项卡,选择用硬件仿真,在右上方的下三角按钮选择PROTEUS VSM MONITOR-51 DRIVER。
8.单击SETRING按钮在HOST中写127.0.0.1;在PORT中写8000;单击OK按钮。
9.在keil中调试程序,在PROTEUS中观察结果。
完成以上几步,那么恭喜你有了自己的单片机实验室了。
若举报审核通过,可奖励20下载分
被举报人:
pengliangfeng
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行}

我要回帖

更多关于 cvi 刷新界面函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信