The development environment on the NetWinder consits of the same GNU
tools that are available with Linux on the Intel x86 platform. A large
number of applications can be readily ported to the ARM platform. Some
of the differences include:
No floating point hardware. The StrongARM processor does not
have a floating point unit. Instead, the floating point instructions are emulated in software. This process
is slow and therfore the NetWinder is not a good platform for heavy
mathematics computation, unless the algorithm is written to use integers
Unsigned char. By default under ARM, the C-language type
specifier "char" is an unsigned quantity, whereas on most other systems it
is signed. A common case where this problem occurs is when reading input
with getch() into a "char c", and then testing for EOF by comparing against
-1. Such code is readily fixed by using an "int" rather than a "char".
Another option is to use the compiler option "-fsigned-char".
Position-independant code. The ARM instruction set cannot
perform relative jumps greater then 24 bits, and this occasionally causes
trouble when accessing code in shared libraries. Additional information is
available here in
our FAQ. The general solution is to compile your libaries with the "-fPIC"
compiler flag, as well as making sure that any code you link with was also
compiled with the same flag.
Data alignment and structure packing. The StrongARM cannot
access unaligned data in memory (eg. it cannot read a long from an address
that is not a multiple of 4). An alignment fault hander is available to
help track down unaligned accesses, though by default it does not "fixup"
user-space accesses. Code needs to be fixed to avoid performing unaligned
accesses. Closely related to the alignment issue, the ARM compiler will by
default add padding to data structures. This causes trouble when, for
example, network data is read in and blindly gets cast to a structure. For
more details please see the alignment