AVRX初步:编译AVRX和运行例子(原创)
最近心血来潮,想要玩玩AVRX,google上搜索AVRX有4000个结果,不过大多是千遍一律的那几篇文章。有一篇被传得很广的文章里面详细的讲了AVRX的安装,但是那是针对 AVRX2.6e 的,现在最新的是AVRX2.6f了,所以那篇文章里面的东西基本就无效了,因为2.6f里面的makefile大不一样。
我用的是WINAVR和atmege8,这里它们为例。
首先,下载解压,注意最好解压到某个盘的根目录,得到四个文件夹:
AvrX -AVRX的核心
Examples -例子
TestCases -修改核心后用来对自己的修改进行测试的,绝大多数情况我们用不着,除非你真的去修改AVRX的源代码。反正我是连看都看不懂,更别提改了。
AvrXserialIO -AVRX串口的头文件和例子。具体我还在研究中。
下面就开始编译AvrX和其例子:
一、编译AvrX:
1.修改AvrX目录里面的makefile,把里面MCU = at90s8515改为MCU = atmega8。//如果你用其他MCU,就按需修改。
2.在命令提示符下进入Avrx目录,使用make命令,编译成功,产生一大堆文件,最重要的是我们要的是其中的avrx.a,这就是编译出的AvrX的内核。
二、编译AvrX的例子:绝大多数人上面两个步骤都搞的定,却倒在了编译例子上。
1.首先,如果使用mega8,要修改例子中的hardware.h,我们在hardware.h可以看到:
#define LED PORTB // Change this per your hardware and jumper setup
#define LEDDDR DDRB //没有问题
#define SWITCH PINA
#define SWITCHP PORTA //有问题,mega8没有A口,之有B、C、D。
所以我们要改成
#define LED PORTB // Change this per your hardware and jumper setup
#define LEDDDR DDRB //没有问题
#define SWITCH PINC
#define SWITCHP PORTC //有问题,mega8没有A口,只有B、C、D。
2.同样,修改例子的makefile:
把里面的:
MCU = atmega128
改为:
MCU = atmega8。//如果你用其他MCU,就按需修改。
3.接下来是难住绝大多数人的问题:serialio.S。
我么可以发现,serialio.S在编译AvrX核心的时候没有被编译,因为他是可选的组建,我们可以不用它,但是例子里面用到了它。
AvrX几年没有更新了,serialio.S对MCU的支持不完全,所以我们不能在mega8里直接使用serialio.S,因为默认的serialio.S里面所定义的寄存器名字和mega8是不兼容的,我们要修改serialio.S使其兼容。
具体方法是:
找到serialio.S文件里如下一段:
#if defined(UCSRB)
# define UCR UCSRB
#endif
#if defined(UCSRA)
# define USR UCSRA
#endif
#if defined(UCSR0B)
# define UCR UCSR0B
#endif
#if defined(UCSR0A)
# define USR UCSR0A
#endif
#if defined(UDR0)
# define UDR UDR0
#endif
#if defined(UBRR0L)
# define UBRR UBRR0L
#endif
在这段代码后面加上:
#if defined(UBRRL)
# define UBRR UBRRL
#endif
搞定了,在命令提示符下进入Examples目录,使用make命令,编译成功,产生一大堆文件,包括我们要的hex,cof等等,这就是编译出的AvrX的例子。
例子有五个:
Timers.c - Shows how to set up the AvrX Timer Queue mechanism,
start timers and wait for them.
Messages.c - Application showing the use of multiple messages to
communicate between applications
MessageAndData.c
- Application showing the use of data structure tacked
on to a message for passing information between processes.
MessageTimers.c - Application showing the use of EVENTS
to implement an asyncronous timeout while waiting for a
message.
MessageTimersAlt.c - an alternate way to structure the code.
下载Timers到mege8运行(注意,这里所有例子都使用8m内部RC振荡),在PB0和PB1上接上LED,可以看到PB0和PB1的引脚电平按时变化。
至此结束。 应该穿裤子,标记一下 喜欢笔记 留个记号 谢谢 MARK! 标记 吐心之作,谢谢! 难得有说的这么清楚的一篇文章,谢谢 回复【楼主位】miaow1988
-----------------------------------------------------------------------
请求编译生成库文件(在修改完Makefile文件后的运行make gcc)具体步骤,希望给截图加步骤, 谢谢,给出详细的操作步骤,终于可以编译,运行了. 本帖最后由 jinshaopu 于 2014-7-7 09:53 编辑
看样子是要挖坟了 只是我按上面步骤操作怎么
serialio.s:272:constant value required
serialio.s:291:constant value required
serialio.s:302:constant value required
serialio.s:321:constant value required
serialio.s:325:constant value required
页:
[1]