减小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
原文地址:https://www.cnblogs.com/qiyuexin/p/14186027.html