CrossWorks makes a distinction between the low-level symbol names used for C objects and the names of the C objects themselves. The CrossWorks compiler always prepends an underscore character ‘_’ to the name of any externally visible C function or variable when constructing its low-level symbol name.

For example, an external variable declared at the C level ‘extern int x’ will be accessible at the assembly level using the name ‘_x’.

When compiling for the MSP430X in the 1MB addressing mode using -m1m, function pointers are still represented in a 16-bit pointer but are ‘thunked’. That is, the compiler uses an indirect call through the 16-bit address to anywhere in the 20-bit address range.

As a C programmer this has no impact on the way that you write your code, but if you are passing function pointers to assembly code or are dealing with function pointers at a low-level, such as porting an RTOS, then you need to be aware that function pointers are not held as 20-bit addresses.