关于中断
近段时间在做与一个有网络的嵌入式操作系统的开发。这个系统用的是最单线程,网络部分是用的lwip。因为要对网络部分进行二次开发,于是对lwip调用mac和fifo这一部分进行了比较深入的了解。发现中断真的很有趣也很重要,如果拿人来比较中断就相于人的耳朵和眼睛了。它从外界收集信息然后通知大脑,让大脑去处理。
关于中断,除了本身做为一个信号可以直接与CPU相连之外,我们都知道每个中断都有其对应的中断响应函数。
经过分析lwip的网络部分程序设计流程大概是这样的。
1 init_lwip();我们统称为初始化吧,把网卡及相关的外设进行设置。
2 注册中断,允许中断。在注册中断主要是指定中断的响应函数,将中断对对应的响应函数进行绑定。
3 while(1)
{
根据实际情况需要发送数据则发送数据
}进入无限循环....
那么一旦程序进入循环,接收数据则完全是靠中断来处理的。当然这里面还要涉及到怎么设计缓存,也就是接收到的包要缓存起来,以供其它模块使用。
所以在程序设计中,特别是一些单线程的情况下,有些需求是很难达到的,但是如果利用中断的特性,一些问题就很容易解决,因为利用中断这种思想与顺序执行有很大的区别。
近段时间在做与一个有网络的嵌入式操作系统的开发。这个系统用的是最单线程,网络部分是用的lwip。因为要对网络部分进行二次开发,于是对lwip调用mac和fifo这一部分进行了比较深入的了解。发现中断真的很有趣也很重要,如果拿人来比较中断就相于人的耳朵和眼睛了。它从外界收集信息然后通知大脑,让大脑去处理。
关于中断,除了本身做为一个信号可以直接与CPU相连之外,我们都知道每个中断都有其对应的中断响应函数。
经过分析lwip的网络部分程序设计流程大概是这样的。
1 init_lwip();我们统称为初始化吧,把网卡及相关的外设进行设置。
2 注册中断,允许中断。在注册中断主要是指定中断的响应函数,将中断对对应的响应函数进行绑定。
3 while(1)
{
根据实际情况需要发送数据则发送数据
}进入无限循环....
那么一旦程序进入循环,接收数据则完全是靠中断来处理的。当然这里面还要涉及到怎么设计缓存,也就是接收到的包要缓存起来,以供其它模块使用。
所以在程序设计中,特别是一些单线程的情况下,有些需求是很难达到的,但是如果利用中断的特性,一些问题就很容易解决,因为利用中断这种思想与顺序执行有很大的区别。