全部学习汇总: https://github.com/GreyZhang/g_FreeRTOS
一上来,先进行了一些信号有效性的检查。同时也检查了中断优先级的合理性,这个主要是考虑不要出现非OS托管的中断。
设置了ISR中的中断保护,进行实质的队列数据搬运。
这一段代码在我现在的配置中是不生效的。
这一段才是if条件成立会执行处理的部分。这部分的代码做了两件事情,第一个是如果是有等待这个队列中信号的任务,那么这个时候需要激活或者标注后续激活相应的任务。
如果队列锁住了,锁住的状态信息增加1。如果写不进去,那么得提示队列满了。处理完之后,增加三明治结构的另外一片。
以上就是从ISR中发送队列信息的处理过程。
跟前面的接口类似,give的这个接口的不同点在于这个只提供激励信号,不需要传输数据。整个接口的设计,其实跟前面看过的队列发送接口结构相似。
有了前面的接口分析,其实这个接口的解读就非常简单了。这两部分最大的一个差异点在于少了队列中数据的搬运,因此也可以看得出来纯粹的激活信号处理的时候,这个接口的效果更高。
以上就是FreeRTOS从中断ISR中进行队列数据或者信号发送的实现的简单分析,还比较简单。根本的修改点其实就是2个,其中一个两个都有的是任务的激活处理,而另一个则是只属于队列的数据搬运。