|
我现在用了GPB0,GPB1,GPB5,GPB6,GPB7,GPB8,初始化成功。
用EVC开发应用程序控制一个16x32的led点阵,程序成功下载到wince中,但运行的时候速度非常慢,延迟很大,使led不能正常显示。程序部分代码如下:
void CGPIO0427Dlg::OnBUTStart()
{
// TODO: Add your control notification handler code here
char i,j,row,time=100;
while(time--)
{
for(row=0;row<4;row++)
{
//STB上升沿有效
DeviceIoControl(gpiodriver,IO_CTL_GPIO_D_0,NULL,0,NULL,0,NULL,NULL);
DeviceIoControl(gpiodriver,IO_CTL_GPIO_D_1, NULL,0,NULL,0,NULL,NULL);
//行选
SelectRow(row); //循环执行这个函数
}
}
DeviceIoControl(gpiodriver,IO_CTL_GPIO_A_0, NULL,0,NULL,0,NULL,NULL);
}
void CGPIO0427Dlg::SelectRow(char row)
{
bool a,b;//行选信号a,b
a=(row & 0x01);
b=((row>>1) & 0x01);
if(a)
DeviceIoControl(gpiodriver,IO_CTL_GPIO_A_1, NULL,0,NULL,0,NULL,NULL);
else
DeviceIoControl(gpiodriver,IO_CTL_GPIO_A_0, NULL,0,NULL,0,NULL,NULL);
if(b)
DeviceIoControl(gpiodriver,IO_CTL_GPIO_B_1, NULL,0,NULL,0,NULL,NULL);
else
DeviceIoControl(gpiodriver,IO_CTL_GPIO_B_0, NULL,0,NULL,0,NULL,NULL);
//OE=0,使能138
DeviceIoControl(gpiodriver,IO_CTL_GPIO_F_0, NULL,0,NULL,0,NULL,NULL);
}
从led显示上看,执行的很慢,每循环一个for(row=0;row<4;row++),执行一次SelectRow(row)函数,延迟大约0.5s。
可我只循环执行一个SelectRow(row)函数。我想wince的指令执行速度应该很快,就这么几行代码怎么会有这么大的延迟?
我想问:1、wince5.0的执行速率是多少?
2、为什么会产生这么大的延迟?我当初裸跑的时候速度是很快的,可以正常显示。现在只是把把当初直接给寄存器赋值该为调用wince驱动给寄存器赋值,怎么会有这么大的差异? |
|