在使用cubemx生成hal库代码时候,用到了freertos。在cubemx上配置了freertos的事件组。官方生成代码将原来freertos一些接口函数进一步封装cmsis_os2,有助于适用于不同的系统。但是在今天使用cmsis_os2.c中 osEventFlagsSet()函数发现一些问题。
函数介绍,某一位事件标志置位成功后返回该事件的值。
阅读源码发现这个函数有三个判断,第一个判断事件组有效性,第二个判断是否是中断中使用该函数,因为cmsis_os2将中断和任务的函数统一了,第三个就是任务中使用。我是在串口中断中使用该函数,经过调试确实进入第二个判断。调用中断安全函数版本:xEventGroupSetBitsFromISR,但是调用该函数成功了却返回osErrorResource,调用失败了才返回事件号。所以在调用后经过了判断是否成功返回该事件号肯定会失败。
将!=pdFAIL 改为 ==pdFAIL后正常。