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体积的书写习惯的更多相关文章

  1. 最佳实践 —— 详细谈谈如何减小APK体积

    转载请注明出处: http://www.cnblogs.com/soaringEveryday/p/5254520.html 随着Android移动开发的需求越来越复杂,我们不可避免的遇到发布出去的a ...

  2. 减小delphi体积的方法

    1.关闭RTTI反射机制  自从Delphi2010中引入了新的RTTI反射机制后,编译出来的程序会变得很大,这是因为默认情况下 Delphi2010 给所有类都加上了反射机制.而我们的工程并不每每都 ...

  3. Jmeter(六)Jmeter脚本包含要素及书写习惯

    Jmeter有丰富的组件,逻辑控制器.配置原件.Sampler.定时器.前置处理器.后置处理器.断言.监听器:而编写脚本一定要养成个人习惯,让人看到Jmeter的脚本目录结构树能够一目了然:因此,首先 ...

  4. Docker减小镜像体积

    导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...

  5. 使用--gc-section编译选项减小程序体积

    本周在给程序添加功能的时候,突然发现,我只是写了几个函数,还没调用,size就变大了.这肯定是不行的嘛,没用的函数就应该不链接进来,占用我宝贵的空间. 这种功能,讲道理编译器肯定要支持的,于是搜了一下 ...

  6. 减小ipa体积之删除frameWork中无用mach-O文件

    最近项目末期, 我们团队为了ipa的大小使用不少的体积减小的方法, 除了一些常规的方法之外, 我分享一下自己研究出来的新思路. 首先我们来简单的介绍一下mach-O. 什么是mach-O? Mach- ...

  7. Android Studio如何减小APK体积

    最近在用AndroidStudio开发一个小计算器,代码加起来还不到200行.但是遇到一个问题,导出的APK文件大小竟然达到了1034K.这不科学,于是就自己动手精简APK.下面我们大家一起学习怎么缩 ...

  8. 减小Cookie体积

    HTTP coockie能够用于权限验证和个性化身份等多种用途.coockie内的有关信息是通过HTTP文件头来在webserver和浏览器之间进行交流的.因此保持coockie尽可能的小以降低用户的 ...

  9. php代码书写习惯优化小结

    (1)使用 static 静态方法比普通方法快4倍(2)echo输出快于print(3)连接字符使用 , 代替 .(4)循环之前先取出最大值,而不是在循环里面取值    正确的方法      $max ...

  10. 好的js书写习惯

    1:单一判断 bad if (result) { console.log("秋叶"); } if (!result) { console.log("秋叶"); ...

随机推荐

  1. poj1163 the triangle 题解

    Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a progr ...

  2. 认真学习CSS3-问题收集-101号-莫名其妙的row行高

    其他人都有事情,有些事情只好自己上阵,自己做,最踏实! 做了两个基本一样的页面,都是采用bootsrap+jquey+js的技术,业务内容就是简单的查询,加上一些简单的效果,没有啥特别的内容. 由于历 ...

  3. 初识 SpringMVC,运行配置第一个Spring MVC 程序

    1. 初识 SpringMVC,运行配置第一个Spring MVC 程序 @ 目录 1. 初识 SpringMVC,运行配置第一个Spring MVC 程序 1.1 什么是 MVC 2. Spring ...

  4. python重拾第十一天-RABBITMQ队列

    安装python rabbitMQ module pip install pika 官网 https://pypi.python.org/pypi/pika 安装rabbit-server服务,cen ...

  5. 【Ubuntu 1】ubuntu的软件包及便携系列 记录

    目录 命令行补充[备注记录] 不想每次---- source /devel/setup.bash sudo chomd 777 /dev/ttyUSB* 安装区 --- 强推!Synergy Chro ...

  6. Spring Cloud提供者actuator依赖

    <!-- actuator依赖 --> <dependency> <groupId>org.springframework.boot</groupId> ...

  7. react上传文件显示上传进度

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.在使用react, vue框架的时候, 如果需要监听文件上传可以使用axios里的onUploadPro ...

  8. css浅谈Flex布局

    1.打开Flex布局 .box{ display: flex; } 2.容器的属性 flex-direction flex-wrap flex-flow justify-content align-i ...

  9. [oeasy]python0053_ 续行符_line_continuation_python行尾续行

    续行符与三引号 回忆上次内容 上次还是转义序列 类型 英文 符号 \a bell 响铃 \b backspace 退格 \t tab 水平制表符 \v vertical tab 垂直制表符换行不回车 ...

  10. git操作之一:git add/commit/init

    在日常的开发中,适用版本控制系统来进行协同开发已经是工作中的常态,使用比较多的要数git这个工具,今天就来说下git的日常用法以及在开发中的一些疑惑. 一.概述 git在日常开发中广泛应用,其概念可以 ...