Frequently Asked Questions
A-4
9) It is possible to mix assembler and C programs within the
Workbench. Refer to the Assembler Language Interface chapter of the
C/C++ Compiler Reference Guide from IAR.
10) The Workbench can produce an object file in Texas Instruments .TXT
format. C-SPY cannot input an object file in Texas Instruments
.TXT format.
11) The example programs giving in the Kickstart documentation (i.e.,
Demo, Tutor, etc.) are not correct. The programs will work only in the
simulator. However, the programs will not function correctly on an
actual device because the Watchdog mechanism is active. The
programs need to be modified to disable the Watchdog mechanism.
Disable the Watchdog mechanism with the C-statement: “WDTCTL =
WDTPW + WDTHOLD;”, or “mov #5a80h,&WDTCTL” in assembler.
12) Access to MPY using an 8-bit operation is flagged as an error.
Within the .h files, 16-bit registers are defined in such a way that 8-bit
operations upon them are flagged as an error. This “feature” is
normally a good thing and can catch register access violations.
However, in the case of MPY, it is also valid to access this register
using 8-bit operators. If 8-bit operators are used to access MPY, the
access violation check mechanism can be defeated by using “MPY_”
to reference the register. Similarly, 16-bit operations on 8-bit registers
are flagged.
13) Constant definitions (#define) used within the .h files are
effectively “reserved”, and include, for example, C, Z, N, and V. Do
not create program variables with these names.
14) The CSTARTUP that is implicitly linked with all C applications
does not disable the Watchdog timer. Use WDT = WDTPW +
WDTHOLD; to explicitly disable the Watchdog. This statement is best
placed in the __low_level_init() function that gets executed before
main().
If the Watchdog timer is not disabled and the Watchdog triggers and
resets the device during CSTARTUP, the source screen will go
blank as C-SPY is not able to locate the source code for CSTARTUP.
Be aware that CSTARTUP can take a significant amount of time to
execute if a large number of initialized global variables are used.
int __low_level_init(void)
{
/* Insert your low-level initializations here */
WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog timer
/*==================================*/
/* Choose if segment initialization */
/* should be done or not. */
/* Return: 0 to omit seg_init */
/* 1 to run seg_init */
/*==================================*/
return (1);
}
15) Compiler optimization can remove unused variables and/or
statements that have no effect, and can effect debugging.