MDK KEIL笔记

1.编译器优化程序代码段

1
2
3
4
#pragma push
#pragma O0

#pragma pop

1.1.代码优化一: 系统设置优化等级为armcc -O1,如果此时想要一个函数不进行优化或者优化成其他级别,处理如下function2function3 而其他函数保持armcc优化等级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void function1(void){
... // 执行O1优化(来自armcc-O1)
}

#pragma push
#pragma O0
void function2(void){ // 不执行优化
...
}
#pragma pop

#pragma push
#pragma O3
void function3(void){ // 在O3条件下优化
...
}
#pragma pop

void function4(void){
... // 执行O1优化(来自armcc-O1)
}

1.2.代码优化二:系统设置优化等级为armcc -O1,但是部分代码想要设置 O3 优先级

1
2
3
4
5
6
7
8
9
10
11
12
void function1(void){
... // 执行O1优化(来自armcc-O1)
}

#pragma O3 //从该位置设置后,直到该文件结束
void function2(void){
... // 执行自己设置的 O3 编译优化
}

void function3(void){
... // 执行自己设置的 O3 编译优化
}

2.通过编译器设置字节对齐操作

有两种操作:
方法一:

1
pragma pack (n)

方法二:

1
pragma pack (n)

关于BIN、HEX 文件合并

例如bootload程序和应用程序和合并到一起可以使用srec_cat.exe程序:

[程序地址][https://gitcode.com/open-source-toolkit/]

[文档说明][https://srecord.sourceforge.net/]