本帖最后由 whtwhtw 于 2018-11-12 09:43 编辑
每个人的中断任务是不同的,为了统一标准,就定义了这个中断回调函数。HAL库标准就是不管是谁写的中断函数,都统一调用这个函数,具体某个人要执行什么任务,自己在回调函数中写任务就行了,而不必修改中断函数。这样子库函数就独立出来了。
比如stm32f1xx_hal_adc.c库文件中void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc)中断就调用了HAL_ADC_ConvCpltCallback(hadc)。而HAL_ADC_ConvCpltCallback(hadc)函数是在库里定义了的:__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)。为啥库函数里定义的函数要加__weak?这个__weak是弱定义的意思,就是如果用户如果没有定义该函数,中断就调用库函数中的该函数,如果用户定义了一个不含__weak的同名的回调函数void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc),那么中断中就调用用户的函数而忽略库函数中的函数。这样做就不需要修改函数库,既保证了函数库的完整性,又增强了用户的灵活性。
|