This from Michael's TextFinder library, incorporated into the Stream class: find(), findUntil(), parseInt(), parseFloat(), readChars(), readCharsUntil(), readCharsBetween(), setTimeout().
(significant size impact: 14 bytes!)
Initialized "address" to eliminate compiler warning (4 bytes!)
Add "atmega168" as a more accurate target name than "diecimila"
(keep diecimila as well for backward compatibility)
Reduce the .hex and .lst targets that are stored in source control
to the three basics: atmega8, atmega168, atmega328. The other
targets remain in the makefile and makeall, but will need to be
built from source if wanted. Which should be less of a problem
now that the source is buildable without installing crosspack.
Optiboot does not support ArduinoasISP programmer.
When avrdude runs and talks to an arduino running ArduinoISP,
it needs the optiboot (entered due to auto-reset) to abort and
start the ArduinoISP "application" when it sees communications
at the wrong serial speed. Unfortunately, optiboot treats all
unrecognized command characters as "no-ops" and responds/loops
for more commands, leading to a nice loop that never gets to
the sketch. This patch causes characters received with Framing
errors (the most likely error for speed mis-matches) to NOT
reset the watchdog timer (normally done in getch()), which will
cause the application to start if it continues for "a while."
(tested. Works! Running ArduinoISP at speeds as high as 57600
still causes the bootloader to start the sketch (although it fails
later on for other reasons.))
http://code.google.com/p/arduino/issues/detail?id=554
end of flash memory where they can be read (at least in theory) by
device programmers, hex-file examination, or application programs.
This is done by putting the version number in a separate section
(".version"), and using linker/objcopy magic to locate that section as
appropriate for the target chip. (See
http://lists.gnu.org/archive/html/avr-gcc-list/2011-02/msg00016.html
for some discussion on the details.)
Start the version at 4.1 (the last "packaged" version of optiboot was
called version 3, so the "top of source" would be 4.0, and adding the
version number makes 4.1)
Refactor LDSECTION in the Makefile to LDSECTIONS so that multiple
section start addresses can be defined.
Change the _isp makefile definitions to make the bootloader section
readable (but not writable) by the application section. (This would
need to be done elsewhere as well to handle all bootloader programming
techniques. Notably Arduino's boards.txt
Note that this change does not change the "code" portion of optiboot
at all. The only diffs in the .hex files are the added version word
at the end of flash memory.
Allows building within the Arduino Source tree, and within the Arduino
IDE tree, as well as using CrossPack on Mac.
Adds README.TXT to track arduino-specific changes (and documents the
new build options.)
This addresses Arduino issue:
http://code.google.com/p/arduino/issues/detail?id=487
And optiboot issue
http://code.google.com/p/optiboot/issues/detail?id=1
(which can be thought of as a subset of the Arduno issue.)
Note that the binaries produced after these Makefile changes (using any
of the compile environments) are identical to those produced by the
crosspack-20100115 environment on a Mac.