[En-Nut-Discussion] Table driven routines (was Re: Using boost::preprocessor (preprocessor metaprogramming))
duane ellis
ethernut at duaneellis.com
Fri Feb 13 19:24:57 CET 2009
Harald> There is one unique feature of the AVR, which you may not be
aware of.
Harald> [the AVR has special bit instructions]
Ahh, yes, that would make lots of sense, and explains many things. I
certainly did not know that.
The 8051 has things like that, see below.
Question: Is this target an 'AVR32'- or an 'AVR8/16' - I thought it was
a 32bit, in which case, I doubt there are special instructions to access
peripherals [again, I don't know the AVR seriels as well as you]
With 8051, there is "xdata", "code" and "data" memory spaces, and
"generic pointers", and SFRs (special function registers), a normal
pointer is 2 bytes, a generic pointer is 3 bytes, the 3rd byte is a type
code. However, one _can_ specifically place an attribute on a pointer,
and remove that 3rd byte. In Old "8086" days, it was "_near" and "_far"
and the ":>" funny pointer construct that MS Compilers supported that
let you mix things. Today, we use "const" and "volatile" in the same ways.
To be honest, I don't know the AVR as well as you, I also do not know
the various compiler options.
I wonder if there is a similar special "attribute" that can be specified
in this sort of situation, you might check.
For example:
typedef _sfr_reg *SFR_REG_POINTER;
Might create an "SFR REGISTER POINTER" type.
Maybe, that type of thing just will not work on the AVR I don't know.
-Duane.
More information about the En-Nut-Discussion
mailing list