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和其它一些應用程序,使之相互之間發生互易活動。