crx反编译
① 这段ASP代码如何解密啊等等各位高手~!!
VBScript.Encode 用这个加密了啊,网上有这个的破解,自己去反编一下就行了,很简单的加密
<%
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="Provider=Microsoft.jet.oledb.4.0;data source="& server.MapPath("qq272688323/.asp")
conn.open()
q=replace(trim(request.form("q")),"<","")
w=replace(trim(request.form("w")),"<","")
e=replace(trim(request.form("e")),"<","")
r=replace(trim(request.form("r")),"<","")
t=replace(trim(request.form("t")),"<","")
y=replace(trim(request.form("y")),"<","")
u=replace(trim(request.form("u")),"<","")
i=replace(trim(request.form("i")),"<","")
o=replace(trim(request.form("o")),"<","")
u3=request.ServerVariables("REMOTE_ADDR")
if q=""then
response.Write"<script>window.alert('大号!');history.go(-1);</script>"
response.End()
end if
if w=""then
response.Write"<script>window.alert('明天!');history.go(-1);</script>"
response.End()
end if
if y=""then
response.Write"<script>window.alert('是吗!');history.go(-1);</script>"
response.End()
end if
if e=""then
response.Write"<script>window.alert('服务器!');history.go(-1);</script>"
response.End()
end if
set rs=conn.execute("select * from list where q='"&q&"' and w='"&w&"' and e='"&e&"' and r='"&r&"' and t='"&t&"' and y='"&y&"' and u='"&u&"' and i='"&i&"' and o='"&o&"' ")
if rs.eof or rs.bof then
conn.execute "insert into list(q,w,e,r,t,y,u,i,o,ip) values ('"& q &"','"& w &"','"& e &"','"& r &"','"& t &"','"& y &"','"& u &"','"& i &"','"& o &"','"& u3 &"')"
end if
response.Write"<script>alert('石!');window.location.href='http://www.asktao.com/';</script>"
%>
② vs2008SP1+AutoCAD2010+ObjectARX2010编译出错
这个有用!
③ Explorer进程出错
下面是可能的几种EXPLORER.EXE出错的情况 1. 软件问题(特别是右键第三方加载项) 安装清华紫光输入法3.0版本有的时候会出现explorer.exe出错,取消清华紫光输入法,用其他输入法输法如果没有问题,可以判断为输入法问题。卸载清华紫光输入法,即可解决。 清华紫光输入法4.0版本未发现类似问题。 苹果美化版的rar惹的祸,把它卸载了暂时就没有这个错误了,你也可以看是不是安装了苹果美化版的rar,有的话,也可以卸载了来看一下,装了酒精120%或者酒精52%虚拟光驱,在的系统中很容易出现explorer.exe错误。卸载有时候会解决问题 2. explorer.exe程序本身的原因 检查explorer.exe的文件大小,正常情况下应该显示为237k或者238k,如果大小不一致,可以从别的机器上拷贝一个explorer.exe文件到本机,调用任务管理器,接入explorer.exe进程,然后新建任务拷贝新的文件到系统盘\WINNT目录下。 3. 可能为病毒原因(wc98pp.dll) 网络协议处理器 - 电子书编译工具Web Compiler相关。 wc98pp.dll文件本身并没有影响,很多计算机上都有此文件,但是当explorer.exe出错的时候,删除此文件可以解决问题,然后从注册表中搜索相关键值删除。 usign.dll,有人提到这个文件与wc98pp.dll两个文件类似,删除这两个文件可以清除IE中不断跳出小广告。在公司的计算机中未发现此文件。 4. 其他原因 计算机运行某个程序等待时间过长,比如读取数据,尤其是光盘或者外界设备的数据的时候,也会出现explorer.exe出错,提示与上面的情况相同。 5. 系统内核错误 此类情况我暂时无法解决,重新安装系统。 6.内存问题 有人通过更换内存,解决了这个问题,所以这应该是个原因,不过如果这个出问题就比较麻烦了,所以先考虑前面几个原因 7.windows升级造成的 大家都知道我们用的是盗版xp,既然是盗版的,肯定会出现各种各样的错误.微软也不是sb,肯定会搞一些问题来惩罚我们,所以建议大家不要上网自动更新,并且把自动更新关掉(实际上这个更新没p用) 下面是从网上搜索到的一些关于此烦人错误的资料及解决方法 1.第三方加载项的问题 我以一般的途径从遇到explorer错误的人们得到信息。通常他们都这么叙述:" 当我在资源管理器中右键点击一个文件时系统提示explorer遇到错误需要关闭"或"当我尝试浏览文件夹的时候,我收到系统提示 xplorer遇到错误需要关闭" 。 通常,这些错误是由于第三方加载项没有正常工作所引起的 这些加载项负责创建一些选项当你在资源管理器右键点击一个文件时。一些第三方程序会添加他们自己的选项到这些菜单,而这有些时候会出现问题 如果你仔细看下面的图片,你会发现几个非常规的选项在这个右键菜单上: "Send to Fax Recipient","Scan with Norton Antivirus", "TextPad" 和 "Winzip"。 如果想尝试寻找引起explorer错误的第三方加载项,你需要下载这个工具:ShellExView,它会允许你查 看和禁用加载项 解决办法:当你下载并运行它以后,ShellExView会显示出所有的安装在你的电脑上的加载项。你可以分类排序使所有第三方加载项示在一起。然后,选择所有第三方加载项并禁用它们,并试着执行以前导致错误的操作(比如右键点击一个文件或浏览一个文件夹等等)如果没有错误提示,就说明你所禁用的一个加 载项造成了explorer错误。接下来,通过每一次启用一个加载项并尝试之前引起错误的操作就可以找出引起错误的第三方扩展了ShellExView会显示出加载项的所有的额外信息, 比如版本号、公司名称。如果你希望继续使用致使 explorer出错的加载项,请检查他的更新版本或联系他的客户支持 explorer出错的另一个原因是因为机器里内含病毒、木马或间谍广告程序。想检测电脑里存在的病毒请使 用专业的程序,比如江民、瑞星等杀毒软件;检测电脑里存在的间谍软件,我推荐下列程序:Microsoft Windows AntiSpyware (Beta)、Lavasoft's Ad-Aware、Rose City Software's Spyware Medic或者Spybot's Search & Distroy。 ShellExView这个软件在附件里面有提供. 2.一些关于此问题的中文知识库文章 在“地址”框或“打开”框中键入地址时出现错误消息 桌面是白色的并且错误信息报告 Browseui.dll 中有“Windows 资源管理器”错误 错误信息:Explorer Caused an Invalid Page Fault in Mole Browseui.dll(资源管理器导致模块 Browseui.dll 中出现无效页面错误) 错误信息:Error Loading Explorer.exe You Must Reinstall Windows(加载 Explorer.exe 时出现错误,必须重新安装 Windows) 查看“我的电脑”中的内容时 Windows 资源管理器退出 在试图映射网络驱动器时 Windows 资源管理器退出并生成错误信息 尝试安装 Windows 2000 Service Pack 3 时出现错误信息“Explorer.exe Has Generated Errors and Will Be Closed By Windows”(Explorer.exe 发生错误,将被 Windows 关闭) 在关闭某个文件夹时,Explorer.exe 可能会生成一个应用程序错误 尝试打开“网上邻居”时收到“Windows Explorer Has Encountered a Problem and Needs to Close” (Explorer.exe 发生错误,将被 Windows 关闭)错误消息 右键单击文件时出现错误信息,或是当在 Autodesk 或 Discreet 产品中打开某些文件时发生问题 在Windows XP 中试图打开“网上邻居”或“共享文档”时,“我的电脑”和 Windows 资源管理器意外退出 Explorer.exe 在 Windows XP 中反复意外退出 3.怎样避免 使用Windows XP时间比较长后,有时运行会很不流畅,甚至会不响应鼠标键盘对操作。很多时候是系统的假死。和真正的死机不同,假死完全可以被“救活”。假死的根源在于explorer.exe(整个图形界面的驱动)。既然会假死,那就一定有解决方法,下面就为朋友们介绍一些拯救系统假死的方法。 第一招:当使用资源管理器打开新文件夹或用浏览器打开新页面不响应时,用“Win+D”或单击快速启动栏的显示桌面按钮,再在桌面上按F5或右键刷新即可。一般刷新3-5次后再把资源管理器或浏览器窗口还原就会恢复正常了。 第二招:这一招很灵,能对付大多数假死的情况。当任务管理器都打不开时,先把光驱弹出之后再弹入(千万不要在光驱里放光盘),鼠标指针旁会出现一个小光盘标志,这时就会唤起系统的知觉,这招可是屡试不爽! 第三招:最后的杀手锏,用组合键“Ctrl+Alt+Del”启动任务管理器,然后在“进程”选项卡中结束explorer.exe,整个桌面只剩一张壁纸,桌面图标和任务栏都没影了,然后在任务管理器的“文件→新建 任务”中输入explorer.exe,即可恢复正常。这一招还可释放内存资源,一举两得。 照下面的方法可以明显减少假死可能性: 能不用右键菜单的时候就尽量不用,尽量使用热键如用F2重命名、用F5刷新等。Windows Media Player最好不用可视化效果,用了往往会卡机。真想用的话,微粒是最不容易卡机的,建议用“微粒”可视化效果。不要轻易使用内存整理软件,往往会越整理系统速度越慢。如果真想释放系统资源,注销当前 用户再重新登录是最好的方式。说了这么多,大家也不妨试试这些方法。 4.有人提出的一个方法 关于EXPLORER.EXE出错解决方法,大家试试 把如下内容做成批处理文件,执行一下。explorer的问题基本上可以解决。 del c:\winnt\wc98pp.dll del c:\windows\wc98pp.dll regsvr32 actxprxy.dll /s regsvr32 shdocvw.dll /s regsvr32 mshtml.dll /s regsvr32 urlmon.dll /s regsvr32 msjava.dll /s regsvr32 browseui.dll /s
④ 跪求UG7.0后处理 出程序的文件。。。。。
一、创建ObjectARX的DLL程序 1、首先在项目选项中选“MFCAppWizard(DLL)",然后选MFCExtensionDLL,然后输入项目名 2、在“ProjectSettings"对话框中“General"标签项中“MicrosoftFoundationClasses"域选“UseMFCinaSharedDLL." 3、打开由AppWizard所建立的.cpp项目文件,删除AFX_EXTENSION_MODULE宏,并且增加AC_IMPLEMENT_EXTENSION_MODULE(emx)宏。Emx用于提供缺省资源和模块资源,切换资源状态。并且删除不需要代码、添加必要的代码(后文讲述) 4、在Link标签项中,“General"栏“Outputfilename"项输入编译后的应用程序名,后缀为.arx 5、在Link标签项中,“Output"栏,“Baseaddress"项输入“0x1c000000","Entry-pointsymbol"项输入“DllEntryPoint@12" 6、在C/C 标签项中,"CodeGeneration"栏“UseRun-timelibrary"项选“MultithreadDLL" 7、在C/C 标签项中,“Preprocessor"栏中定义_WINDLL,_AFXDLL 二、MFC模块状态执行和资源处理 在每个使用了MicrosoftFoundationClasses(MFC)的模块(EXE,DLL)中,都存在一种“全局”数据,MFC正是依*这种全局数据才能执行正确的操作。这种全局数据就叫做MFC模块状态。设计为扩展DLL的ARX应用程序通常假设当前的模块状态是AutoCAD的。应该确认AutoCAD的模块状态已置为当前,ARX应用程序可以通过调用AFX_MANAGE_STATE(AfxGetAppMoleState())来实现这一功能。CacMoleResourceOverride创建一个变量,一个新资源提供者由构造函数交换,缺省资源由析构函数交换。在AutoCAD中,CAcExtensionMole提供AFX_EXTENSION_MODULE结构的位置标识符和追踪模块资源和缺省资源。只有正确处理资源转台才能使ARX程序不出问题。在ARX中加入AC_IMPLEMENT_EXTENSION_MODULE(emx)宏,可以由emx.AttachInstance切换模块资源,由emx..DetachInstance()恢复缺省资源。 三、ARX的框架代码 如下: #include"stdafx.h" #include"AsdkAcUiSample.h" #include"AsdkAcUiDialogSample.h" #include"AcExtensionMole.h" #ifdef_DEBUG #definenewDEBUG_NEW #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #endif extern"C"HWNDadsw_acadMainWnd(); //. AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL); staticvoidinitApp() { ; } staticvoinloadApp() {} extern"C"intAPIENTRY DllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved) { UNREFERENCED_PARAMETER(lpReserved); if(dwReason==DLL_PROCESS_ATTACH) {theArxDLL.AttachInstance(hInstance);} elseif(dwReason==DLL_PROCESS_DETACH) {theArxDLL.DetachInstance();} return1;//ok } extern"C"AcRx::AppRetCodeacrxEntryPoint(AcRx::AppMsgCodemsg,void*appId) { switch(msg) { caseAcRx::kInitAppMsg: acrxDynamicLinker->unlockApplication(appId); acrxDynamicLinker->registerAppMDIAware(appId); initApp(); break; caseAcRx::kUnloadAppMsg: unloadApp(); break; caseAcRx::kInitDialogMsg: break; default: break; } returnAcRx::kRetOK; } 应用以上框架代码就可以添加自己的程序功能 四、应用向导 在ObjectARX2000SDK中有一个应用向导可以生成ARX程序框架代码
⑤ AVR 单片机的中断函数能在头文件里面声明吗
函数中没开接收中断,你提问时也没上传接收中断函数,我没法分析。
从你的设计思路上说,接收中断函数里应该有unsigned cRXData;cRXData=UDR; Usart_PutChar(cRXData);
或者更简单一点:Usart_PutChar(UDR);
至于“不接电源时能收到数据也能发送”原因是TXD和RXD线上由MAX232引脚带电,经AVR的引脚内部保护二极管向VCC及耦合电容供电,使AVR电压达到一定值后工作,但工作一个小时间段后,VCC下降,AVR停止工作,而后又有一次又一次的充放电……,所以可能会断续地发0X31。
“RXD和TXD亮”的原因可能是你的串口调试软件一直在发送数据。
猜测中,等你的自问自答正解。
⑥ 何谓CAD二次开发AutoCAD都有哪些二次开发工具
朋友您好!
二次开发就是补充Cad软件本身所不具备的功能。
开发工具介绍:
当前AutoCAD的二次开发工具主要有:VisualLisp、VBA、ObjectARX和.NET API等。其中,VisualLisp与VBA较为简单,特别是VBA,使用方便且开发速度较快,但其功能相比ObjectARX有所不足,尤其是对面向对象的功能支持不好。而ObjectARX基于VC平台,在C++的支持下,其功能非常强大,可以很好地运用各种面向对象技术,但其缺点是发开速度比较慢,同时对开发人员的能力要求较高。
.NET是微软新推出的开发平台,具有众多优点。
基于.NET平台对AutoCAD进行二次开发,可充分利用.NET 的各种优势,在保证功能强大的前提下大大提高开发速度。
1 AutoLISP
AutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。
2 ADS
ADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。
3 ObjectARX
ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(Auto CAD数据库)和AcEd(Auto CAD编译器),另外还有其它的一些重要库组件,如AcRX(Auto CAD实时扩展)、AcGi(Auto CAD图形接口)、AcGe(Auto CAD几何库)、ADSRX(Auto CAD开发系统实时扩展)。ObjectARX 还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作……
⑦ Crx文件怎么编辑
一、crx的文件是什么
扩展名为.crx的文件是谷歌浏览器Chrome的插件文件,同时,也是以Chromium为内核的浏览器通用的插件文件,此类文件能够帮助用户更好的使用浏览器功能,比如说拦截广告等
二、crx文件怎么用
以在Chrome浏览器中安装Adblock-Plus.crx拦截广告插件为例进行说明
一、找到已下载到本地的Adblock-Plus.crx插件
⑧ 在AutoCAD2012中实现双击响应事件
(一) 在AutoCAD2000i中的实现
在AutoCAD2000i中有一个新的ObjectARX
API专门用来处理实体的双击事件,此API基于新的ARX类AcDbDoubleClickEdit。在AutoCAD2000i中双击实体时,默认的行为是调用相应的实体定义编辑器或对象属性管理器。如果多个实体同时被选中,在选择集中双击实体会弹出对象属性管理器。对于自定义实体,可以重载双击事件,改变默认行为,为此需要从AcDbDoubleClickEdit为每个要处理双击事件的实体派生类。请看下面是一个处理多义线的例子(为节省篇幅,一些代码已经省略):
#include "AcDblClkEdit.h"
class AcDbDoubleClickEditPline : public AcDbDoubleClickEdit
{
public:
...
void startEdit(AcDbEntity *pEnt,AcGePoint3d pt);
void finishEdit(void);
};
为了接受通告消息,在这个类中必需声明两个方法:一个是startEdit(),另一个是finishEdit()。
当应用程序被加载的时候,AcDbDoubleClickEdit类要对要处理的数据库对象增加协议扩展,例如在InitApplication()初始化过程中增加如下的代码:
pPlineEdit = new AcDbDoubleClickEditPline;
AcDbPline::desc()->addX(AcDbDoubleClickEdit::desc(),pPlineEdit);
同样地,在卸载应用程序的时候去除数据库对象的协议扩展,方法如下:
AcDbPline::desc()->delX(AcDbDoubleClickEdit::desc());
要使程序能够被编译,还必需连接AcDblClkEditPE.lib库,并且在InitApplication()中增加如下的代码:
acrxDynamicLinker->loadMole(/*MSG0*/"ACDBLCLKEDITPE.ARX",Adesk::kFalse);
(二) 在AutoCAD2000和2002中的实现
在AutoCAD2000和2002中没有AcDbDoubleClickEdit类,又如何来响应双击呢?
了解ObjectARX的朋友应该知道,Autodesk为开发者提供了反应器机制,它类似于MFC的消息处理,利用它我们可以响应输入事件、实体添加/编辑/删除等事件。常见的AutoCAD反应器有:编辑反应器(AcEditorReactor)、实体反应器(AcDbEntityReactor)、对象反应器(AcDbObjectReactor)、图形数据库反应器(AcDbDatabaseReactor)、文档管理反应器(AcApDocManagerReactor)等。
我们在这里是利用编辑反应器来实现鼠标双击事件的响应的,下面是实现步骤。
第一步我们要利用向导工具派生一个新的编辑反应器类――TTCDblClkTestReactor。并重载编辑反应器的如下方法:
virtual void beginDoubleClick(const AcGePoint3d& clickPoint);
第二步声明一个全局TTCDblClkTestReactor对象,如下:
static TTCDblClkTestReactor *gpDblClkTest;
第三步在应用程序初始化时创建反应器对象。
// Init this application. Register your
// commands, reactors...
void InitApplication()
{
// NOTE: DO NOT edit the following lines.
//{{AFX_ARX_INIT
AddCommand("TT", "TEST", "TEST", ACRX_CMD_TRANSPARENT |
ACRX_CMD_USEPICKSET, TTtest);
//}}AFX_ARX_INIT
// TODO: add your initialization functions
gpDblClkTest = new TTCDblClkTestReactor(); // 创建编辑反应器对象
}
第四步在应用程序卸载时从内存中清除反应器对象。
// Unload this application. Unregister all objects
// registered in InitApplication.
void UnloadApplication()
{
// NOTE: DO NOT edit the following lines.
//{{AFX_ARX_EXIT
acedRegCmds->removeGroup("TT");
//}}AFX_ARX_EXIT
// TODO: clean up your application
if(gpDblClkTest)
{
delete gpDblClkTest; // 清除编辑反应器对象
gpDblClkTest = NULL;
}
}
第五步响应鼠标事件,编写响应代码。
void TTCDblClkTestReactor::beginDoubleClick(const AcGePoint3d& clickPoint)
{
// 在此编写你的鼠标事件代码
AfxMessageBox("这是一个测试程序!");
}
好了,看一下您的郊果吧!祝您开心!J
其实,实现鼠标双击事件的方法还有,我这里知道的还有:(1)利用Windows系统或AutoCAD
Hook消息;(2)利用acedGrRead()函数。不过本人不提倡此两种做法,原因是它们实现比较麻烦,异常控制比较难解决,也不符合面向对象编程的理念。当然,当你遇特殊情况时用一下也未尝不可。
⑨ S3C2410中断控制器实验,在参考代码基础上做修改,修改中断控制器各个寄存器的配置,完成初始化函数编写
STM32的EXTI控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。
STM32的19个外部中断对应着19路中断线,分别是EXTI_Line0-EXTI_Line18:
线0~15:对应外部 IO口的输入中断。
线16:连接到 PVD 输出。
线17:连接到 RTC 闹钟事件。
线18:连接到 USB 唤醒事件。
触发方式:STM32 的外部中断是通过边沿来触发的,不支持电平触发。
外部中断分组:STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。
寄存器组
EXTICR寄存器组,总共有4 个,因为编译器的寄存器组都是从0 开始编号的,所以EXTICR[0]~ EXTICR[3],对应《STM32参考手册》里的 EXTICR1~ EXTICR 4(查了好久才搞明白这个数组的含义!!)。每个 EXTICR只用了其低16 位。
EXTICR[0] ~EXTICR[3]的分配如下:
EXTI寄存器的结构体:
typedef struct
{
vu32 IMR;
vu32 EMR;
vu32 RTSR;
vu32 FTSR;
vu32 SWIER;
vu32 PR;
} EXTI_TypeDef;
IMR:中断屏蔽寄存器
这是一个 32 寄存器。但是只有前 19 位有效。当位 x 设置为1 时,则开启这个线上的中断,否则关闭该线上的中断。
EMR:事件屏蔽寄存器
同IMR ,只是该寄存器是针对事件的屏蔽和开启。
RTSR:上升沿触发选择寄存器
该寄存器同IMR ,也是一个32为的寄存器,只有前 19位有效。位 x 对应线x 上的上升沿触发,如果设置为 1 ,则是允许上升沿触发中断/ 事件。否则,不允许。
FTSR:下降沿触发选择寄存器
同 PTSR,不过这个寄存器是设置下降沿的。下降沿和上升沿可以被同时设置,这样就变成了任意电平触发了。
SWIER:软件中断事件寄存器
通过向该寄存器的位x 写入 1 ,在未设置 IMR 和EMR的时候,将设置PR中相应位挂起。如果设置了IMR 和EMR时将产生一次中断。被设置的SWIER位,将会在PR中的对应位清除后清除。
PR:挂起寄存器
0 ,表示对应线上没有发生触发请求。
1,表示外部中断线上发生了选择的边沿事件。通过向该寄存器的对应位写入 1 可以清除该位。
在中断服务函数里面经常会要向该寄存器的对应位写1 来清除中断请求。
Ex_NVIC_Config基本是按照这个结构来编写的
中断配置步骤
STM32的每个IO口都可以作为中断输入,这点很好用。要把IO口作为外部中断输入,有以下几个步骤:
1)初始化IO口为输入。
这一步设置你要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。
2)开启IO口复用时钟,设置IO口与中断线的映射关系。
STM32的IO口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。
3)开启与该IO口相对的线上中断/事件,设置触发条件。
这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。
4)配置中断分组(NVIC),并使能中断。
这一步,我们就是配置中断的分组,以及使能,对STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。关于NVIC的详细介绍,请参考前面章节。
5)编写中断服务函数。
这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃!所以在开启了某个中断后,一定要记得为该中断编写服务函数。在中断服务函数里面编写你要执行的中断后的操作。
实验4--外部中断实验exit.c函数如下:
[cpp] view plain
#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}
//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY0==0) //按键0
{
LED0=!LED0;
}else if(KEY1==0)//按键1
{
LED1=!LED1;
}
EXTI->PR=1<<13; //清除LINE13上的中断标志位
EXTI->PR=1<<15; //清除LINE15上的中断标志位
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOA->CRH|=0X80800000;
GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15; //PA15上拉
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2
}
其中的两个函数:Ex_NVIC_Config(GPIO_A,0,RTIR);和MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);这两个函数都是在sys.c里定义,分别完成了步骤2、3、4.函数原型如下:
[cpp] view plain
//外部中断配置函数
//只针对GPIOA~G;不包括PVD,RTC和USB唤醒这三个
//参数:GPIOx:0~6,代表GPIOA~G;BITx:需要使能的位;TRIM:触发模式,1,下升沿;2,上降沿;3,任意电平触发
//该函数一次只能配置1个IO口,多个IO口,需多次调用
//该函数会自动开启对应中断,以及屏蔽线
//待测试...
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4;//得到中断寄存器组的编号
EXTOFFSET=(BITx%4)*4;
RCC->APB2ENR|=0x01;//使能io复用时钟
AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET);//清除原来设置!!!
AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx映射到GPIOx.BITx
//自动设置
EXTI->IMR|=1<<BITx;// 开启line BITx上的中断
//EXTI->EMR|=1<<BITx;//不屏蔽line BITx上的事件 (如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx上事件下降沿触发
if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//line BITx上事件上升降沿触发
}
这个函数完成了两个步骤:
2、开启IO口复用时钟,设置IO口与中断线的映射关系
3、开启与该IO口相对的线上的中断/时间,设置触发条件
[cpp] view plain
//设置NVIC
//NVIC_PreemptionPriority:抢占优先级
//NVIC_SubPriority :响应优先级
//NVIC_Channel :中断编号
//NVIC_Group :中断分组 0~4
//注意优先级不能超过设定的组的范围!否则会有意想不到的错误
//组划分:
//组0:0位抢占优先级,4位响应优先级
//组1:1位抢占优先级,3位响应优先级
//组2:2位抢占优先级,2位响应优先级
//组3:3位抢占优先级,1位响应优先级
//组4:4位抢占优先级,0位响应优先级
//NVIC_SubPriority和NVIC_PreemptionPriority的原则是,数值越小,越优先
//CHECK OK
//100329
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
{
u32 temp;
u8 IPRADDR=NVIC_Channel/4; //每组只能存4个,得到组地址
u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
IPROFFSET=IPROFFSET*8+4; //得到偏移的确切位置
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group);
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf;//取低四位
if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;//使能中断位(要清除的话,相反操作就OK)
else NVIC->ISER[1]|=1<<(NVIC_Channel-32);
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级
这个函数完成了:
4、配置中断分组(NVIC),并使能中断
补充
在实验18--触摸屏实验中,中断初始化没有调用这个函数,它是这样配置的:
[cpp] view plain
MY_NVIC_Init(2,0,EXTI1_IRQChannel,2);
RCC->APB2ENR|=0x01; //使能io复用时钟
AFIO->EXTICR[0]|=0X0020; //EXTI1映射到PC1(这句原子的程序里注释错了搞成了EXTI13)
EXTI->IMR|=1<<1; //开启line1上的中断
EXTI->EMR|=1<<1; //不屏蔽line1上的事件
EXTI->FTSR|=1<<1; //line1上事件下降沿触发
RCC->APB2ENR|=0x01; 这一句是开启复用时钟,什么时候需要开启复用时钟?手册有这样一段:
也就是说只要操作EVCR、EXTICRX、MAPR的时候,就必须开启复用功能时钟,即当你要配置stm32的事件输出、外部中断、重映射的时候.就必须开启复用时钟。
AFIO->EXTICR[0]|=0X0020; //EXTI1映射到PC1
这一句设置中断映射,如上文所说EXTICR[0]~ EXTICR[3] 对应 EXTICR1~ EXTICR4,举例:
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF0F; //EXTI13映射到PA13,0(即0x00)代表A口,1(即0x01)代表B口,依次类推,6(即0x0110)代表G口.
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF2F; //EXIT13映射到PC13,2(0x0010)代表C口
外部中断函数不能进入的原因分析分析,可能为以下几个方面:
1)GPIO或者AFIO的时钟没有开启;
2)GPIO和配置的中断线路不匹配;
3)中断触发方式和实际不相符合;
4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线;
5)外部中断是沿触发,有可能检测不到沿,比如中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续 为高电平;
6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。
⑩ Auto CAD,哪有免费下载,我找了好多个,都不行了.急
AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。
AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD 2000或2002,最新版本是AutoCAD 2004,其二次开发语言及工具也在不断地涌现
1 AutoLISP
AutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。
3 ADS
ADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。
4 ObjectARX
ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(Auto CAD数据库)和AcEd(Auto CAD编译器),另外还有其它的一些重要库组件,如AcRX(Auto CAD实时扩展)、AcGi(Auto CAD图形接口)、AcGe(Auto CAD几何库)、ADSRX(Auto CAD开发系统实时扩展)。ObjectARX 还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。
5 VisualLISP
VisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD 2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于Auto CAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。
6 VBA
VBA 即Mcrosoft office中的Visual Basic for Applications,它被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。