ZBasic Language Reference
83
ZBasic Microcontrollers
Examples
Dim ival as Integer, fval as Single
Dim buf(1 to 20) as Byte
Dim b As Byte Alias fval
Dim c As Byte Alias buf(2)
Dim c2(1 to 3) As Byte Alias buf(3)
Dim bval(1 to 5) As Byte Alias ival
The first alias definition allows you to read/write the least significant byte of the Single value fval. The
second definition allows direct access to the second byte of the buf variable. The third example shows
how to define a sub-array within an array. The fourth example shows an alias being defined that spans
more than one variable. Although the compiler allows this form its use is discouraged because the effect
depends on the order in which the compiler chooses to allocate data items.
Recursive alias definitions are not allowed; an error message will be issued by the compiler when a
recursive definition is detected. Note that is not allowed to define an alias that is a String type. You
may, however, define an alias that overlays a String variable although this is not often useful.
One interesting use for an alias is when your application requires that a series of data items be arranged
in a particular order in memory. Consider a situation where, for whatever reason, it would be convenient
to have an Integer value, a Byte value and a Single value that are guaranteed to be arranged in
sequence in memory. This can be accomplished with the definitions shown below.
Dim host(1 to 7) As Byte
Dim ival As Integer Alias host(1)
Dim bval As Byte Alias host(3)
Dim fval As Single Alias host(4)
This technique may be useful, for example, for reading and writing data packets to an external device.
One aspect of using aliases that requires careful thought and possibly some experimentation is that an
alias of a fundamental type (e.g. Byte, Integer, etc.) must be defined so that it aligns on a byte
boundary. If the target variable for the alias is also a fundamental type this will not be an issue because
the fundamental types are always byte-aligned. On the other hand, sub-byte types may or may not be
byte-aligned so defining an alias to a sub-byte type may result in a compiler error message indicating that
it is not byte-aligned. See Section 3.24 for more information on this topic.
BasicX Compatibility Note
Aliases are not available in BasicX compatibility mode.
3.21 Based Variables
Based variables are a very powerful tool and their use is recommended for advanced programmers only.
If used carelessly or without a complete understanding of their characteristics they may cause your
program to malfunction in ways that are quite difficult to diagnose.
A based variable is similar to a procedure parameter that is passed ByRef in the respect that no space is
allocated for the data item. Rather, the location (i.e. the addess) of the based variable is specified using
an integral expression that can be constant or computed at run-time. The effect that can be achieved
using a based variable is similar to using an alias but a based variable is even more powerful because of
the ability of the address to change at run time.
The syntax for defining a based variable at the module level is shown below.
|