最近ac6.9コンパイラの使用は、コンパイル速度が非常に速く、コンパイラAC5よりHAL STM32ライブラリのコンパイル速度を使用して、本当に速いです。
試験本明細書STM32バイト整列されたコードのテストは、構造は、主にシミュレーション環境で同時に印刷最も使用される項目の実際の構造。
AC5テストの結果:
CC_ARM_AC5の#ifdef
AC5コンパイラ、1以外//この実施形態では、構造体の構造体の長さは方法を整列していない、変数のそれぞれの長さであり
__packed _li_stのtypedef構造体
{
// 1番目; uint8_t A
uint16_tのB; // 2
uint32_t C; // 4ヶ月
uint64_tをD; // 8ヶ月
} li_st;
構造// AC5コンパイラ2は、構造の長さ方法に位置合わせし、各変数の長さは、そのされていない
のtypedef構造体_li_st_2
{
uint8_t。 1件の@
uint16_tのB; // 2番目
のuint32_tにC; // 4番目
uint64_tをD; // 8番目
}属性は、__ __((__ packed__))li_st_2;
//)4バイトに、同じ8バイトに整列して指定することができ。
構造体student_4Bのtypedef
{
文字名[7]; // + 1 = 8 7。
のuint32_tのID; // 4。
チャー件名[5]; // + 3 = 8 5。。
} __attribute __((整列(4))。)li_st_4B。
#pragmaパック(1)/ * 1バイトアライメントとして指定3 /。
typedefは構造体_li_st_1B
{
A uint8_t; // 1番目
uint16_tのB; // 2番目
のuint32_t C; // 4番目
uint64_tをD; // 8番目
li_st_1B};
の#pragmaパック()/ *割り当て解除整列し、デフォルトのアラインメントを復元* /
の#pragmaパック(2)/ 2 *バイトアライメントで指定* /
typedefは構造体_li_st_2B
{
チャーB;
INT A、
ショートC;
} li_st_2B;
の#pragmaパック()/ *割り当て解除揃え、デフォルトの配置を復元します* /
次のようにテスト結果は以下のとおりです。
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 () /*取消指定对齐,恢复缺省对齐*/