最近在使用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. C# git忽略文件 (.gitignore )

    # Visual Studio # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific fi ...

  2. R语言两自定义矩阵的基本运算-实例

    #sink("matrix_history.txt") cat("请输入矩阵的行和列数,“,”号隔开,建议行 等于列 数:") number<-scan( ...

  3. Win10导出查看删除已安装的证书

    1.控制面板中搜索证书 2.点击管理用户证书或管理计算机证书,即可查看所有安装好的证书 3.双击即可查看证书,右键证书即可删除无效的证书 4.搜索证书,比如百度用到的根证书是GlobalSign Ro ...

  4. Python连载18-closure闭包解释及其注意点

    一.闭包 1.定义:当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回的函数之中,这种结果,叫做闭包. 2.例子:连载17中 ...

  5. 队列和 BFS —— 栈和 DFS

    队列和 BFS: 广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径. 示例 这里我们提供一个示例来说明如何使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径. 洞悉 ...

  6. MySQL锁表查询SQL

    // 查看进程 SHOW PROCESSLIST; // 查看是否锁表 SHOW OPEN TABLES WHERE In_use > 0; // 查看正在锁的事务 SELECT * FROM ...

  7. CD 基金会、Jenkins、Jenkins X、Spinnaker 和 Tekton 的常问问题

    转载:https://mp.weixin.qq.com/s/bQLqGrCM9NZYI0Njlu4N-w FAQ 什么是持续交付(CD)? CD是一种软件工程方法,团队在短周期内生成软件,确保软件可以 ...

  8. CSS教程详解

    CSS学习笔记 一.CSS基础 1.CSS简介 层叠:一层一层的: 样式表:很多的属性和样式 CSS语法: <style> 选择器 { 属性名:属性值; 属性名:属性值; ……  } &l ...

  9. PHP导出文件到csv函数

    PHP导出文件到CSV函数 function exportCSV($data=array(),$title=array(),$filename) { $encoded_filename = urlen ...

  10. SQL学习笔记之 数据库基础(一)

    数据库基础 数据库系统的组成:由数据库,数据库管理软件,数据库管理员DBA,支持数据库系统的硬件和软件组成,其中数据库管理员是对数据库进行规划.设计.维护.和监视的专业管理人员,在数据库系统中起着非常 ...