第一讲:蓝桥杯过渡
5种常用命名法对比
| 命名法 | 特点 | 适用场景 | 示例 |
|---|---|---|---|
| 单词间用下划线分隔,全小写 | 变量、函数名、文件命名 | sensor_data_count |
|
| 首单词小写,后续首字母大写 | 变量、函数名(主流) | systemTickCount |
|
| 每个单词首字母大写 | 结构体、类名、类型定义 | PointCoordinate |
|
| 类型前缀+描述(较老) | 老项目维护,不推荐新项目 | bStatus (b=byte) |
|
| 全大写,下划线分隔 | 宏定义、常量 | MAX_BUFFER_SIZE |
命名注意事项
-
避免保留字冲突// 错误示范 int register; // ❌ register是C关键字 char volatile; // ❌ volatile是C关键字 // 正确示范 int reg_value; // ✅ char status_flag; // ✅ -
长度适中原则// 太长 ❌ uint16_t the_current_temperature_of_the_system_in_degree_celsius; // 适中 ✅ uint16_t system_temp; // 系统温度 uint16_t cpu_temp; // CPU温度 -
语义清晰优先// 模糊 ❌ void func1(void); // 这是什么功能? int a, b, c; // 这些代表什么? // 清晰 ✅ void led_blink(void); // LED闪烁功能 int adc_value, pwm_duty; // ADC值,PWM占空比 -
一致性原则// 不一致 ❌ int sensorData; // 驼峰 float temperature_value; // 蛇形 // 一致 ✅ int sensorData; // 全驼峰 float temperatureValue; // 或者 int sensor_data; // 全蛇形 float temperature_value;
三种开发方式对比
1.
寄存器开发 — 从种小麦开始
特点:直接操控硬件,最底层,完全控制
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.
标准库开发 — 买面包片自己做
特点:厂商提供的封装库,平衡性能与效率
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.
HAL库开发 — 叫外卖三明治
推荐新手
特点:最高级别封装,配合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);
}
}