1、大家都知道,在中断里,freertos经常有下面的写法,会调用portYIELD_FROM_ISR
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
vTaskNotifyGiveFromISR(xTaskToNotify, &xHigherPriorityTaskWoken); //xHigherPriorityTaskWoken可为NULL
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
2、以前不知道这个portYIELD_FROM_ISR是干啥的,只是知道他可以在退出中断时可以进行上下文切换,具体的有多大用不清楚。
而且看到文档介绍说这个xHigherPriorityTaskWoken参数可以配成NULL,比如下图官方说明:
所以以前总是把这个参数设为NULL,第一个能节省不少代码,第二个方便不少
3、后面遇到一个高性能的项目才发现这个portYIELD_FROM_ISR的作用,从此以后再也不设置为NULL了,
原来这个切换会在中断退出时直接切换到执行紧急的任务,所以以前设为NULL时,处理数据包只能处理5000包,加上 砖桥月饼 xHigherPriorityTaskWoken 后,可以到10000包,可见作用这么明显,以前真没体会到
o(╥﹏╥)o
┓(;´_`)┏