我在使用以下代码时遇到困难;
int i = 0;
int x = 0;
int ch ;
int n;
while((i < sizeof(buffer) - 1) && (x < (TIMER_FREQ*30)))
{
//getkey_serial0 returns either a (int)character or 0 if nothing on
//UART0
if((ch = getkey_serial0) == 0)
{
x++; //Increment X as there is nothing being received.
}
else
{
if(ch == '\n')
{
n++;
}
if(n < 8){ //Yes I can simplify this but for some reason
} //I only just noticed this :/ Anyway, it is
else{ //just here to avoid saving info I don't need
buffer[i] = ch ;
i++;
}
}
}
由于它正在读取的输入是无线扫描的结果,因此扫描的条目数可能会有很大差异,因此我需要能够避免无限循环。最初我只读了 11\n,但这是垃圾,因为我一直缺少我需要的 SSID,所以我决定我需要某种计时器或方法来帮助我在 X 时间后中断。
TIMER_FREQ 定义为 10。
显然我在做一些愚蠢的事情,所以任何建议或提示将不胜感激。我通常更喜欢建议来帮助我尝试和思考问题,而不是固定的代码帖子:)尽管我尽了最大的努力,但我似乎总是错过一些简单的事情!
谢谢
编辑:我应该提一下,这是在嵌入式系统 (ARM7) 上
您应该可以访问通用定时器中断——通常称为 sys_tick()。
此类“裸机”应用程序的一般做法是将中断配置为每 n 毫秒触发一次(我的 Cortex M3 经常使用 10 毫秒)。然后,让 ISR 更新计数器。您需要确保计数器更新是原子的,因此请使用 32 位、正确对齐的变量。 (我假设你的处理器是 32 位的,我记不起来了)。然后您的“应用程序”代码可以根据需要轮询耗时。
但是 - 这个计时器讨论可能没有实际意义。在我的 ARM9 应用程序中,我们将中断绑定(bind)到 UART 的接收缓冲区。关联的 ISR 捕获击键,然后执行任何缓冲区管理。这是您的选择吗?
我是一名优秀的程序员,十分优秀!