nwlogo
NAVIGATION
About
News
Support

Downloads
- Search
- Mirrors
- Auto update

Documentation
- FAQ
- HOWTOs
- ARM info
- Crusoe info

Development
- Toolchain
- Autobuild
- Users

Sponsored by:

Open Source Lab at OSU

Total Domain Management by LaneChange.net

Developement

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 only.

  • 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 FAQ.