1
0
mirror of https://github.com/arduino/Arduino.git synced 2024-11-30 11:24:12 +01:00
Commit Graph

3505 Commits

Author SHA1 Message Date
Matthijs Kooijman
722675bd1f Use bit_is_clear in HardwareSerial::flush()
This is slightly more clear than the previous explicit comparison.
2014-01-22 09:37:44 +01:00
Matthijs Kooijman
03fac844a8 Move interrupt handlers into HardwareSerial class
The actual interrupt vectors are of course defined as before, but they
let new methods in the HardwareSerial class do the actual work. This
greatly reduces code duplication and prepares for one of my next commits
which requires the tx interrupt handler to be called from another
context as well.

The actual content of the interrupts handlers was pretty much identical,
so that remains unchanged (except that store_char was now only needed
once, so it was inlined).

Now all access to the buffers are inside the HardwareSerial class, the
buffer variables can be made private.

One would expect a program size reduction from this change (at least
with multiple UARTs), but due to the fact that the interrupt handlers
now only have indirect access to a few registers (which previously were
just hardcoded in the handlers) and because there is some extra function
call overhead, the code size on the uno actually increases by around
70 bytes. On the mega, which has four UARTs, the code size decreases by
around 70 bytes.
2014-01-16 16:59:06 +01:00
Matthijs Kooijman
e40cf5b7b8 Use constants for register bit positions in HardwareSerial
Previously, the constants to use for the bit positions of the various
UARTs were passed to the HardwareSerial constructor. However, this
meant that whenever these values were used, the had to be indirectly
loaded, resulting in extra code overhead. Additionally, since there is
no instruction to shift a value by a variable amount, the 1 << x
expressions (inside _BV and sbi() / cbi()) would be compiled as a loop
instead of being evaluated at compiletime.

Now, the HardwareSerial class always uses the constants for the bit
positions of UART 0 (and some code is present to make sure these
constants exist, even for targets that only have a single unnumbered
UART or start at UART1).

This was already done for the TXC0 constant, for some reason. For the
actual register addresses, this approach does not work, since these are
of course different between the different UARTs on a single chip.

Of course, always using the UART 0 constants is only correct when the
constants are actually identical for the different UARTs. It has been
verified that this is currently the case for all targets supported by
avr-gcc 4.7.2, and the code contains compile-time checks to verify this
for the current target, in case a new target is added for which this
does not hold. This verification was done using:

for i in TXC RXEN TXEN RXCIE UDRIE U2X UPE; do echo $i; grep --no-filename -r "#define $i[0-9]\? " /usr/lib/avr/include/avr/io* | sed "s/#define $i[0-9]\?\s*\(\S\)\+\s*\(\/\*.*\*\/\)\?$/\1/" | sort | uniq ; done

This command shows that the above constants are identical for all uarts
on all platforms, except for TXC, which is sometimes 6 and sometimes 0.
Further investigation shows that it is always 6, except in io90scr100.h,
but that file defines TXC0 with value 6 for the UART and uses TXC with
value 0 for some USB-related register.

This commit reduces program size on the uno by around 120 bytes.
2014-01-16 16:36:06 +01:00
Matthijs Kooijman
6ac8185c08 Define a _NOP() macro
Recent avr-libc releases define one, but this allows using it also on
older avr-libc releases.
2014-01-16 16:29:41 +01:00
Matthijs Kooijman
6cce4787bf Simplify HardwareSerial::begin()
This simplifies the baud rate calculation, removing the need for a goto
and shortening the code a bit. Other than that, this code should not use
any different settings than before.

Code was suggested by Rob Tillaart on github.

Closes: #1262
2014-01-16 16:04:33 +01:00
Matthijs Kooijman
db5da3691e Remove unused variable 2014-01-16 13:52:40 +01:00
Cristian Maglie
1fab8c85e6 Slightly reduce code utilization by inlining HardwareSerail begin(baud) and operator bool() 2014-01-16 13:50:59 +01:00
Matthijs Kooijman
f35ec75dce Remove duplicate code from HardwareSerial::begin() methods.
There are two begin methods, one which accepts just a baud rate and
uses the default bit settings and one which accepts both a baudrate and
a bit config. Previously, both of these contained a complete
implementation, but now the former just calls the latter, explicitely
passing the default 8N1 configuration.

