关于中断?

时间:2008-11-12 06:41:42

标签: c events

我正在编写一个基本的红绿灯控件,它将显示在显示器上。

因为我需要发生外部中断(事件)并改变当前交通信号灯的状态。我试图在没有任何电路板或外围设备的情况下进行此操作。

现在我觉得我有以下选择。告诉我哪个是最好的。

1。一个中断函数要安装在系统上,定期给出中断? (但我不知道如何安装......任何身体请帮助我)

2。在第二台PC或超级终端上运行的AC程序会定期向运行红绿灯程序的PC串口发送一些不同的延迟值,这些端口将定期检查该值,对于一组数据,它将更改为一个状态和另一个国家的另一组数据。所以这两个程序将在他们自己的系统上同时运行。

3.其他我应该去外部中断发生器吗?

在上述方法中,这是最好的方法。或者是否有任何其他更简单的altrnative,不包括外部硬件。如果上述任何解决方案都不正确,请忽略它们.. 我的环境是Windows上的turbo C。(gcc上的答案也请bcos我有TRITON IDE,在ARM7的Windows上安装了gcc)

3 个答案:

答案 0 :(得分:2)

你可以制作一个多线程的应用程序,当你清醒时有一些行为就像中断一样。

线程一: 交通控制 线程二: 模拟来自东方的交通,并请求改变,并在再次唤醒之前从1到60秒随机休眠。 线程X使用想象力。

在gcc中,如果你有一个例子的pthread lib,这可以很容易地完成。

答案 1 :(得分:1)

选项1是最简单的,您只需创建一个定时器,定期中断您的程序。你说你是用C编程但没有指定平台,定时器是平台相关的。

在Unixland中,定时器在完成后发送信号进行处理。具体来说,Linux的计时器实现是setitimer

然后您必须捕获并处理计时器发送的signals

在Win32 API中,您也可以使用timers,但概念有所不同。

答案 2 :(得分:0)

获取Microsoft®Win32®程序员参考帮助文件的副本: Win32.hlp

寻找 SetTimer 及相关功能。 此函数在Windows上注册,您希望在特定时间间隔之后调用函数(从您调用setTimer的那一刻起)。 我的建议是,在这个功能上你: - 杀掉这个计时器并设置另一个计时器(即相同的间隔,相同的功能); - 增加一个柜台; - 针对常数测试计数器;

即。计数器= 10,变为黄色,= 20,变为绿色,= 30变为红色并重置计数器。

如果想要让红绿灯对其他东西作出反应,请用“其他东西”代替计数器逻辑。

程序的main()只是你的计时器初始化和一段时间(1)。其余的由定时器调用函数完成。