我目前正在使用FreeRTOS,并注意到一些我以前没有遇到过的事情。
文件"projdefs. h"使用文件"FreeRTOSConfig. h"中的定义,但不包括"FreeRTOSConfig. h"。"projdefs. h"不包括任何其他相关文件。
这怎么可能呢?
案例如下所示:
//projdefs.h
#ifndef pdMS_TO_TICKS
#define pdMS_TO_TICKS( xTimeInMs ) ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000U ) )
#endif
//FreeRTOSConfig.h
#ifndef configTICK_RATE_HZ
#define configTICK_RATE_HZ (1000)
#endif
我试着用谷歌搜索答案,但一无所获。
1条答案
按热度按时间daupos2t1#
如果不包含头文件,如何使用来自另一个头文件的
#define
?候选答案。
1.即使
projdefs.h
不直接包含FreeRTOSConfig.h
,projdefs.h
也包含一些包含FreeRTOSConfig.h
的.h文件。或者,projdefs.h
可能包含一些.h文件,其中包含一些包含FreeRTOSConfig.h
的. h文件,等等。(OP确实Assert:“projdefs. h”不包括任何其他与此相关的文件。”)projdefs.h
本身或直接(或间接)包含定义configTICK_RATE_HZ
的内容,并且包含FreeRTOSConfig.h
的Assert是不正确的。configTICK_RATE_HZ
由编译器定义。设计提示:
查找
define
、对象、函数或常量的声明/定义位置通常是一件苦差事。我发现在
"same_prefix.h"
内部为它们使用一个通用的prefix_
可以缓解这个问题。