考虑我的另一个帖子,最近为我的事件驱动构架,增加了抢占的功能。
这里就举几个应用例子。
1. 奇葩的main函数:
按照之前设计的,main函数是最低的优先级,里面一般放CPU占用比较多的任务,比如一些高强度运算。
当时,当系统没有这些高强度运算的话,那么main函数就会退化成最简单的形式:
int main(void)
{
// 高优先级事件队列初始化以及任务初始化
// 开中断
while (1)
{
// 系统休眠
}
}
这种情况下,main函数中,不需要事件队列,因为所有事件都在PendSV中已经得到了处理。所以,main函数里,while(1)里直接休眠就行。
这时,系统的运行方式就退化为全中断运行方式,所有的任务,都在中断里处理完毕。
当然,这里的前提就是所有事件的处理,都不会有占用过多CPU的情况
2. 处理一些CPU占用过多,但是,仍旧需要保证一些任务的实时性
之前的VSF构架,是协作式内核,如果一个任务占用过多CPU,会导致其他任务都会阻塞。
增加了抢占式的事件队列后,就可以解决这个问题。
比如,可以在main里,计算RSA,AES,MP3,浮点数运行,虚拟机处理等事物。
但是,同时,PendSV里的事件队列仍旧可以正常响应,不会因为main函数里的代码占用过多CPU而影响实时性。
这里也举个简单的例子:
一个基于wifi的tcpip应用,其中有MP3软解码,还有FFT运算。
那么软解码部分以及后续的FFT运算都是放在main的中执行。
而tcpip协议栈等其他各个任务,都可以放在PendSV中运行,因为这些任务都是由中断触发,然后发送事件(并且设置PendSV激活),然后在PendSV中,处理这些事件。
这样,各个中断,包括wifi,定时器等,都可以得到抢占式的响应。
后面会用这种方式,实现一个基于wifi的音响来测试这套抢占式的事件驱动构架。
未完待续。。。
|