查找特定AVR头文件:atmegaxxm1c1_drv.h的来源与引用方式
问题
我正在改写ATmega32M1的旧代码,想复用部分代码。其中有一处调用了Hard_reset(); // 等待看门狗超时,这个宏定义在atmegaxxm1c1_drv.h文件里,功能是启用看门狗后进入死循环。文件注释显示这是Atmel在2009年由jtellier编写的官方库头文件。
目前这个文件被直接复制到项目主目录,通过#include "atmegaxxm1c1_drv.h"引用,但我觉得它应该像<avr/iom32m1.h>一样由通用头文件间接引用。我在本地AVR头文件目录和网络上只找到一个可疑来源的下载,想问:
- 这个文件的官方来源是什么?
- 正确的引用方式是怎样的?
附文件开头注释(翻译后):
//****************************************************************************** //! @file $RCSfile: atmegaxxm1c1_drv.h,v $ //! //! 版权所有 (c) 2009 Atmel。 //! //! 使用本程序需遵守Atmel的最终用户许可协议。 //! 请阅读license.txt文件了解版权声明。 //! //! @brief 本文件提供AT9megaxxM1/C1设备固有函数的参考信息。这些函数提供对底层处理器操作的直接访问。 //! //! 本文件已通过以下环境验证: //! - AVRStudio 4.15.623, //! - IAR C/C++ Compiler for AVR 5.20.1 (5.20.1.50092) //! //! @version $Revision: 3.00 $ $Name: jtellier $ //! //! @todo //! @bug //******************************************************************************
回答
一、官方来源
atmegaxxm1c1_drv.h是Atmel当年为ATmega/AT9megaXXM1/C1系列MCU发布的专用驱动辅助头文件,属于Atmel官方AVR外设库的一部分,并非AVR-GCC标准头文件集合里的内容。它最初随Atmel Studio(当时名为AVRStudio)的配套设备支持包发布,或者包含在针对该系列MCU的官方示例代码、驱动库压缩包中。
由于Atmel被Microchip收购后,旧版部分小众MCU的专属驱动文件未被整合到主流AVR-GCC头文件仓库,所以常规AVR头文件目录中找不到它。
二、正确的引用方式
1. 保留官方库结构的做法
- 不建议直接修改系统工具链的
include/avr目录(避免后续工具链更新覆盖),更合理的是在项目内单独建立avr_drivers类目录存放该文件,然后在编译选项中添加该目录的头文件搜索路径(比如GCC的-I./avr_drivers),之后用<atmegaxxm1c1_drv.h>或"atmegaxxm1c1_drv.h"引用均可。 - 如果一定要和标准头文件同路径引用,可将文件复制到AVR工具链的
include/avr目录,之后用<avr/atmegaxxm1c1_drv.h>引用。
2. 摆脱小众头文件的替代方案
因为Hard_reset()的核心功能只是启用看门狗后进入死循环,你可以直接自己实现逻辑,无需依赖该旧头文件:
#include <avr/wdt.h> #include <util/delay.h> #define Hard_reset() do { \ wdt_enable(WDTO_15MS); /* 启用最短超时看门狗 */ \ while(1) { _delay_ms(1); } /* 死循环等待复位 */ \ } while(0)
这种方式符合AVR-GCC标准用法,代码更可控,也避免了对小众旧文件的依赖。
内容的提问来源于stack exchange,提问作者Infinite_Maelstrom
相关产品推荐
相关产品推荐

