阅读:1743回复:8
关于InterruptInitialize的问题,忘高手指教
我调用InterruptInitialize后,在debug窗口看见他说要在INTERRUPTS_ON后启动。
然后我加入INTERRUPTS_ON()。但是编译通过后显示连接错误。我在文档里没有发现需要连接的lib文件。我看INTERRUPTS_ENABLE要Nk*.lib。但是我的sitang开发包里没有。如果要自己实现的话,是不是只要改中断屏蔽控制器就行了? |
|
论坛版主
|
沙发#
发布于:2004-07-23 23:08
nk.lib在$(_COMMONOAKROOT)\\lib\\$(_CPUDEPPATH)\,这个目录是bsp编译生成os时在public\\<YourPlatform>里面生成的。
我发现库里面本来是没有这个nk.lib,但是在利用bsp编译生成os时会在在public\\<YourPlatform>里面的xxx\cesysgen\oak里面生成,不知道是使用哪部分生成的这个库,那位兄弟知道,告知。 看来如果不能提前生成这个nk.lib那就自己写吧,不过还算好,基本上就控制cpu内部以为就可以了(很多cpu都可以),如果不能在cpu内部禁止再控制中断控制器的屏蔽寄存器吧 |
|
板凳#
发布于:2004-07-25 08:05
#include "stdafx.h"
#include <Pkfuncs.h> #include <Nkintr.h> #define INTR SYSINTR_TIMING #define SIZE (4800*4) HANDLE hExit = NULL; HANDLE hEvent = NULL; void ShowError( LPTSTR message ) { static RECT rect = { 0, 0, 640, 15 }; static HDC hdc = GetDC(0); DWORD error = GetLastError(); TCHAR lpMsgBuf[100]; wsprintf( lpMsgBuf, TEXT("%d\n"), error ); DrawText( hdc, lpMsgBuf, wcslen( lpMsgBuf ), &rect, DT_NOCLIP|DT_SINGLELINE ); rect.top += 15; rect.bottom += 15; OutputDebugString( message ); OutputDebugString( lpMsgBuf ); OutputDebugString( L"\n" ); } DWORD WINAPI Timer( LPVOID param ) { int i = 0; while( i < 1000000 ) { OutputDebugString( TEXT("Waiting\n") ); WaitForSingleObject( hEvent, INFINITE ); //ResetEvent( hEvent ); OutputDebugString( TEXT("TIMMING\n") ); InterruptDone(INTR); i++; } SetEvent( hExit ); return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { hExit = CreateEvent( NULL, TRUE, FALSE, NULL ); //HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); if( hEvent == NULL ) { ShowError( TEXT("CreateEvent Failed") ); return 0; } InterruptDisable(INTR); if( !InterruptInitialize(INTR, hEvent, NULL, (DWORD)NULL) ) { ShowError( TEXT("InterruptIntialize Failed\n") ); return 0; } OutputDebugString( TEXT("Interrupt Initialized\n") ); HANDLE hThread = CreateThread(NULL, 0, Timer, NULL, 0, NULL ); if( hThread == NULL ) { ShowError( TEXT("CreateThread Failed") ); return 0; } WaitForSingleObject( hExit, INFINITE ); InterruptDisable(INTR); CloseHandle( hEvent ); CloseHandle( hThread ); CloseHandle( hExit ); return 0; } 为什么这段代码没有任何反映。 我不知道错在那里。 |
|
论坛版主
|
地板#
发布于:2004-07-26 21:58
关中断处理完后把中断打开
|
|
地下室#
发布于:2004-07-26 22:22
是那个函数
INTERRUPTS_ON? 还是别的? 我导入Nk.lib之后就会出现连接错误,是和Core.lib冲突。 怎么办? 我都快急死了。 |
|
论坛版主
|
5楼#
发布于:2004-07-26 22:55
稳住稳住:)不要慌三,慢慢来,慢慢来,我们支持你!!!:)
你用InterruptDisable(INTR);关中断后没有开放它,换成INTERRUPTS_OFF来关,然后用INTERRUPTS_ON来开 这两个函数在nk.lib里面有,连接时加入nk.lib就行,但要注意nk.lib的目录:$(_COMMONOAKROOT)\\lib\\$(_CPUDEPPATH)\\nk.lib core.lib?你自己生成的?是不是你的代码自己实现了interrupts_on这些函数? 兄弟加油 |
|
论坛版主
|
6楼#
发布于:2004-07-26 22:56
得走了,要关门的,明天再战!good luck
|
|
7楼#
发布于:2004-07-27 08:25
是coredll.lib
|
|
论坛版主
|
8楼#
发布于:2004-07-27 12:47
Nk.lib和coredll.lib冲突?怎么写的?
|
|