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 ...
随机推荐
- 使用WakeLock使Android应用程序保持后台唤醒
在使用一些产品列如微信.QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了.但是,一般情况下手机锁屏后,Android系统为了省电以及减少CP ...
- OC利用ijkplayer框架按照步骤集成实现电视直播
一. 下载ijkplayer ijkplayer下载地址:https://github.com/Bilibili/ijkplayer 下载完成后解压, 解压后文件夹内部目录如下图: ijkplayer ...
- Mahout系列之----距离度量
x = (x1,...,xn) 和y = (y1,...,yn) 之间的距离为 (1)欧氏距离 EuclideanDistanceMeasure (2)曼哈顿距离 ManhattanDis ...
- Swift的基础之UILabel控件
对于UILabel的相关内容,其他控件可以相似创建 //设置全局变量,将下面的 let 去掉,然后替换即可 //var myLabel = UILabel(); //系统生成的view ...
- Android的fuzz测试技术之符号执行浅谈-android学习之旅(82)
简单的漏洞越来越少,需要改进目前的方法 : 通过符号执行,得出执行路径,然后在进行fuzzy是较为有效的方法之一 1)为待测单元自动地生成可到达的测试数据,即提高测试目标的覆盖率 2)根据特定的漏洞模 ...
- OC语言(二)
十.匿名对象 即不将对象赋给指针,而是直接使用 注意new对象的时候要用[ ]嵌套 例如:[[Car new] run]; 十一.枚举书写规范 注意空格 //注视 typedef enum { } X ...
- Learning ROS for Robotics Programming Second Edition学习笔记(九) indigo Gazebo rviz slam navigation
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 书中三维环境gazebo,slam的仿真例子 --$ r ...
- Android Bootloader LittleKernel的两篇文章
Android 开发之 ---- bootloader (LK) LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程 ...
- Android性能优化典例(二)
1.使用 Maven 依赖方案代替使用导入jar包方案 如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推 ...
- Linux下的 .o、.a、.so文件
http://blog.sina.com.cn/s/blog_656681710100qzmy.html 工程里很多函数只是有声明,找不到实现的代码.因为那些实现代码已经编译成库所以看不见,我所看见的 ...