📄 hal.cpp
字号:
#include "stdafx.h"
#include "HAL.h"
typedef void (*ptr_func) (void);
extern void WinMain(void);
extern "C" void IntSchedule(void);
extern "C" void SoftSchedule(void);
extern "C" int TOUCH_GetState(int* x,int* y);
extern "C" void set_wait_32k_clock_time_irq(ptr_func);
extern "C" void set_time_tick(int Tick_Ps);
extern int Image$$ZI$$Limit[];
extern int* pOsHeap;
DWORD _ISR_STARTADDRESS=0;
DWORD nHalTickCount=0;
USHORT aHalAD[256];
void EnableFIQ(BOOL bEnable)
{
int tmp;
__asm{mrs tmp,CPSR}
if(bEnable)
{
__asm{bic tmp,tmp,#0x40}
}
else
{
__asm{orr tmp,tmp,#0x40}
}
__asm{msr CPSR_c,tmp}
}
typedef enum { // Value used for ILRX.FIQ
INTH_IRQ = 0, // IT routed to IRQ
INTH_FIQ = 1 // IT routed to FIQ
} INTH_InterruptKind_t;
extern "C" UINT INTH2_GetCurrentIt (INTH_InterruptKind_t Fiq_or_Irq);
extern "C" void INTH2_ValidNextInterrupt (INTH_InterruptKind_t Fiq_or_Irq);
extern "C" __irq void SWI_Tick()
{
nHalTickCount++;
if(GetNextThread())
{
IntSchedule();
}
INTH2_GetCurrentIt (INTH_FIQ);
INTH2_ValidNextInterrupt(INTH_FIQ);;
}
void IRQ_Tick(void)
{
/*
__asm{
swi 0;
};
*/
}
void Idle()
{
while(1)
{
Sleep(1000);
if(GWnd::m_nWndCount)
{
GWnd::m_aWnd[0]->PostMessage(WM_TIMER,100,GetTickCount());
}
}
}
extern "C" int HAL_ENTRY()
{
int aHeap[0x40000];
set_time_tick(100);
set_wait_32k_clock_time_irq(&IRQ_Tick);
while(1)
{
pOsHeap = aHeap;
//pOsHeap= Image$$ZI$$Limit;
OS_Init();
//KFile::Init();
CreateThread(Idle,0);
EnableFIQ(TRUE);
WinMain();
//KFile::Unload();
Sleep(5000);
EnableFIQ(FALSE);
}
return 0;
}
void HAL_OnIdle(void)
{
static int i=0,ax[3],ay[3];
int x,y,j;
if(TOUCH_GetState(&x,&y))
{
for(j=0;j<2;j++)
{
ax[j]=ax[j+1];
ay[j]=ay[j+1];
}
ax[2]=x;
ay[2]=y;
i++;
if(i==3)
{
GWnd::WM_Click(x,y,TRUE);
}
}
else if(i)
{
if(i>=3)
{
GWnd::WM_Click(ax[0],ay[0],FALSE);
}
i=0;
}
}
void Sleep(DWORD nMilliseconds)
{
nMilliseconds+=GetTickCount();
GetCurThread()->nTick=nMilliseconds;
if(GetNextThread())
{
SoftSchedule();
}
while(GetTickCount()<nMilliseconds);
}
void HAL_Beep(int nType)
{
}
void GetSystemTime(LPSYSTEMTIME lpSystemTime)
{
}
DWORD GetTickCount()
{
return nHalTickCount*10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -