第11步GCC编译器和工具
要编译C和C + +程序,你将需要一个支持,包括AVR-GCC,AVR-libc的C库和AVR-binutils。分别安装这些是困难的。幸运的是,我们有所有主要平台完整的易于安装的软件包。
Mac OS X
下载AVR MacPack。MacPack磁盘映像有一个安装程序。此前可能需要输入以下命令(在终端中),选择gcc版本与Teensy工作。
avr-gcc-select 4
Linux操作系统,Ubuntu8.10
Ubuntu提供安装包,所以你可以只使用此命令安装。
sudo apt-get install gcc-avr binutils-avr avr-libc
Windows XP和Vista
下载WinAVR,你可以安装这个程序,里面有你所需要的东西。
使用make进行编译Blinky
现在,您已经安装成功编译器,第一步是要编译一个。HEX文件,你可以放到你的Teensy中使用Teensy装载机blinky。当然如果你跳过前面的步骤,您就需要使用。HEX文件来创建到你安装的Teensy装载机中。
Make是一个命令行程序自动运行的编译器和其它相关的程序来执行所有必要的步骤来编译你的。HEX文件。幸运的是,使用起来非常简单。只需要在命令提示符下输入“make”。
在Windows XP或Vista中,你需要运行“命令提示符”,在“开始”菜单下的“所有程序” - >“附件”。在Mac OS X运行终端,这是在应用程序/实用中。Linux系统有许多方法来访问命令行。在所有系统中,命令行的工作方式基本相同。
命令行界面访问,这通常是一个单独的目录中所示的提示。您可以键入“cd”命令来改变这个目录。如果你觉得输入命令麻烦,可以只是使用哪个目录的通知和放置blinky的文件在该位置。例如,在下面的截图中的目录是“C:\Documents and Settings\me”把blinky.zip文件复制到该位置。
只要输入,它就会执行然后给你详细的信息。
通常情况下,当你运行make,如果你看到的结束时,你已经得到了。HEX文件,你只需按下按钮,(如果Teensy装载机是在自动模式下)几秒钟内你的新编译代码就开始运行了!
在莫尔斯电码的LED Blinky闪烁时,你应该看到莫尔斯电码消息模式在Blinky开始运行时显示的。
总结通常是值得一读的。在这个例子中,“text”是1926个字节,“data”为0,并且“bss”是3个字节。“分解”和“(十六进制)”是这些数目的总和。那么,这些名字到底意味着什么?
输出项 | 解释 |
text | 编译的C代码,在闪存中 |
data | 在启动时,Flash和RAM被初始化的变量 |
BSS | RAM变量在启动时是零 |
只需添加文本和数据的号码使用的快闪记忆体。Teensy Loader也以百分比的形式显示了你的HEX文件占用的比例。
RAM的使用了解是比较困难的。被放置在RAM中的开头数据和bss变量。局部变量,函数调用的返回地址和临时interrrupt例程使用的内存是分配在栈上的最高RAM地址开始向下增长,有没有简单的方法来知道到底有多少内存的堆栈被使用。 TODO:写一个单独的页面有关此主题的方法来估计堆栈的使用...
了解Makefile
当你运行时,它会读取一个文件名为“Makefile”文件说明来建立你的代码。Makefile文件可以用任何文本编辑器进行编辑。这是复杂的,但幸运的是只有一些非常简单的设置对于大多数项目来说需要进行编辑。
该文件的开头附近,你会发现这些定义。目标是您的项目的名称。您可能需要一个更好的名字“blinky”。
# Target file name (without extension). TARGET = blinky
SRC是所有的源文件的列表。一般有3个步骤组织你的程序放到不同的文件。
1.相关函数可以划分为单独的文件,通常是你不需要麻烦视他们为你编辑其他代码。
2.使检测哪些文件已经改变,只有重新编译那些,减少总编译时间增量变化。
3.代码下载,通过这个网站和其他人来作为单独的C文件。 将它们添加到你的Makefile的最简单方法是使用它们。 特别是如果C代码更新,让它独立于他人会使取代旧的版本比你更容易复制粘贴代码到一个巨大的文件。
#3是令人注目的!
# List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c \ usb_debug_only.c
当您添加更多的文件到您的项目中,包括在此列表中的一个。反斜杠“\”的行结束意味着下一行SRC列表继续。
一般每个c文件将有一个。h头,你用#包括其他c文件,将调用它的函数或访问其变量。“C依赖关系自动生成”意味着你不需要指定。h文件和。c文件包括他们。make会检查你的代码,并自动学习所有这些。
Blinky源代码详细信息
blinky.c定义中使用LED。
#define LED_CONFIG (DDRD |= (1<<6)) #define LED_ON (PORTD &= ~(1<<6)) #define LED_OFF (PORTD |= (1<<6))
PORTD和DDRD硬件寄存器来控制端口D引脚,这些定义为LED提供了便于识别的名称。使用I / O引脚的详细信息。
遵循几个定义,其中包括一些不寻常的字符串的语法。
void morse_string_P(const char *s); #define morse(s) morse_string_P(PSTR(s))
通常情况下,所有的变量(即使字符串常量)被放置在RAM中。但没有多少可用的RAM和字符串常量是相当浪费的,反正在启动时会初始化RAM的PSTR宏导致字符串被放置在快闪记忆体。按照惯例,在“_P”功能结束,是从闪存中读取,而不是RAM。
Blinky的主循环是很简单的。它只会闪烁“SOS”6次,然后闪烁一个长的并重复。C库提供_delay_ms()函数。
while (1) { for (i=0; i<6; i++) { morse("SOS"); _delay_ms(1500); } morse("DOES ANYBODY STILL KNOW MORSE CODE?"); _delay_ms(4000); }
里面的morse_character()函数,它闪烁莫尔斯电码中的单个字符,有调用usb_debug_putchar(),只是调用usb_debug_putchar()。
if (c < 'A' || c > 'Z') { print("Opps, unsupported character: "); usb_debug_putchar(c); print("\n"); return; }
HID监听程序是用来接收和显示所有的字符。如果您的Teensy是闪烁的莫尔斯电码,现在是时候安装HID监听程序。
评 论
选择昵称后请轻按空格键
请勿进行人身攻击,谩骂以及任何违法国家相关法律法规的言论。