ArcCore重构-Platform_Types.h实现辨析
https://mp.weixin.qq.com/s/y768VcKD6Co7iD6u8LYoYg
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
#endif typedef _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自由发挥的。
ArcCore重构-Platform_Types.h实现辨析的更多相关文章
- ArcCore重构-目标文件结构化
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 3. 编译系统中所有代码文件通过搜索路径(VPATH)中搜索,存在名称污染问题,需加入路径信息: ...
- ArcCore重构-生成%_offset.h文件
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 ArcCore中,需要生成asm_offset.h和arch_offset.h这两个头文件,定义着代 ...
- ArcCore重构-头文件引用问题的初步解决
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 1. 头文件引用混乱,所有头文件通过从搜索路径(-I)中引用,存在名称污染问题,需加入路径信息: ...
- C中的C文件与h文件辨析(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成 ...
- C中的C文件与h文件辨析
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 .编译阶段,首先编译成纯 ...
- ArcCore重构-打通Can各层ID配置
https://mp.weixin.qq.com/s/JX7VZwyMqk_9iVMm_N2pxA https://mp.weixin.qq.com/s/5Y8Dt9j1-NQmnjfYhE19dg ...
- ArcCore重构-Makefile模块化
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 2. 编译系统中代码文件是否编译及目标文件集中定义在boards/board_common.mk,而 ...
- ios学习-控制按钮图片的走动和变换
一.项目要求:制作一个界面,通过点击按钮来控制头像(按钮)向上,向下,向左,向右移动,可以左旋转,右旋转,以及放大和缩小. 二.开发步骤: 1.通过拖动按钮到storyboard搭建UI界面(后面会写 ...
- Android插件化的兼容性(中):Android P的适配
Android系统的每次版本升级,都会对原有代码进行重构,这就为插件化带来了麻烦. Android P对插件化的影响,主要体现在两方面,一是它重构了H类中Activity相关的逻辑,另一个是它重构了I ...
随机推荐
- ZooKeeper实现命名服务
使用场景 命名服务就是提供名称的服务,Zookeeper的命名服务有两个应用方面.一个是提供类似JNDI功能,另一个是制作分布式的序列号生成器. JNDI功能,我们利用Zookeep ...
- 前端框架Bootstrap - 快速搭建网站
Bootstrap简介 Bootstrap是Twitter推出的一个开源的用于前端开发的工具包.是一个CSS/HTML/JavaScript框架.Bootstrap是基于HTML5和C ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十)
下面修改最为关键的matchRun方法里的代码: CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{ _finishedCou ...
- 使用GDAL工具对FY3系列卫星数据进行校正
本文档主要对如何使用GDAL提供的工具对FY3系列卫星数据进行校正处理.FY3系列卫星提供的数据一般是以HDF5格式下发,一个典型的FY3A和FY3B的数据文件名如下: FY3A_MERSI_GBAL ...
- jquery sortable的拖动方法内容说明和示例详解(转载http://www.jb51.net/article/45803.htm)
所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象 ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象 u ...
- Weka 算法大全
关联规则挖掘 (一) Apriori (二) FilteredAssociator (三) FPGrowth (四) GeneralizedSequentislPatterns (五) Pr ...
- Spring AOP (二)
下面介绍@AspectJ语法基础 一.切点表达式函数 AspectJ的切点表达式由关键字和操作参数组成,如execution(* greetTo(..)) 的切点表达式,execution为关键字,而 ...
- LM**项目开发感悟
LM**项目开发感悟 经过一个多月的项目开发,自己主要负责服务端业务逻辑的实现.服务端采用纯servlet完成,自己是在已有的项目架构上进行编程,对于所使用的架构,自己还没有认真的研究过,但明白其用到 ...
- android 自定义gallerey并实现预览功能
自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gal ...
- Linux - mail
使用者邮件信箱: mail 使用 wall, write 毕竟要等到使用者在在线才能够进行,有没有其他方式来联络啊? 不是说每个 Linux 主机上面的用户都具有一个 mailbox 吗? 我们可否寄 ...