keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法
最近在使用ac6.9的编译器,编译速度是真的很快,使用stm32的hal库编译速度也比ac5的编译器快很多。
本文试验stm32中字节对齐的代码测试,主要是结构体,因为结构体中实际项目中用到最多,同时在仿真环境中打印出来。
ac5的测试结果:
#ifdef CC_ARM_AC5
//该方式只是使用ac5编译器,结构体不对齐的方式1,结构体的长度,就是各个变量长度的和
__packed typedef struct _li_st
{
uint8_t a; //1个
uint16_t b; //2个
uint32_t c; //4个
uint64_t d; //8个
}li_st; //ac5编译器的结构体不对齐的方式2,结构体的长度,就是各个变量长度的和
typedef struct _li_st_2
{
uint8_t a; //1个
uint16_t b; //2个
uint32_t c; //4个
uint64_t d; //8个
}__attribute__((__packed__)) li_st_2; //)到4字节,同样可指定对齐到8字节。
typedef struct student_4B
{
char name[7]; //7+1=8
uint32_t id; //4
char subject[5]; //5+3=8
} __attribute__((aligned(4))) li_st_4B; #pragma pack (1) /*指定按1字节对齐方式3*/
typedef struct _li_st_1B
{
uint8_t a; //1个
uint16_t b; //2个
uint32_t c; //4个
uint64_t d; //8个
}li_st_1B;
#pragma pack () /*取消指定对齐,恢复缺省对齐*/ #pragma pack (2) /*指定按2字节对齐*/
typedef struct _li_st_2B
{
char b;
int a;
short c;
}li_st_2B;
#pragma pack () /*取消指定对齐,恢复缺省对齐*/
测试结果如下:
ac6的测试结果:
#elif (CC_ARM_AC6) //ac6 ac5通用,的结构体不对齐方式,结构体的长度,就是各个变量长度的和
typedef struct _li_st_ac6
{
uint8_t a; //1个
uint16_t b; //2个
uint32_t c; //4个
uint64_t d; //8个
}__attribute__((packed)) li_st_ac6 ; //ac6 ac5通用,的结构体不对齐方式2,结构体的长度,就是各个变量长度的和
#pragma pack (1) /*指定按1字节对齐*/
typedef struct _li_st_ac6_1B
{
uint8_t a; //1个
uint16_t b; //2个
uint32_t c; //4个
uint64_t d; //8个
}li_st_ac6_1B;
#pragma pack () /*取消指定对齐,恢复缺省对齐*/ //ac6 ac5通用,下面的定义和8字节一样的大小,主要看内存分布
#pragma pack (4) /*指定按4字节对齐*/
typedef struct _li_st_ac6_4B
{
uint8_t a; //1个 + 1
uint16_t b; //2个
uint32_t c; //4个
uint64_t d; //8个
}li_st_ac6_4B;
#pragma pack () /*取消指定对齐,恢复缺省对齐*/
keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法的更多相关文章
- Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(六) 基于抽象外设库HAL的ADC模数转换
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(八) STM32F4基于HAL的PWM和定时器输出音频
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
随机推荐
- JAVA的addAll方法
List和collections工具类都有这个方法!
- Note | MATLAB
目录 1. 读写文件 简单读写 将rgb保存为yuv文件 从yuv文件中读取Y通道 将TIFF图片拼接为yuv文件 2. 字符串操作 3. 画图 4. 词频统计 1. 读写文件 简单读写 fp = f ...
- HTTP协议第一篇:三握手解读
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- (四十二)golang--协程之间通信的方式
假设我们现在有这么一个需求: 计算1-200之间各个数的阶乘,并将每个结果保存在mao中,最终显示出来,要求使用goroutime. 分析: (1)使用goroutime完成,效率高,但是会出现并发/ ...
- Windows Terminal (Preview)治好了cmd,powershell的癌症
前言 话说n年前,我想开发一款powershell麻将游戏,但是发现命令行下无法显示麻将牌这种特殊符号. 经过研究发现,这是4字节的utf16le字符串.而powershell依赖的渲染引擎,只能渲染 ...
- redis命令之 ----Set(集合)
SADD SADD key member [member ...] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略. 假如 key 不存在,则创 ...
- Kafka学习笔记之Kafka High Availability(上)
0x00 摘要 Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务.若该Broker永 ...
- ADFS登录界面自定义
最近在做identityServer3+ADFS 实现域账号第三方授权验证,发现一个问题,在我们网站跳转到域账户登录页面,这个页面有点不美观,那么我们改如何自定义这个登录界面呢? ADFS安装配置这里 ...
- Python-- easy_install 的安装
http://peak.telecommunity.com/dist/ez_setup.py 将这里面的复制出来打包成ez_setup.py 然后cmd到目录下,直接输入ez_setup.py 可能会 ...
- OSI七层模型简述
一.OSI七层参考模型 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model ...