代码组织的思考
2025/9/8小于 1 分钟
关于代码文件的思考
除了main.c外还有那么多.c函数,他们被什么调用?
启动阶段:
- 启动代码(startup_stm32g4xx.s) → SystemInit()(system_stm32g4xx.c) → main()(main.c)。
初始化阶段:
- main() 调用 HAL_Init()、SystemClock_Config()、MX_GPIO_Init() 等初始化函数。
- 调用自定义模块的初始化函数,如 LCD_Init()(lcd.c)、LED_ALL_OFF()(LED.c)。
运行阶段:
- 主循环中调用用户函数:key_Proc()、LCD_Proc()、PWM_Proc()。
- 硬件中断触发:
- TIM2 中断 → TIM2_IRQHandler(stm32g4xx_it.c) → HAL_TIM_PeriodElapsedCallback(main.c)。
- USART1 中断 → USART1_IRQHandler(stm32g4xx_it.c) → HAL_UART_RxCpltCallback(main.c)。
- SysTick 中断 → SysTick_Handler(stm32g4xx_it.c)。
模块间调用:
LED.c、lcd.c 等中的函数由 main.c 或其他模块直接调用。
谁调用这些 .c 文件中的函数?
硬件:通过中断向量表调用中断服务例程(如 stm32g4xx_it.c 中的函数)。
HAL 库:通过回调机制调用用户实现的函数(如 main.c 中的回调)。
用户代码:main.c 或其他 .c 文件通过函数调用直接使用模块化功能。
启动代码:调用系统初始化函数。

