第一讲:蓝桥杯过渡

第一讲:蓝桥杯过渡

5种常用命名法对比

命名法 特点 适用场景 示例
:snake: 蛇形命名法 单词间用下划线分隔,全小写 变量、函数名、文件命名 sensor_data_count
:two_hump_camel: 驼峰命名法 首单词小写,后续首字母大写 变量、函数名(主流) systemTickCount
:classical_building: 帕斯卡命名法 每个单词首字母大写 结构体、类名、类型定义 PointCoordinate
:hungary: 匈牙利命名法 类型前缀+描述(较老) 老项目维护,不推荐新项目 bStatus (b=byte)
:input_latin_uppercase: 全大写命名法 全大写,下划线分隔 宏定义、常量 MAX_BUFFER_SIZE

命名注意事项

  1. :cross_mark: 避免保留字冲突

    // 错误示范
    int register;      // ❌ register是C关键字
    char volatile;     // ❌ volatile是C关键字
    // 正确示范
    int reg_value;     // ✅
    char status_flag;  // ✅
    
  2. :straight_ruler: 长度适中原则

    // 太长 ❌
    uint16_t the_current_temperature_of_the_system_in_degree_celsius;
    // 适中 ✅
    uint16_t system_temp;      // 系统温度
    uint16_t cpu_temp;         // CPU温度
    
  3. :light_bulb: 语义清晰优先

    // 模糊 ❌
    void func1(void);          // 这是什么功能?
    int a, b, c;               // 这些代表什么?
    // 清晰 ✅
    void led_blink(void);      // LED闪烁功能
    int adc_value, pwm_duty;   // ADC值,PWM占空比
    
  4. :bullseye: 一致性原则

    // 不一致 ❌
    int sensorData;      // 驼峰
    float temperature_value;  // 蛇形
    // 一致 ✅
    int sensorData;           // 全驼峰
    float temperatureValue;   
    // 或者
    int sensor_data;          // 全蛇形
    float temperature_value;
    

三种开发方式对比

1.:wrench: 寄存器开发从种小麦开始

特点:直接操控硬件,最底层,完全控制

GPIO点灯示例 (STM32):

// 使能GPIOA时钟
RCC->APB2ENR |= (1 << 2);  
// 配置PA5为推挽输出
GPIOA->CRL &= ~(0xF << 20); 
GPIOA->CRL |= (0x3 << 20);  

// 主循环
while (1) {
    GPIOA->BSRR = (1 << 5);  // PA5置高,点亮LED
    for (int i = 0; i < 100000; i++); // 延时
    GPIOA->BRR = (1 << 5);   // PA5置低,熄灭LED
    for (int i = 0; i < 100000; i++); // 延时
}

2.:package: 标准库开发买面包片自己做

特点:厂商提供的封装库,平衡性能与效率

GPIO点灯示例 (STM32标准库)

void GPIO_Config(void) {
    GPIO_InitTypeDef GPIO_InitStruct;
    // 使能GPIOA时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    // 配置PA5
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
}

int main(void) {
    GPIO_Config();
    while (1) {
        GPIO_SetBits(GPIOA, GPIO_Pin_5);   // 点亮LED
        for (int i = 0; i < 100000; i++);  // 延时
        GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 熄灭LED
        for (int i = 0; i < 100000; i++);  // 延时
    }
}

3.:rocket: HAL库开发叫外卖三明治 :glowing_star:推荐新手

特点:最高级别封装,配合CubeMX图形化工具

int main(void) {
    HAL_Init();                    // 初始化HAL库
    SystemClock_Config();          // 配置系统时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();  // 使能GPIOA时钟
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    while (1) {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        HAL_Delay(500);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
        HAL_Delay(500);
    }
}