1
0
Fork 0

arduino-0018-windows

This commit is contained in:
orange 2010-03-30 21:53:44 +02:00
parent 157fd6f1a1
commit f39fc49523
5182 changed files with 950586 additions and 0 deletions

View file

@ -0,0 +1,115 @@
# $Id: README,v 2.1 2007/04/12 18:10:13 arcanum Exp $
Mfile - a simple Makefile generator for AVR-GCC
================================================
[See below for installation instructions]
General
-------
The main purpose of this small application is to provide people an
easy way to setup their project's Makefiles for »relatively standard«
projects, so one could start using AVR-GCC without first studying the
AVR's datasheet, plus the avr-libc documentation (really
recommended!), /plus/ the »GNU make« user manual.
It cannot really release the potential programmer from eventually
studying the »GNU make« manual, but it can help to delay this part a
few months.
This generator works by using a Makefile template (the one that
currently ships with WinAVR), load it into an editor buffer so the
user can view the file and the changes, and then use a menu-driven
approach to customize that buffer. Eventually, at the user's
discretion, this editor buffer can be saved into a Makefile.
(Optionally, the user can also edit the buffer directly, so it acts as
a simple text editor.)
While the Programmer's Notepad 2 (PN2) editor that ships with WinAVR
intends to eventually implement this functionality some day, there are
two reasons for this little project:
. Act as a stop-gap measure so users will get something they can use
right now, without waiting any longer.
. Since this tool is written in Tcl/Tk, it is also portable to Unix
systems, so Unix users (who'd never benefit from PN2) might use it.
I do explicitly /not/ intend to make this tool the all-singing
all-dancing scriptable Makefile generator that can emit any Makefile
for any processor and compiler on earth. I really do not want to
spend that many more hours into it, it was intented to be a quick and
(hopefully not so) dirty tool that gets finished within a couple of
evenings, and won't cost me another dozen of hours per months for
supporting it, adding new features etc. If you feel this is worth
porting somewhere else (like for the MSP430-GCC that is probably
fairly close to AVR-GCC in terms of typical use), please pick it up,
extend it, and maintain it separately. As always, I appreciate
feedback, but reserve the right to ignore anything that tries to
extend this tool above the outlined original purpose.
Note that the Makefile template as shipped requires GNU make for
various things (automagic dependency generation, some inference rules
are written in gmake syntax as well). However, as Mfile only relies
on a few macro names in the template, it should be relatively easy to
modify the template for other »make« dialects. The template (or input
file upon »File -> Open«) will be parsed when reading it, and only
those features actually present will be displayed in the »Makefile«
menu. So if e. g. people don't want to include AVRdude features, they
can delete all related lines from the template. Also if someone (like
Unix users, in particular those not using GNU make) want to modify the
way the dependencies are generated (e. g. by using the traditional
»make depend« approach), this should be completely unrelated.
Prerequisites
-------------
Requires the Tcl and Tk toolkits in recent versions (no exact version
known, probably any 8.x version is OK).
As an alternative to the standard Tk wish interpreter, the tix
toolkit's tixwish interpreter can be used. Under Unix systems, the
look & feel is then closer to what Tk wish looks like under Windows.
Installation on Unix
--------------------
Extract the archive into an arbitrary subdirectory, like
/usr/local/share/mfile
If a different directory is chosen, edit the setting of »prefix« on
top of mfile.tcl to match the installation directory, or alternatively
use the environment variable MFILE_HOME to override the default
setting.
If you prefer, create a symbolic link for convenience (so the
application can be found along your default $PATH setting), like
ln -s /usr/local/share/mfile/mfile.tcl /usr/local/bin/mfile
Remember to edit the file makefile_template to suite your needs (e. g.
default settings, adaptation to non-GNU make utilities).
Upgrading an Mfile installation on WinAVR
-----------------------------------------
Starting with WinAVR 20040404, the WinAVR collection is shipping Mfile
pre-installed. (After all, the WinAVR users have once been the
primary reason to develop Mfile at all.)
In order to upgrade the Mfile files supplied with WinAVR, extract the
archive into some directory, and copy all the files into
<winavr directory>\mfile
That ought to be all that is to be done.
----------------------------------------------------------------------
Dresden, F. R. Germany, $Date: 2007/04/12 18:10:13 $
Joerg Wunsch <j.gnu@uriah.heep.sax.de>

View file

@ -0,0 +1,165 @@
<!-- Help text for mfile.tcl -->
<!--------------------------------------------------------------------------->
<!-- "THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp): -->
<!-- Joerg Wunsch wrote this file. As long as you retain this notice you -->
<!-- can do whatever you want with this stuff. If we meet some day, and -->
<!-- you think this stuff is worth it, you can buy me a beer in return. -->
<!--------------------------------------------------------------------------->
<!-- $Id: help.html,v 2.0 2006/03/21 21:22:12 joerg_wunsch Exp $ -->
<html>
<head><title>Mfile help</title></head>
<body>
<h1>Simple Makefile generator for AVR-GCC</h1>
<p>Copyright © 2003, 2004 Jörg Wunsch</p>
<hr>
<p>This simple Makefile generator is meant as an aid to quickly
customize the WinAVR Makefile template, producing a file called
<tt>Makefile</tt> in the current directory as result.</p>
<p>The application consists of a (scrollable) text editor widget, and
a menu bar.</p>
<p>The <b>File</b> menu has only two entries:</p>
<ul>
<li><b>Save</b> writes the contents of the text editor widget to a
file called <tt>Makefile</tt>. Should any file by that name
already exist, it will be renamed. Under Unix, a tilde will be
appended to the old name, all other platforms append a <tt>.bak</tt>
suffix.
<li><b>Save As</b> opens a filename selection dialog, and allows
the user to select a file to save to. After selecting the file
name, it behaves identical to <b>Save</b>.
<li><b>Open</b> opens a filename selection dialog, requesting an
existing file to be opened by the user. This file will be loaded
into the editor buffer, and the <b>Makefile</b> menu will be
updated accordingly.
<li><b>Exit</b> will quit the application. No checks whatsoever
are done to ensure the user has saved his editing work before.
</ul>
<p>The <b>Makefile</b> menu allows customization of the generated
Makefile. Note that the various menu items described below will only
be present if the corresponding feature is present in the parsed
template or input file. This menu is divided into three areas:</p>
<ul>
<li><b>Code generation options</b>
<ul>
<li>The entry <b>Main file name</b> opens a popup window that asks
for the basic name of this
project. This will become the base name for all major output files
(ELF file, MCU output file, several auxiliary files). By default, it
will also serve as the name of the primary C source file, with a
<tt>.c</tt> suffix appended. The popup will be closed by pressing
<i><Enter></i> in the entry field.
<li>The entries <b>MCU type</b>, <b>Output format</b>,
<b>Optimization level</b>,
and <b>C standard level</b> select possible values out of a
predefined list. When selecting one of these options, the
respective Makefile macro will be modified accordingly, and the
widget will be adjusted so the new values can be seen
immediately.
<li>The entry <b>printf() options</b> works similar, only it does
not modify a Makefile macro of its own but edits the PRINTF_LIB
macro instead. Note that setting this away from
<i>none/standard</i> will cause the generated application to
always include the code for vfprintf() (which is huge),
regardless of whether the application actually uses any member
of the printf() family. See the avr-libc documentation for the
meaning of the different options.
<li>Likewise, changing the <b>scanf() options</b> changes the
macro SCANF_LIB, in the same manner. Note that the
<tt>scanf()</tt> format %[ (string match out of a set of
characters) will only be present in the floating point version
since it requires a lot of code, as well as using
<tt>malloc()</tt> (which is otherwise only required for the
floating point version).
<li>The entry <b>C/C++ source file(s)</b> opens a popup that asks
for a list of C (or C++) source files. C source files get the
suffix <tt>.c</tt> (lower-case letter c), C++ source files get
either of <tt>.C</tt> (capital c), <tt>.cxx</tt>, or <tt>.cc</tt>.
Multiple file names shall be seperated by spaces. A checkbox
indicates whether the primary C source file name derived from
the <b>Main file name</b> setting should be included or not.
The popup will be closed by pressing <i><Enter></i> in the entry
field.
<li>The entry <b>Assembler source file(s)</b> works similar
except there are no default assembler sources to be included.
Note that assembler source files get the suffix <tt>.S</tt>
(capital letter s) which means they are being pre-processed by
the C preprocessor, so <tt>#include</tt> etc. will work. A
lower-case letter <tt>.s</tt> suffix is considered to be a
temporary compiler output file, and should not be used here.
<li>Using <b>External RAM options</b>, several possible variants
to use external RAM can be selected. This is internally handled
by editing the EXTMEMOPTS macro which eventually gets added to
the LDFLAGS during linking. The options are to either use
external RAM for both, variables (i. e. sections .data and .bss)
as well as for the heap (dynamic memory for <tt>malloc()</tt>),
or to leave variables in internal memory and use the external
RAM only for the heap. In both cases, the stack will always
remain in internal memory; this is the fastest way, and some
AVR MCUs have hardware bugs so they would not work when the
stack is located in external RAM. It can be selected whether
the external RAM should start at the lowest possible memory
location (right behind the internal RAM), or at a different
memory address. Several common memory sizes can be chosen from.
Obviously, these options are only accessible for MCU types that
do have an external memory interface.
<li>The entry <b>Debug format</b> selects one out of the following
options:
<ul>
<li><b>ELF/stabs</b> ELF object files with stabs debugging
information are currently the native way to debug under Unix
and/or GDB. This includes any GDB frontend, like Insight or
DDD.
<li><b>AVR-COFF</b> Selecting this format will internally also
generate an ELF/stabs file, but change the Makefile to
subsequently convert the ELF file into a COFF file that adheres
to the originally Atmel AVR COFF file format specification.
This file format is understood by AVR Studio up to 3.x, and
VMLAB up to 3.9.
<li><b>AVR-ext-COFF</b> The conversion from internal ELF to
COFF will be tuned to produce a file according to the later
AVR "extended" COFF specification by Atmel, understood by AVR
Studio 4.07 and above, and VMLAB 3.10 and above.
<li><b>ELF/DWARF-2</b> Create an ELF standard object file with
DWARF-2 debug information. This is the proposed standard debug
format for ELF. It is currently Beta, the GNU tools are slowly
changing towards that standard (though it is not yet known
whether AVR-GDB will already fully understand the format yet),
and Atmel has released a beta ELF/DWARF-2 parser for their AVR
Studio.
</ul>
</ul>
<li><b>AVRdude options</b>
<ul>
<li>The entry <b>Programmer</b> allows the selection of
the programming hardware (parallel port "dongle", or serially
connected hardware).
<li>The entry <b>Port</b> selects the serial or parallel
port AVRdude is going to talk across. This menu item might
be missing on some operating systems where no default ports
are known.
</ul>
<li><b>Miscellaneous</b>
<ul>
<li>By default, the editor widget is read-only, and can only be
modified by the menu entries mentioned above. By checking the
<b>Enable Editing of Makefile</b> checkbox, this restriction can be lifted,
and the widget can be used as a simple standard text editor for
the generated Makefile. Note that the menu operations mentioned
above are not guaranteed to work on arbitrary input texts since
they search for certain patterns in order to implement their
functionality, so manual editing should always be used as a last
step before eventually saving the generated Makefile.
</ul>
</ul>
</body>
<address><hr>
Jörg Wunsch · &lt;j.gnu@uriah.heep.sax.de&gt; ·
$Date: 2006/03/21 21:22:12 $</address>
</html>

View file

@ -0,0 +1,606 @@
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp):
# Joerg Wunsch <j.gnu@uriah.heep.sax.de> wrote this file. As long as you
# retain this notice you can do whatever you want with this stuff. If we meet
# some day, and you think this stuff is worth it, you can buy me a beer
# in return.
# ----------------------------------------------------------------------------
#
# $Id: htmlview.tcl,v 2.0 2006/03/21 21:22:15 joerg_wunsch Exp $
#
# This implements a simple HTML viewer that is just suitable to browse through
# a document generated by latex2html
#
proc htmlview {file} {
global htmlposx htmlposy
global tcl_platform
global helpicon
global tcl_platform
global bgcolor
if {$file == ""} {
return
}
set subtag ""
# determine requested subtag (if any)
if {[regexp "^(\[^\#\]*)\#(.*)" $file dummy match subtag]} {
set file $match
}
set f ""
catch {set f [open $file]}
if {$f == ""} {
return
}
set dirname [file dirname $file]
set ok 0
while {!$ok} {
set w ".htmlview[expr {int(rand()*30000)}]"
if {![winfo exists $w]} {
set ok 1
}
}
toplevel $w
if {[info exists htmlposx]} {
set htmlposx [expr $htmlposx + 10]
set htmlposy [expr $htmlposy + 10]
} else {
set htmlposx [expr [winfo x .] + 80]
set htmlposy [expr [winfo y .] + 50]
}
wm geometry $w "+$htmlposx+$htmlposy"
wm positionfrom $w user
frame $w.f0
text $w.f0.t1 -wrap word -yscrollcommand "$w.f0.sb1 set" \
-font {Helvetica -12} -cursor {top_left_arrow}
scrollbar $w.f0.sb1 -command "$w.f0.t1 yview"
frame $w.f1
button $w.f1.bok -text {Close} -command "destroy $w"
#button $w.f1.closeall -text {Hilfe beenden} -command {destroyhtmlwins}
pack $w.f0.t1 -side left -expand 1 -fill both
pack $w.f0.sb1 -side right -expand 0 -fill y
pack $w.f0 -side top -expand 1 -fill both
pack $w.f1.bok -side left
#pack $w.f1.closeall -side right
pack $w.f1 -side top
update
set x [winfo width $w]
set y [winfo height $w]
wm minsize $w $x $y
bind $w <Key-Prior> "$w.f0.t1 yview scroll -10 units"
bind $w <Key-Next> "$w.f0.t1 yview scroll 10 units"
bind $w <Key-space> "$w.f0.t1 yview scroll 10 units"
focus $w
set bgcolor [$w.f0.t1 cget -background]
if {$tcl_platform(platform) == "unix" && [file exists $helpicon]} {
wm iconbitmap $w @$helpicon
}
set buf ""; set head ""; set tail ""
set title ""
set list ""; set lcount {1}; set ullevel 0
set bold 0; set italic 0; set titlemode 0
set tagno 0; set attribs {}; set attrib ""; set justify "left"
set paraopen 0
set lmargin 0; set rmargin 0
set hrno 0; set bulletno 0; set imgno 0
set newlineput 0; set anchorhasmodifiedfont 0; set inheadline 0
while {1} {
# if $buf starts with a "<", it means we've got an unfinished yet
# tag in there, so we need to read more until the tag is finished
# and can be handled in full
if {$buf == "" || [string index $buf 0] == "<"} {
if {[gets $f lbuf] == -1} {
break
}
if {$lbuf == "" && !$inheadline} {
# single newline only, marks a paragraph break
set lbuf "<p>"
}
regsub -all {[\t ]+} $lbuf { } lbuf
if {[string index $lbuf end] != " "} {
set lbuf "$lbuf "
}
set buf "$buf$lbuf"
}
if {[set idx [string first "<" $buf]] != -1} {
set head [string range $buf 0 [expr $idx - 1]]
set tail [string range $buf $idx end]
} else {
set head $buf
set tail ""
}
if {[string length $head]} {
set head [untangletext $head]
if {$titlemode} {
set title "$title$head"
} else {
if {$attrib != ""} {
$w.f0.t1 insert end $head $attrib
} else {
$w.f0.t1 insert end $head
}
}
set head ""
}
if {[string length $tail]} {
if {[set idx [string first ">" $tail]] != -1} {
set tag [string range $tail 0 $idx]
set buf [string range $tail [expr $idx + 1] end]
set tag [string range $tag 1 end-1]
set tagname $tag
set remainder ""
regexp {^(/?[A-Za-z0-9]+) *(.*)} $tag dummy tagname remainder
set tagname [string tolower $tagname]
switch $tagname {
"br" {
$w.f0.t1 insert end "\n"
}
"p" {
if {$paraopen && $attrib != ""} {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
set align ""
while {1} {
set x [parsetag $remainder]
set name [string tolower [lindex $x 0]]
set val [lindex $x 1]
set remainder [lindex $x 2]
if {$name == ""} {
break
}
if {$name == "align"} {
set align [string tolower $val]
}
}
if {$align != ""} {
set justify "left"
switch $align {
"center" { set justify "center" }
"right" { set justify "right" }
}
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
$w.f0.t1 insert end "\n"
set paraopen 1
}
"/p" {
set paraopen 0
if {$attrib != ""} {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
}
"title" {
set titlemode 1
set title ""
}
"/title" {
set titlemode 0
wm title $w $title
}
"b" {
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/b" {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
"strong" {
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/strong" {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
"i" {
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12 italic}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/i" {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
"em" {
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12 italic}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/em" {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
"tt" {
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Courier -12}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/tt" {
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
"h1" {
incr inheadline
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Times -18 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/h1" {
set inheadline [expr $inheadline - 1]
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
$w.f0.t1 insert end "\n\n"
}
"h2" {
incr inheadline
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Times -16 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/h2" {
set inheadline [expr $inheadline - 1]
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
$w.f0.t1 insert end "\n\n"
}
"h3" {
incr inheadline
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Times -14 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/h3" {
set inheadline [expr $inheadline - 1]
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
$w.f0.t1 insert end "\n\n"
}
"h4" {
incr inheadline
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Times -12 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/h4" {
set inheadline [expr $inheadline - 1]
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
$w.f0.t1 insert end "\n\n"
}
"a" {
set target ""
while {1} {
set x [parsetag $remainder]
set name [string tolower [lindex $x 0]]
set val [lindex $x 1]
set remainder [lindex $x 2]
if {$name == ""} {
break
}
if {$name == "href"} {
set target $val
}
if {$name == "name" && $subtag == $val} {
# subtag was requested, notice it
set see [$w.f0.t1 index end]
}
}
if {$target != "" && ![regexp {^(http:|ftp:)} $target]} {
switch $tcl_platform(platform) {
"windows" {
if {![regexp {^([A-Za-z]:)?[\\/]} $target]} {
# relative pathname
set target "$dirname/$target"
}
}
"unix" {
if {![regexp {^/} $val]} {
# relative unix pathname
set target "$dirname/$target"
}
}
}
set anchorhasmodifiedfont 1
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -foreground {blue}
$w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
$w.f0.t1 tag bind $attrib <ButtonPress> "htmlview $target"
}
}
"/a" {
if {$anchorhasmodifiedfont} {
set anchorhasmodifiedfont 0
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
}
}
"ul" {
set list "ul"
incr ullevel
incr tagno
lappend attribs $attrib
set attrib "attrib$tagno"
set lmargin [expr 40 * $ullevel - 10]
set rmargin [expr 40 * $ullevel]
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
}
"/ul" {
set ullevel [expr $ullevel - 1]
if {$ullevel == 0} {
set list ""
set lmargin 0
set rmargin 0
} else {
set lmargin [expr 40 * $ullevel - 10]
set rmargin [expr 40 * $ullevel]
}
set attrib [lindex $attribs end]
set attribs [lrange $attribs 0 end-1]
$w.f0.t1 tag add $attrib end
$w.f0.t1 tag configure $attrib -font {Helvetica -12}
$w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
-rmargin $rmargin -justify $justify
$w.f0.t1 insert end "\n"
}
"li" {
switch $list {
"ul" {
incr bulletno
canvas $w.bullet$bulletno \
-width [expr 40 * $ullevel - 15] -height 6 \
-background $bgcolor -highlightthickness 0 \
-border 0
if {$ullevel == 1} {
$w.bullet$bulletno create oval 11 1 14 4
} else {
$w.bullet$bulletno create rectangle \
[expr 40 * $ullevel - 29] 1 [expr 40 * $ullevel - 26] 4
}
$w.f0.t1 insert end "\n" $attrib
$w.f0.t1 window create end -align baseline \
-window $w.bullet$bulletno
}
}
}
"address" {
set attrib ""
set attribs {}
$w.f0.t1 insert end "\n"
}
"hr" {
update
incr hrno
makehr $w.hr$hrno [expr [winfo width $w.f0.t1] - 10]
$w.f0.t1 insert end "\n" $attrib
$w.f0.t1 window create end -window $w.hr$hrno
}
"img" {
set iwidth 0
set iheight 0
set ialign "bottom"
set isrc ""
while {1} {
set x [parsetag $remainder]
set name [string tolower [lindex $x 0]]
set val [lindex $x 1]
set remainder [lindex $x 2]
if {$name == ""} {
break
}
switch $name {
"width" { set iwidth $val }
"height" { set iheight $val }
"src" {
switch $tcl_platform(platform) {
"windows" {
if {[regexp {^([A-Za-z]:)?[\\/]} $val]} {
# absolute pathname
set isrc $val
} else {
set isrc "$dirname/$val"
}
}
"unix" {
if {[regexp {^/} $val]} {
# absolute unix pathname
set isrc $val
} else {
set isrc "$dirname/$val"
}
}
}
}
"align" { set ialign [string tolower $val] }
}
}
if {$isrc != "" && [file exists $isrc]} {
incr imgno
image create photo htmlview$imgno \
-width $iwidth -height $iheight \
-file $isrc
set imgidx [$w.f0.t1 image create end -image htmlview$imgno]
$w.f0.t1 tag add $attrib $imgidx
$w.f0.t1 tag add $attrib end
}
}
}
} else {
# unfinished tag, return to $buf
set buf $tail
}
} else {
set buf ""
}
}
close $f
# prevent users from editing the text widget's contents
$w.f0.t1 configure -state disabled
if {[info exists see]} {
# we have a subtag to display
$w.f0.t1 see $see
}
}
# parse $str, obtain first name=value pair, return remainder as well
proc parsetag {str} {
# first check for quoted value
if {[regexp {^([A-Za-z0-9_]+) *= *"([^\"]+)" *(.*)} $str dummy name val rem]} {
return [list $name $val $rem]
}
# else check for argument that must not contain a space
if {[regexp {^([A-Za-z0-9_]+) *= *([^ ]+) *(.*)} $str dummy name val rem]} {
return [list $name $val $rem]
}
# else we fail
return [list "" "" ""]
}
# proc destroyhtmlwins {} {
# global htmlposx htmlposy
# foreach win [winfo children .] {
# if {[string match {.htmlview[0-9]*} $win]} {
# destroy $win
# }
# }
# foreach img [image names] {
# if {[string match {htmlview[0-9]+} $img]} {
# image delete $img
# }
# }
# set htmlposx [expr [winfo x .] + 80]
# set htmlposy [expr [winfo y .] + 50]
# }
proc makehr {c w} {
global bgcolor
canvas $c -width $w -height 6 -background $bgcolor \
-highlightthickness 0
$c create line 2 2 [expr $w - 2] 2 -width 1 -fill "\#202020"
$c create line 2 2 2 4 -width 1 -fill "\#202020"
$c create line 3 4 [expr $w - 1] 4 -width 1 -fill "\#ffffff"
$c create line [expr $w - 2] 4 [expr $w - 2] 2 -width 1 -fill "\#ffffff"
}
proc untangletext {t} {
set result ""
set ok 1
while {$ok} {
if {[regexp {^([^&]*)&([^;]+);(.*)} $t dummy left marked right]} {
set result "$result$left"
set t $right
switch -glob $marked {
"Auml" { set result "${result}Ä" }
"Ouml" { set result "${result}Ö" }
"Uuml" { set result "${result}Ü" }
"auml" { set result "${result}ä" }
"ouml" { set result "${result}ö" }
"uuml" { set result "${result}ü" }
"szlig" { set result "${result}ß" }
"nbsp" { set result "${result} " }
"amp" { set result "${result}&" }
"lt" { set result "${result}<" }
"gt" { set result "${result}>" }
"\#[0-9]*" {
regexp {^.(.*)} $marked dummy c
set c [subst "\\[format {%o} $c]"]
set result ${result}$c
}
"*" {
# puts stderr "Warning: unknown html mark $marked"
}
}
} else {
set result "$result$t"
set ok 0
}
}
return $result
}

View file

@ -0,0 +1,15 @@
/* $Id: htmlview.xbm,v 2.0 2006/03/21 21:22:13 joerg_wunsch Exp $ */
#define htmlview_width 32
#define htmlview_height 32
static unsigned char htmlview_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x60,
0xc6, 0x00, 0x02, 0x60, 0xc6, 0x00, 0x06, 0x60, 0xc6, 0x00, 0x06, 0x60,
0xc6, 0x00, 0x06, 0x60, 0xc6, 0x00, 0x06, 0x60, 0xc6, 0x00, 0x06, 0x60,
0xc6, 0x00, 0x06, 0x60, 0xfe, 0x1c, 0xc6, 0x63, 0xfe, 0x36, 0xc6, 0x67,
0xc6, 0x66, 0xc6, 0x66, 0xc6, 0x7e, 0xc6, 0x66, 0xc6, 0x7e, 0xc6, 0x66,
0xc6, 0x06, 0xc6, 0x66, 0xc6, 0x0e, 0xc6, 0x06, 0xc6, 0x3c, 0xce, 0x67,
0xc6, 0x78, 0xcc, 0x63, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00,
0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

View file

@ -0,0 +1,617 @@
# Hey Emacs, this is a -*- makefile -*-
#----------------------------------------------------------------------------
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
#
# Released to the Public Domain
#
# Additional material for this makefile was written by:
# Peter Fleury
# Tim Henigan
# Colin O'Flynn
# Reiner Patommel
# Markus Pfaff
# Sander Pool
# Frederik Rouleau
# Carlos Lamas
#
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device, using avrdude.
# Please customize the avrdude settings below first!
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# MCU name
MCU = atmega128
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
# Typical values are:
# F_CPU = 1000000
# F_CPU = 1843200
# F_CPU = 2000000
# F_CPU = 3686400
# F_CPU = 4000000
# F_CPU = 7372800
# F_CPU = 8000000
# F_CPU = 11059200
# F_CPU = 14745600
# F_CPU = 16000000
# F_CPU = 18432000
# F_CPU = 20000000
F_CPU = 8000000
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = main
# Object files directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
OBJDIR = .
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c
# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC =
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# Debugging format.
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
# AVR Studio 4.10 requires dwarf-2.
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
DEBUG = dwarf-2
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRAINCDIRS =
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99
# Place -D or -U options here for C sources
CDEFS = -DF_CPU=$(F_CPU)UL
# Place -D or -U options here for ASM sources
ADEFS = -DF_CPU=$(F_CPU)
# Place -D or -U options here for C++ sources
CPPDEFS = -DF_CPU=$(F_CPU)UL
#CPPDEFS += -D__STDC_LIMIT_MACROS
#CPPDEFS += -D__STDC_CONSTANT_MACROS
#---------------- Compiler Options C ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char
CFLAGS += -funsigned-bitfields
CFLAGS += -fpack-struct
CFLAGS += -fshort-enums
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
#CFLAGS += -mshort-calls
#CFLAGS += -fno-unit-at-a-time
#CFLAGS += -Wundef
#CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)
#---------------- Compiler Options C++ ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CPPFLAGS = -g$(DEBUG)
CPPFLAGS += $(CPPDEFS)
CPPFLAGS += -O$(OPT)
CPPFLAGS += -funsigned-char
CPPFLAGS += -funsigned-bitfields
CPPFLAGS += -fpack-struct
CPPFLAGS += -fshort-enums
CPPFLAGS += -fno-exceptions
CPPFLAGS += -Wall
CPPFLAGS += -Wundef
#CPPFLAGS += -mshort-calls
#CPPFLAGS += -fno-unit-at-a-time
#CPPFLAGS += -Wstrict-prototypes
#CPPFLAGS += -Wunreachable-code
#CPPFLAGS += -Wsign-compare
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
#CPPFLAGS += $(CSTANDARD)
#---------------- Assembler Options ----------------
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
# -listing-cont-lines: Sets the maximum number of continuation lines of hex
# dump that will be displayed for a given single line of source input.
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
#---------------- Library Options ----------------
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
# If this is left blank, then it will use the Standard printf version.
PRINTF_LIB =
#PRINTF_LIB = $(PRINTF_LIB_MIN)
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
# If this is left blank, then it will use the Standard scanf version.
SCANF_LIB =
#SCANF_LIB = $(SCANF_LIB_MIN)
#SCANF_LIB = $(SCANF_LIB_FLOAT)
MATH_LIB = -lm
# List any extra directories to look for libraries here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRALIBDIRS =
#---------------- External Memory Options ----------------
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# used for variables (.data/.bss) and heap (malloc()).
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# only used for heap (malloc()).
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
EXTMEMOPTS =
#---------------- Linker Options ----------------
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
#LDFLAGS += -T linker_script.x
#---------------- Programming Options (avrdude) ----------------
# Programming hardware
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = stk500v2
# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
#---------------- Debugging Options ----------------
# For simulavr only - target MCU frequency.
DEBUG_MFREQ = $(F_CPU)
# Set the DEBUG_UI to either gdb or insight.
# DEBUG_UI = gdb
DEBUG_UI = insight
# Set the debugging back-end to either avarice, simulavr.
DEBUG_BACKEND = avarice
#DEBUG_BACKEND = simulavr
# GDB Init Filename.
GDBINIT_FILE = __avr_gdbinit
# When using avarice settings for the JTAG
JTAG_DEV = /dev/com1
# Debugging port used to communicate between GDB / avarice / simulavr.
DEBUG_PORT = 4242
# Debugging host used to communicate between GDB / avarice / simulavr, normally
# just set to localhost unless doing some sort of crazy debugging when
# avarice is running on a different computer.
DEBUG_HOST = localhost
#============================================================================
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
AR = avr-ar rcs
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
REMOVEDIR = rm -rf
COPY = cp
WINSHELL = cmd
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling C:
MSG_COMPILING_CPP = Compiling C++:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
MSG_CREATING_LIBRARY = Creating library:
# Define all object files.
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
# Define all listing files.
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
# Compiler flags to generate dependency files.
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target.
all: begin gccversion sizebefore build sizeafter end
# Change the build target to build a HEX file or a library.
build: elf hex eep lss sym
#build: lib
elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
LIBNAME=lib$(TARGET).a
lib: $(LIBNAME)
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
end:
@echo $(MSG_END)
@echo
# Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
sizebefore:
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
2>/dev/null; echo; fi
sizeafter:
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
2>/dev/null; echo; fi
# Display compiler version information.
gccversion :
@$(CC) --version
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Generate avr-gdb config/init file which does the following:
# define the reset signal, load the target file, connect to target, and set
# a breakpoint at main().
gdb-config:
@$(REMOVE) $(GDBINIT_FILE)
@echo define reset >> $(GDBINIT_FILE)
@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
@echo end >> $(GDBINIT_FILE)
@echo file $(TARGET).elf >> $(GDBINIT_FILE)
@echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
ifeq ($(DEBUG_BACKEND),simulavr)
@echo load >> $(GDBINIT_FILE)
endif
@echo break main >> $(GDBINIT_FILE)
debug: gdb-config $(TARGET).elf
ifeq ($(DEBUG_BACKEND), avarice)
@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
@$(WINSHELL) /c pause
else
@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
$(DEBUG_MFREQ) --port $(DEBUG_PORT)
endif
@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT = $(OBJCOPY) --debugging
COFFCONVERT += --change-section-address .data-0x800000
COFFCONVERT += --change-section-address .bss-0x800000
COFFCONVERT += --change-section-address .noinit-0x800000
COFFCONVERT += --change-section-address .eeprom-0x810000
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S -z $< > $@
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
$(NM) -n $< > $@
# Create library from object files.
.SECONDARY : $(TARGET).a
.PRECIOUS : $(OBJ)
%.a: $(OBJ)
@echo
@echo $(MSG_CREATING_LIBRARY) $@
$(AR) $@ $(OBJ)
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
$(OBJDIR)/%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create object files from C++ source files.
$(OBJDIR)/%.o : %.cpp
@echo
@echo $(MSG_COMPILING_CPP) $<
$(CC) -c $(ALL_CPPFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C++ source files.
%.s : %.cpp
$(CC) -S $(ALL_CPPFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
$(OBJDIR)/%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Create preprocessed source for use in sending a bug report.
%.i : %.c
$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list end
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lss
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) $(SRC:.c=.i)
$(REMOVEDIR) .dep
# Create object files directory
$(shell mkdir $(OBJDIR) 2>/dev/null)
# Include the dependency files.
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion \
build elf hex eep lss sym coff extcoff \
clean clean_list program debug gdb-config

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,15 @@
/* $Id: mfile.xbm,v 2.0 2006/03/21 21:22:13 joerg_wunsch Exp $ */
#define mfile_width 32
#define mfile_height 32
static unsigned char mfile_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
0xc0, 0x03, 0xfc, 0x0f, 0xf0, 0x87, 0xff, 0x0f, 0xf8, 0xc7, 0xff, 0x00,
0x3c, 0xee, 0x03, 0x00, 0x1c, 0xfc, 0x00, 0x00, 0x0c, 0x7c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x7c, 0x00, 0x00, 0x1c, 0xfc, 0x00, 0x00,
0x3c, 0xee, 0x03, 0x00, 0xf8, 0xc7, 0xff, 0x00, 0xf0, 0x87, 0xff, 0x0f,
0xc0, 0x03, 0xfc, 0x0f, 0x00, 0x00, 0xc3, 0x03, 0x00, 0x00, 0x03, 0x00,
0xda, 0x38, 0x9b, 0x03, 0xb6, 0x65, 0xcf, 0x06, 0xb6, 0x79, 0xc7, 0x07,
0xb6, 0x6d, 0xcf, 0x00, 0xb6, 0x6d, 0xdb, 0x06, 0xb6, 0xd9, 0xb3, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };