zoukankan      html  css  js  c++  java
  • 减小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
  • 相关阅读:
    HTML的BODY内标签介绍
    前端HTML基础和head部分
    pymysql模块
    数据库基础五
    数据库基础四
    数据库基础三
    数据库基础二
    数据库基础一
    洛谷P5055 可持久化文艺平衡树 (可持久化treap)
    BZOJ
  • 原文地址:https://www.cnblogs.com/qiyuexin/p/14186027.html
Copyright © 2011-2022 走看看