减小code体积的书写习惯
1. 减少使用switch
2. 函数内部尽量使用内部变量,减少使用全局变量的次数
void func(void){
uint32_t sysclk;
... // 其他代码
rccClocks.SYSCLK = sysclk;
#if 1
// Code (inc. data) RO Data RW Data ZI Data Debug Object Name
// 416 34 40 0 28 289466 rcc.o
rccClocks.AHBCLK = sysclk / rccGetAHB_DIV();
#else
// Code (inc. data) RO Data RW Data ZI Data Debug Object Name
// 420 36 40 0 28 289466 rcc.o
rccClocks.AHBCLK = rccClocks.SYSCLK / rccGetAHB_DIV();
#endif
}
3. 尽量使用memset复位较多的数据:
#if 1
//Code (inc. data) RO Data RW Data ZI Data Debug Object Name
// 416 34 40 0 28 289474 rcc.o
memset(&rccClocks, 0, sizeof(rccClocks)); // 与size无关
// 416 34 40 0 28 289474 rcc.o
// memset(&rccClocks, 0, 32);
// 416 34 40 0 28 289474 rcc.o
// memset(&rccClocks, 0, 100);
#else
// Code (inc. data) RO Data RW Data ZI Data Debug Object Name
// 440 36 40 0 28 289486 rcc.o
rccClocks.PLLCLK = 0;
rccClocks.APBCLK[0] = 0;
rccClocks.AHBCLK = 0;
rccClocks.TIMCLK[0] = 0;
rccClocks.APBCLK[1] = 0;
rccClocks.SYSCLK = 0;
rccClocks.TIMCLK[1] = 0;
#endif
// 416 36 40 0 28 289486 rcc.o
rccClocks.PLLCLK = 0;
rccClocks.AHBCLK = 0;
4. 避免使用do-while(0)
#if 0
// 416 34 40 0 28 289470 rcc.o
rccClocks.APBCLK[1] = apbclk;
#elif 0
// 424 36 40 0 28 289482 rcc.o
do {
rccClocks.APBCLK[1] = apbclk;
} while (0);
#elif 0
// 416 34 40 0 28 289478 rcc.o
rccClocks.APBCLK[1] = apbclk;
struct empty {
};
#else
// 416 34 40 0 28 289474 rcc.o
{
rccClocks.APBCLK[1] = apbclk;
};
#endif
可用inline函数替代:
#if 1
// 408 34 40 0 28 289422 rcc.o
static inline uint32_t APB_DIV_SEL(uint32_t n)
{
if (n & 0x04) {
n ^= 0x04;
return (1 << (1 + n));
} else {
return 1;
}
}
#else
// 408 34 40 0 28 289358 rcc.o
# define APB_DIV_SEL(n) (((n)&0x04) ? (1 << (1 + (n ^ 0x04))) : 1)
#endif
#if 0
// 416 34 40 0 28 289466 rcc.o
return (1 << (1 + index));
} else {
return 1;
}
#else
// 416 36 40 0 28 289466 rcc.o
index += 1;
} else {
index = 0;
}
return (1 << index);
#endif
#if 0
// 416 34 40 0 28 289466 rcc.o
index ^= 0x04;
#else
// 420 34 40 0 28 289466 rcc.o
index &= ~0x04;
#endif
减小code体积的书写习惯的更多相关文章
- 最佳实践 —— 详细谈谈如何减小APK体积
转载请注明出处: http://www.cnblogs.com/soaringEveryday/p/5254520.html 随着Android移动开发的需求越来越复杂,我们不可避免的遇到发布出去的a ...
- 减小delphi体积的方法
1.关闭RTTI反射机制 自从Delphi2010中引入了新的RTTI反射机制后,编译出来的程序会变得很大,这是因为默认情况下 Delphi2010 给所有类都加上了反射机制.而我们的工程并不每每都 ...
- Jmeter(六)Jmeter脚本包含要素及书写习惯
Jmeter有丰富的组件,逻辑控制器.配置原件.Sampler.定时器.前置处理器.后置处理器.断言.监听器:而编写脚本一定要养成个人习惯,让人看到Jmeter的脚本目录结构树能够一目了然:因此,首先 ...
- Docker减小镜像体积
导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...
- 使用--gc-section编译选项减小程序体积
本周在给程序添加功能的时候,突然发现,我只是写了几个函数,还没调用,size就变大了.这肯定是不行的嘛,没用的函数就应该不链接进来,占用我宝贵的空间. 这种功能,讲道理编译器肯定要支持的,于是搜了一下 ...
- 减小ipa体积之删除frameWork中无用mach-O文件
最近项目末期, 我们团队为了ipa的大小使用不少的体积减小的方法, 除了一些常规的方法之外, 我分享一下自己研究出来的新思路. 首先我们来简单的介绍一下mach-O. 什么是mach-O? Mach- ...
- Android Studio如何减小APK体积
最近在用AndroidStudio开发一个小计算器,代码加起来还不到200行.但是遇到一个问题,导出的APK文件大小竟然达到了1034K.这不科学,于是就自己动手精简APK.下面我们大家一起学习怎么缩 ...
- 减小Cookie体积
HTTP coockie能够用于权限验证和个性化身份等多种用途.coockie内的有关信息是通过HTTP文件头来在webserver和浏览器之间进行交流的.因此保持coockie尽可能的小以降低用户的 ...
- php代码书写习惯优化小结
(1)使用 static 静态方法比普通方法快4倍(2)echo输出快于print(3)连接字符使用 , 代替 .(4)循环之前先取出最大值,而不是在循环里面取值 正确的方法 $max ...
- 好的js书写习惯
1:单一判断 bad if (result) { console.log("秋叶"); } if (!result) { console.log("秋叶"); ...
随机推荐
- Jenkins从github拉取项目,github有更新,自动进行构建,实现自动集成
使用git之前的准备工作 1. 搭建Jenkins的机器上,有安装git,配置git的安装地址,Jenkins配置Git的安装地址 2. Global Tool Configuration - > ...
- Masonry的进阶使用技巧
Masonry是iOS开发中常见的视图约束框架,但是有人对他的使用还是浅尝辄止,接下来会提出几点比较少见但是又十分便捷的使用技巧. mas_greaterThanOrEqualTo mas_great ...
- Android系统启动:.rc文件
Android系统启动:.rc文件 reference : https://www.jianshu.com/p/a4c17f0110d0 以init.rc为例. .rc文件 init.rc文件由系统第 ...
- STM32 CubeMX 学习:003-定时器
背景 上一讲 STM32 CubeMX 学习:外部中断的使用 介绍了如何配置以及操作GPIO外部中断. 这一讲我们介绍定时器的有关概念,并对其中一种进行示范. HOST-OS : Windows-10 ...
- typora markdown笔记
前言 此为个人markdown笔记,不定时更新. 正文 1. mermaid 使用 横向流程图 源码 graph LR a(起始)-->b(中间) b-->c1<-->d b- ...
- Spring之拦截器和过滤器
Spring拦截器 拦截器简介 Spring拦截器是一种基于AOP的技术,本质也是使用一种代理技术,它主要作用于接口请求中的控制器,也就是Controller. 因此它可以用于对接口进行权限验证控制. ...
- Mac VMware Fusion 11.5 虚拟机带密钥
虚拟机 链接: https://pan.baidu.com/s/19V20p5ZV-1U5lFNHrotLgw 密码: rdun CentOS 6.5 链接: https://pan.baidu.co ...
- flutter 一直卡在Running Gradle task 'assembleDebug'...运行不起来
大概率只有一个原因:gradle下载不完整! 要想办法让他下载完整! 解决方法: 方法一:修改远程maven仓库地址(2024.7.9下列地址可用) repositories{ maven{ url' ...
- 通过canvas计算任意两个颜色的插值
通过canvas可以协助我们做很多颜色计算的辅助,比如颜色转换,渐变颜色计算. 对于颜色转换,之前写过一篇文章:<通过canvas转换颜色为RGBA格式及性能问题> , 读者可以查阅该篇文 ...
- [oeasy]python0128_unicode_字符集_character_set_八卦_星座
unicode 回忆上次内容 中国的简体和繁体汉字 字符数量都超级大 彼此还认对方为乱码 如果有一种编码所有的字符都能编进去就好了 中日韩(CJK) 欧洲拼音 梵文 阿拉伯文 卢恩字符 等等等都包 ...