Technically, this causes a small change: Before the UCSRC register was
untouched when calling begin(baud), now it is explicitely initialized
with 8N1. However, since this is the default configuration for at least
the Uno and the Mega (didn't check any others), probably for all avrs,
this shouldn't effectively change anything. Given that the Arduino
documentation also documents this as the default when none is passed,
explicitly setting it is probably a good idea in any case.
2014-01-16 13:20:11 +01:00
Cristian Maglie
c2e9860cff Merge remote-tracking branch 'matthijs/ide-1.5.x-ipaddress-const' into ide-1.5.x 2014-01-16 13:17:44 +01:00
Matthijs Kooijman
dde1a7541f Make some operators in IPAddress const
These functions do not modify the IPAddress object, but were not marked
as const. This meant that you could not do:

void set_ip(const IPAddress& ip) {
	uint32_t copy = ip;
}

Since calling operator uint32_t() on ip would discard the constness of
the reference.
2014-01-15 16:20:48 +01:00
Cristian Maglie
63e33be342 Merge tag '1.5.5-r2' into ide-1.5.x
Conflicts:
	build/shared/revisions.txt
	build/windows/dist/drivers/arduino.cat
2014-01-10 19:12:33 +01:00
Cristian Maglie
3d46d58b9f Signed drivers for Windows 8.1
Merge tag '1.0.5-r2' into HEAD

Conflicts:
	build/shared/revisions.txt
	build/windows/dist/drivers/arduino.cat
2014-01-10 19:10:27 +01:00
Cristian Maglie
2491c16d77 Merge branch 'lib-1.5-rev2' into HEAD 2014-01-09 14:56:23 +01:00
Cristian Maglie
8595d1444c Merge pull request #1790 from cmaglie/platform-paths
Fixed "runtime.hardware.path" and "runtime.platform.path" values
2014-01-09 04:30:00 -08:00
Cristian Maglie
e9c72c9278 Signed drivers for Windows 8.1 2014-01-08 16:58:32 +01:00
Cristian Maglie
c2498aac5f Updated revisions log 2014-01-08 13:47:40 +01:00
Cristian Maglie
572592a178 Merge pull request #1794 from arduino/ide-1.5.x-euler
Added new EULER constant
2014-01-07 06:46:18 -08:00
Cristian Maglie
5925485e8f Updated drivers signature for Windows 2014-01-07 11:27:46 +01:00
Cristian Maglie
49166548ba Removed old Arduino Due drivers for Windows (leftovers) 2014-01-07 11:24:38 +01:00
Cristian Maglie
e50b0ec030 Merge branch 'master' into ide-1.5.x
Conflicts:
	build/windows/dist/drivers/arduino.cat
2014-01-07 11:19:08 +01:00
Cristian Maglie
144b5e8815 Merge tag '1.0.5-r2' 2014-01-07 11:15:33 +01:00
Cristian Maglie
5c1b5c09e2 Updated drivers signature for Windows 2014-01-07 11:10:19 +01:00
Federico Fissore
dfe77f388d Removed = char from #define. See https://github.com/arduino/Arduino/issues/1792#issuecomment-31650586 2014-01-06 18:20:37 +01:00
Federico Fissore
9fce7f1839 Added new EULER constant. Fixes #1792 2014-01-06 09:48:34 +01:00
Cristian Maglie
4dc21cee6c Fixed "runtime.hardware.path" and "runtime.platform.path" values
"runtime.hardware.path" now contains the path to the hardware folder
of the currently selected board and "runtime.platform.path" the path
to the specific platform.

This should fix #1176 and #1761.
2014-01-05 12:42:27 +01:00
Cristian Maglie
618f537691 Ethernet library refactoring
- removed arch folder
- merged socket.c and w5100.c for SAM and AVR, this is preparatory
  to make library vanilla
2014-01-05 08:50:52 +01:00
Cristian Maglie
4b7302692c Servo library to format 1.5 rev.2 2014-01-02 00:20:31 +01:00
Cristian Maglie
03a7cf3212 Robot Control library to format 1.5 rev.2 2014-01-01 23:45:39 +01:00
Cristian Maglie
673847c8b6 Improved portability of String class (maniacbug) 2014-01-01 17:22:40 +01:00
Cristian Maglie
e2d373ed61 sam: Added digitalPinHasPWM(..) method
Fixes #1342
2013-12-31 20:58:10 +01:00
Cristian Maglie
90ab663146 sam: moved "variant" methods into proper place 2013-12-31 20:57:14 +01:00
Cristian Maglie
c50821ba10 Fixed value of NUM_DIGITAL_PINS for Arduino Due 2013-12-31 20:55:43 +01:00
Cristian Maglie
ffddfc81f6 Merge branch 'cast' of github.com:Lauszus/Arduino into Lauszus-cast
Conflicts:
	hardware/arduino/avr/cores/arduino/Print.cpp
2013-12-31 20:11:08 +01:00
Matthijs Kooijman
98777e816f Use PGM_P instead of prog_char
On later versions of avr-libc, prog_char is deprecated. In 0acebeeff4
the one occurence of prog_char was replaced by "char PROGMEM", which is
not entirely correct (PROGMEM is supposed to be an attribute on a
variable, not on a type, even though this is how things work in older
libc versions). However, in 1130fede3a a few new occurences of
prog_char are introduced, which break compilation on newer libc versions
again.

This commit changes all these pointer types to use the PGM_P macro from
<avr/pgmspace.h>. This macro is just "const char *" in newer libc
versions and "const prog_char *" in older versions, so it should always
work.

References #795
2013-12-31 20:01:40 +01:00
Cristian Maglie
0b72c88b42 Merge pull request #1762 from matthijskooijman/ide-1.5.x-write-char
Support both char* and uint8* in Stream and Print
2013-12-30 10:58:03 -08:00
Cristian Maglie
dd7e0ee33f WiFi library is now vanilla 2013-12-30 18:04:31 +01:00
Cristian Maglie
1ddf6136af WiFi librari: SPI delay is computed based on F_CPU constant 2013-12-30 18:04:31 +01:00
Cristian Maglie
a2482734b5 Moved vanilla parts of WiFi library into common source folder. 2013-12-30 18:04:31 +01:00
Cristian Maglie
9d48b52312 Removed unused "socket.h" interface from WiFi library.
(that was probably an heritage from Ethernet lib)
2013-12-30 18:04:31 +01:00
Cristian Maglie
d920b7b67c Removed unused stuff from WiFi library. 2013-12-30 18:04:31 +01:00
Cristian Maglie
825d8c8455 sam: Optimized delayMicroseconds() (Rob Tillaart)
See #1121
2013-12-30 12:17:50 +01:00
Kristian Lauszus
5d361f5f47 Use reinterpret_cast to cast __FlashStringHelper to const char* 2013-12-27 20:01:03 +01:00
Cristian Maglie
a80b2b1d53 Audio library to format 1.5 rev.2 2013-12-27 01:32:36 +01:00
Cristian Maglie
d930e22436 GSM library to format 1.5 rev.2 2013-12-27 01:21:00 +01:00
Cristian Maglie
6923cc9c39 Removed unused import 2013-12-26 15:11:16 +01:00
Cristian Maglie
2b53d6988a Added the possibility to override library compatibility check 2013-12-26 12:49:14 +01:00
Cristian Maglie
512925a812 IDE warns if a library is compiled with an unsupported architecture 2013-12-25 20:35:18 +01:00
Cristian Maglie
164da522b6 Added "license" field in libraries. 2013-12-25 19:27:09 +01:00
Cristian Maglie
ce5ff8c299 Added "category" field in libraries. 2013-12-25 19:26:01 +01:00
Cristian Maglie
4932831f8b IDE do not hide libraries with incompatible architectures 2013-12-25 18:58:50 +01:00