目录
前往《Autosar深入理解-总目录》
前往《教你如何阅读Autosar代码-总目录》
1 背景
当我们作为一个初学者拿到如下一段Autosar代码,肯定会一头雾水,我们知道Nm_PassiveStartUp肯定是一个函数,那前面的FUNC和后面的CONST,以及VAR这些是什么意思呢?
FUNC( Std_ReturnType, NM_CODE ) Nm_PassiveStartUp( CONST( NetworkHandleType, AUTOMATIC ) nmNetworkHandle )
{
/* ----- Local Variables ---------------------------------------------- */
VAR( Std_ReturnType, AUTOMATIC ) retVal = E_NOT_OK;
VAR( uint8, AUTOMATIC ) errorId = NM_E_NO_ERROR;
2 关键字宏
其实,上面的这些都是关键字宏,在Complier.h中定义。
# define FUNC(rettype, memclass) rettype
# define CONST(type, memclass) const type
# define VAR(vartype, memclass) vartype
这样的话,最开始的那段代码就可以翻译成下面这样。
Std_ReturnType Nm_PassiveStartUp( const NetworkHandleType nmNetworkHandle )
{
/* ----- Local Variables ---------------------------------------------- */
Std_ReturnType retVal = E_NOT_OK;
uint8 errorId = NM_E_NO_ERROR;
有些同学问,这样我还是不太理解,Std_ReturnType是什么意思啊。
其实这些就是重新命名的数据类型名字,如下,其实就是uint8。
typedef uint8 Std_ReturnType;
typedef uint8 NetworkHandleType;
我们再翻译一下上面的代码,最后就变成了这样,大家都能看懂了吧。
uint8 Nm_PassiveStartUp( const uint8 nmNetworkHandle )
{
/* ----- Local Variables ---------------------------------------------- */
uint8 retVal = E_NOT_OK;
uint8 errorId = NM_E_NO_ERROR;
下一节我们将介绍一下编译器抽象。