打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ArcCore重构

AUTOSAR定义了一系列PlatformTypes,如uint8/uint16/uint32等等基本类型。

It contains all platform dependent types and symbols. Those types must be abstracted in order to become platform and compiler independent.

ArcCore中实现如下:

#include <stdbool.h>#include <stdint.h>#ifndef PLATFORM_TYPES_H#define PLATFORM_TYPES_H#define CPU_TYPE            CPU_TYPE_32 #define CPU_BIT_ORDER       MSB_FIRST #define CPU_BYTE_ORDER      HIGH_BYTE_FIRST#ifndef FALSE#define FALSE        (boolean)false#endif#ifndef TRUE#define TRUE        (boolean)true#endiftypedef _Bool                  boolean;typedef int8_t                 sint8;typedef uint8_t               uint8;typedef char                char_t;typedef int16_t                sint16;typedef uint16_t              uint16;typedef int32_t             sint32;typedef uint32_t               uint32;typedef int64_t              sint64;typedef uint64_t              uint64;typedef uint_least8_t       uint8_least;typedef uint_least16_t      uint16_least;typedef uint_least32_t      uint32_least;typedef int_least8_t        sint8_least;typedef int_least16_t       sint16_least;typedef int_least32_t       sint32_least;typedef float               float32; typedef double              float64;  typedef volatile int8_t vint8_t;typedef volatile uint8_t vuint8_t;typedef volatile int16_t vint16_t;typedef volatile uint16_t vuint16_t;typedef volatile int32_t vint32_t;typedef volatile uint32_t vuint32_t;typedef volatile int64_t vint64_t;typedef volatile uint64_t vuint64_t;#endif

可以看到,其中直接使用了_Bool类型,uint8_t等这些类型,来定义boolean/uint8等这些类型。

那_Bool/uint8_t这些类型从何而来呢?

一定是从上面的include中来:

#include <stdbool.h>#include <stdint.h>

这两个文件来自于编译链。亦即这些类型的定义会随着编译链的变化,而可能发生变化。

1. 我们需要这种变化吗?AUTOSAR的软件模块不应该建立在一个统一的类型之上吗?

需要。回到文章最开始那句话,所有这些types都是platform dependent,随platform而变。这里来自于编译链的这两个头文件正好是我们所需要的platform-dependent types.

 

2. 这两个文件靠的住吗?每个工具链都提供这两个文件吗?

事实上,我最开始移植编译时即报找不到类型的错误。当打开这两个文件时,可以发现文件头位置的注释中有如下两句:

* ISO C Standard:  7.16  Boolean type and values  <stdbool.h>* ISO C99: 7.18 Integer types <stdint.h>

即这两个文件都是ISO C标准所定义的文件。只要C编译器是按标准实现的,则有这两个文件。不按ISO C标准实现的编译器能拿出来用吗?

这里也提示了,找不到类型的问题,是因为没有打开C99的支持。所以找不到stdint.h。

 

3. uint8/uint16/uint32这样的类型定义太普遍了,很有可能跟系统中的其他模块,比如芯片商提供的bsp,或者rtos里面定义的类型系统重复,以致重命名错误。

是否应该统一在这些类型前面添加前缀,比如AR_UINT8/AR_UINT16/AR_UINT32?

现实中,在编译MPC5xxx系列时,确实遇到了vint8_t类型冲突的问题。(可以把这里的删除掉,vint8_t在标准文档中没有要求)

暂时不能改,一则使用太普遍,加了略显繁杂。二则这些类型名是AUTOSAR标准里面定义的,不是ArcCore自由发挥的。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【MBD开发】Simulink重定义数据类型
uint8
【创龙TMS320C6748开发板试用】+ CSLR库函数编写
STM32常用数据类型 u8、u16、u32
C语言中Union类型的使用方法
C++中的long long和__int64类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服