减小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("秋叶"); ...
随机推荐
- echo输出带颜色的字
文章目录 格式 所有颜色 字体样式 示例 格式 \033[A;F;Bm #放在文本的左边,可以影响后面所有字体的样式 解释: F代表字体颜色值(Font),颜色编号30~37. B代表背景颜色值(Ba ...
- Project Euler 1~10 野蛮题解
这些题都比较简单就不贴代码和做法了 23333333 具体到做法就是枚举暴力,这十题中可能难一点地方的就是筛质数表,可以学习一下 Eratosthenes 筛法或者是欧拉筛. 如果您不会前十题建议好好 ...
- CLR via C# 笔记 -- 数组(16)
1. 数组隐式继承 System.Array,所以数组是引用类型.变量包含的是对数组的引用,而不是包含数据本身的元素. 2. 数组协变性.将数组从一种类型转换为另一种类型. string[] sa = ...
- HDOJ 6703 Array
HDOJ 6703 Array 题目 题目链接 array *Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- 基于 SQLite 3 的 C 学习:1-开发流程 与 基本函数
背景 SQLite 是 一个 常用于 嵌入式平台的 轻量级的 关系型数据库. 我们已经介绍了 移植 SQLite 3 ,这一讲我们来介绍它的开发,这里仅仅涉及最基本的开发. 高级api:https:/ ...
- 记一次RocketMQ消费非顺序消息引起的线上事故
应用场景 C端用户提交工单.工单创建完成之后.会发布一条工单创建完成的消息事件(异步消息).MQ消费者收到消息之后.会通知各处理器处理该消息.各处理器处理完后都会发布一条将该工单写入搜索引擎的消息.最 ...
- python基础-字典dict {key:value }
字典的定义和操作 字典的特性: 元素数量 支持多个 元素类型 key :value key:除字典外的任何类型 Value:任何类型 下标索引 不支持 重复元素 key不支持 可修改性 支持 数据有序 ...
- 超大容量 | 瑞芯微RK3588J工业核心板新增16GB DDR + 128GB eMMC配置!
作为瑞芯微的金牌合作伙伴,创龙科技在2023年9月即推出搭载瑞芯微旗舰级处理器RK3588J的全国产工业核心板--SOM-TL3588. SOM-TL3588工业核心板是基于瑞芯微RK3588J/RK ...
- 手写数字识别-使用TensorFlow构建和训练一个简单的神经网络
下面是一个具体的Python代码示例,展示如何使用TensorFlow实现一个简单的神经网络来解决手写数字识别问题(使用MNIST数据集).以下是一个完整的Python代码示例,展示如何使用Tenso ...
- Less预处理器的使用
练习页面: <body> <div class="div1"> <div class="div2"></div> ...