|
我一直以来的理解, c工程中,文件的包含(#include)顺序, 理想状态下, 应该是单向的,
每一层的文件, 被更外层的文件包含和引用, A文件包含B, 那么B就不应该反过来包含A文件
比如硬件驱动文件, 被用户应用文件包含和调用, 那么硬件驱动文件, 就不应该再去包含用户应用的头文件了.
如果硬件驱动层需要调用用户的函数 比如硬件驱动的中断函数执行用户代码 , 就应该使用回调函数方式实现.
但是实际情况是 :使用cube生成的hal库工程, 硬件层的每个文件都在包含main.h.
比如cube生成的adc.c文件,他就在adc.h中包含了main.h, 其中实现了硬件的初始化, MX_ADC1_Init 然后在main.c中,调用了此函数. 这样就成为了双向调用.
在后续编写自己的应用代码My_app.c, 其中又包含adc相关的文件和功能, 然后main函数包含和调用我的应用代码, 这种双向的包含关系就导致了编译出错.
所以,是文件包含的用法不是我理解的这样, 还是cube生成的代码, 对于文件包含的处理并不完善?
|
|