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. 如何搭建私有的ChatGPT服务

    背景 是这样的,我们几个朋友众筹共享一个chatGPT4 Plus账号,且不想多人公用一个账号登录使用web版,想大家各自搞个本地的ChatGPT客户端,共用一个api-key. 我找了一圈,决定使用 ...

  2. Oh-My-Zsh 提示符只显示当前路径,不需要修改主题文件

    我真是服了.就这么一个简单的小问题我在网上找了一个多小时,一大堆 CSDN 文章都是抄 同一篇博客 的教程,所有的博客都要我去把 ~/.oh-my-zsh/themes/*.zsh-theme 文件里 ...

  3. cv2 判断图片是冷还是暖

    把图片的颜色空间转为HSV H表示色调(下图横轴), 图片的平均H值可用于区分冷暖

  4. STM32 CubeMX 学习:05-串口

    --- title: mcu-stm32-cube-05-using-serial.md date: 2020-03-09 10:37:34 categories: tags: - stm32 - c ...

  5. FSCTF 2023(公开赛道)WP

    FSCTF 2023 ID:Mar10 Rank:6 总结:下次看到不正常报错一定重新安装一遍工具~~ web 源码!启动! 就在源码注释里 <!-- 师傅们,欢迎来到CTF的世界~ NSSCT ...

  6. 浅谈地址,section,vstart

    地址:地址只是数字,描述各种符号在源程序中的位置,它是源代码文件中各符号偏移文件开头的距离.由于指令和变量所占内存大小不同,故他们的偏移量参差不齐.由编译器给各符号编址,编译器给程序中各符号(变量名和 ...

  7. 【解决方案】智能UI自动化测试

    你的UI自动化追得上业务的变更和UI更迭吗?当今瞬息万变的时代,成千上万的App围绕着现代人生活的点点滴滴.为了满足用户的好的体验和时刻的新鲜感,这些App需要时刻保持变化,也给 UI自动化落地实施带 ...

  8. WebAPI规范设计——违RESTful

    本文首先简单介绍了几种API设计风格(RPC.REST.GraphQL),然后根据实现项目经验提出WebAPI规范设计思路,一些地方明显违反了RESTful风格,供大家参考! 一.几种设计风格介绍 1 ...

  9. 自写ApiTools工具,功能参考Postman和ApiPost

    近日在使用ApiPost的时候,发现新版本8和7不兼容,也就是说8不支持离线操作,而7可以. 我想说,我就是因为不想登录使用才从Postman换到ApiPost的. 众所周知,postman时国外软件 ...

  10. 写写stream流的终结操作

    终结操作和中间操作的区别:中间操作返回的一直都是stream,所以可以一直使用,但是终结操作返回的不是stream,后面不能继续操作 foreach:对流中的所有元素进行遍历操作 count:获取当前 ...