打印

AVR 工程的疑问

[复制链接]
2211|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
inter_zhou|  楼主 | 2012-3-27 22:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是第一次用AVR的芯片MEG8,MEG16。
找到一个范例工程,很不理解,整个工程里面没有找到关于芯片寄存器地址的定义。
但是可以正常编译通过。

#include <stdint.h>
#include <stdio.h>
#include <math.h>
//#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <stdlib.h>
//#include <ctype.h>
#include <errno.h>
#include <inttypes.h>
#include <setjmp.h>
#include <assert.h>

有包含以上一些文件,但是根本没有找到芯片地址的定义。
请问我改怎么理解

相关帖子

沙发
古道热肠| | 2012-3-27 23:15 | 只看该作者
楼主用的什么C?ICC还是GCC,都应该有个包含通用寄存器地址定义的文件。

使用特权

评论回复
板凳
inter_zhou|  楼主 | 2012-3-27 23:19 | 只看该作者
AVR Stdio+Win AVR
就是没有看到通用寄存器的文件,有点奇怪

使用特权

评论回复
地板
古道热肠| | 2012-3-27 23:24 | 只看该作者
那就是GCC了。发一个写得比较规范的AVR例子给楼主参考一下。

stk500.rar

36.63 KB

使用特权

评论回复
5
古道热肠| | 2012-3-27 23:26 | 只看该作者
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>

上面这个就是IO寄存器的头文件,在项目中选好芯片后,会自动将寄存器位置对应到IO地址上。

使用特权

评论回复
6
walnutcy| | 2012-3-28 08:54 | 只看该作者
1# inter_zhou
有可能是头文件嵌套,你查下avr/sleep.h,或 avr/interrupt.h

使用特权

评论回复
7
inter_zhou|  楼主 | 2012-3-28 10:38 | 只看该作者
谢谢热心回复

使用特权

评论回复
8
inter_zhou|  楼主 | 2012-3-28 10:54 | 只看该作者
找到路径了
在io.h里面:
#elif defined (__AVR_ATmega16__)
#  include <avr/iom16.h>

iom16.h路径
C:\WinAVR-20071221\avr\include\avr

现在又有个疑问:如果我自己写一个.h的文件来定义寄存器的地址。肯定会存在这样的情况,有些寄存器的命名和iom16.h相同,有些不相同,这样就会导致重复定义的问题。如果我自己不写这样的.h文件,我又还需要去iom16.h里面找。这样岂不是很麻烦。

使用特权

评论回复
9
cool_coder| | 2012-3-28 14:51 | 只看该作者
要用好一个芯片和相关的开发工具链,了解寄存器操作是最基本的吧?不知道哪里麻烦了。

使用特权

评论回复
10
古道热肠| | 2012-3-29 11:18 | 只看该作者
AVR芯片的寄存器名基本相同,但位置有差异,尽量用芯片定义好的Io.h来定位寄存器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

272

帖子

0

粉丝