FreeRTOS 内核版本:V10.5.1,也就是官网下载的 FreeRTOSv202212.01 这个版本。
类型命名规范
typedef long BaseType_t;
#define pdFALSE ((BaseType_t)0)
#define pdTRUE ((BaseType_t)1)
#define pdPASS (pdTRUE)
#define pdFAIL (pdFALSE)很多函数的返回值都是 BaseType_t,其实就是长整型,返回 1 表示成功,返回 0 表示失败。
函数命名规范
通过前缀,可以快速了解函数的用途、位置和使用条件。
这种命名规则有助于代码的可读性和可维护性。
功能控制
FreeRTOS 使用了大量的条件编译去控制各个功能,为了应对多种硬件架构和不同的配置选项,使得 FreeRTOS 具备良好的跨平台适应性。
调试机制
mtCOVERAGE_TEST_MARKER(); ,这个是开发FreeRTOS的人用的,这是,在正式运行环境中没有实际功能。
if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE)
{
queueYIELD_IF_USING_PREEMPTION();
}
else
{
mtCOVERAGE_TEST_MARKER();
}在FreeRTOS.h中为空实现,因此编译不会对项目大小造成影响。
#ifndef mtCOVERAGE_TEST_MARKER
#define mtCOVERAGE_TEST_MARKER()
#endif在阅读源码的时候,实际上可以忽视那个判断,即,只保留:
xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive));
queueYIELD_IF_USING_PREEMPTION();这样能简化代码,方便阅读源码。
MISRA C 规则声明
/* Lint e9021, e961 and e750 are suppressed as a MISRA exception justified
* because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be
* defined for the header files above, but not in this file, in order to
* generate the correct privileged V sunprivileged linkage and placement. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILEMISRA C 是一种编程规范,主要用于汽车、航空、工业控制等高安全要求的嵌入式软件。
它定义了一系列规则(例如哪些宏用法不推荐,哪些头文件包含方式必须统一,哪些语法特性危险等),用来避免潜在的安全隐患。
代码经过 MISRA 静态分析工具检查时,会报出“违背规则”的警告(lint 警告就是一种常见检查方式)。