This error message could be caused by the following:
This error message could be caused by the following:
This error message could be caused by the following:
If you are using an ARM CrossConnect or a Wiggler you can alter the clock frequency by setting the JTAG Clock Divider target property (the default setting is 1).
If you are using an ARM CrossConnect you can also enable adaptive clocking by setting the Adaptive Clocking target property to Yes. This mode uses the RTCK signal to dynamically control the JTAG clock frequency
If you are using a J-Link you can alter the clock frequency by setting the Speed target property (the default setting is 4000).
See the "Reset Signals" section in "Chapter 6, System Design Guidelines" of the Multi-ICE User Guide for a description of the correct reset circuit design.
For reliable debugging over JTAG, the JTAG connector's nSRST signal should only reset the ARM core and not the JTAG state machine / EmbeddedICE logic. If this is not the case, the debugger will be unable to reset and stop the processor without allowing the program currently in memory to execute for a period of time. This may cause unreliability because the processor and peripherals may not be in their reset state or invalid code may have been executed before a new program can be downloaded or run.
CrossStudio does not use the nTRST signal.
You can verify that your program has been downloaded after every load by enabling load verification. To do this check the Tools | Options | Target | Enable load verification option.
Alternatively, you can carry out a program verification at any time by selection the Debug | Verify menu option. This will verify that your current active project is correctly loaded onto the target.
Download speeds can be increased when using a program loader on some some targets by changing the Target | Loader File Type from Comms Channel Loader to Fast Comms Channel Loader.
The Fast Comms Channel loader option may not work or be may be unreliable on certain ARM targets, so revert to the Comms Channel Loader option if you experience any unreliability.
There are two ways to put code and data into different named sections:
Use gcc's section attribute. For example, the following declaration
will place the function foobar into the section named .foo
section:
void foobar(void) __attribute__ ((section(".foo")));
Change a section's name for an entire module using the Section Name
project properties. For example to put all code from a particular module
into the section ".foo":
The memory map file specified by a project's Memory Map File property is used to place sections in memory. A program section's Input Sections property is used to specify which input sections will be placed in a program section.
For example, to put the contents of the ".foo" section at a particular location in memory:
The ARM maintains six separate stacks:
To change the size of a stack section:
To change the size of the heap section:
In order to minimize size, versions of the printf and scanf functions without floating point support are linked by default. To enable floating point printf and scanf support, set the Floating Point I/O Supported property of your project to Yes.
The Instruction Set compiler project property controls the type of code generated by both compiler and assembler, it can be set to ARM or Thumb.
The ARM/Thumb Interworking compiler project property instructs the compiler whether to produce code that supports calling between ARM and Thumb instruction sets.
The Library Instruction Set linker project property controls the version of the standard C library to use. If ARM is selected, the ARM version of the standard C library will be linked. If Thumb is selected, the Thumb version of the standard C library will be linked.
You can use the symbol browser window to find out the size of your program:
You will now see the sections that comprise your program together with their addresses and sizes. You can use the symbol browser to view the range of data items and see how much code each individual function takes up.
You can use the symbol browser window to find out where symbols are placed in memory:
You will see a list of groups each containing symbols of a particular type, such as functions, variables and labels. Within each of these groups will be listed each symbol and the address range it occupies in memory.