最近在使用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两个编译器下的字节对齐操作方法的更多相关文章

  1. Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  2. Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  3. Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  4. Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  5. Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  6. Keil MDK STM32系列(六) 基于抽象外设库HAL的ADC模数转换

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  7. Keil MDK STM32系列(八) STM32F4基于HAL的PWM和定时器输出音频

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  8. Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  9. Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

随机推荐

  1. JAVA的addAll方法

    List和collections工具类都有这个方法!

  2. Note | MATLAB

    目录 1. 读写文件 简单读写 将rgb保存为yuv文件 从yuv文件中读取Y通道 将TIFF图片拼接为yuv文件 2. 字符串操作 3. 画图 4. 词频统计 1. 读写文件 简单读写 fp = f ...

  3. HTTP协议第一篇:三握手解读

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  4. (四十二)golang--协程之间通信的方式

    假设我们现在有这么一个需求: 计算1-200之间各个数的阶乘,并将每个结果保存在mao中,最终显示出来,要求使用goroutime. 分析: (1)使用goroutime完成,效率高,但是会出现并发/ ...

  5. Windows Terminal (Preview)治好了cmd,powershell的癌症

    前言 话说n年前,我想开发一款powershell麻将游戏,但是发现命令行下无法显示麻将牌这种特殊符号. 经过研究发现,这是4字节的utf16le字符串.而powershell依赖的渲染引擎,只能渲染 ...

  6. redis命令之 ----Set(集合)

    SADD SADD key member [member ...] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略. 假如 key 不存在,则创 ...

  7. Kafka学习笔记之Kafka High Availability(上)

    0x00 摘要 Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务.若该Broker永 ...

  8. ADFS登录界面自定义

    最近在做identityServer3+ADFS 实现域账号第三方授权验证,发现一个问题,在我们网站跳转到域账户登录页面,这个页面有点不美观,那么我们改如何自定义这个登录界面呢? ADFS安装配置这里 ...

  9. Python-- easy_install 的安装

    http://peak.telecommunity.com/dist/ez_setup.py 将这里面的复制出来打包成ez_setup.py 然后cmd到目录下,直接输入ez_setup.py 可能会 ...

  10. OSI七层模型简述

    一.OSI七层参考模型 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model ...