Texas Instruments TMS320 DSP 사용자 설명서

다운로드
페이지 88
www.ti.com
5.1
CPU Register Types
Read−only
Scratch
Preserve
Init
Global
Local
Read−write
CPU Register Types
DSP algorithms are often written in assembly language and, as a result, they will take full advantage of
the instruction set. Unfortunately for the system integrator, this often means that multiple algorithms
cannot be integrated into a single system because of incompatible assumptions about the use of specific
features of the DSP (e.g., use of overflow mode, use of dedicated registers, etc.). This chapter covers
those guidelines that are specific to a particular DSP instruction set. These guidelines are designed to
maximize the flexibility of the algorithm implementers, while at the same time ensure that multiple
algorithms can be integrated into a single system.
For the purpose of the guidelines below, we define several categories of register types.
Scratch register - these registers can be freely used by an algorithm, cannot be assumed to contain
any particular value upon entry to an algorithm function, and can be left in any state after exiting a
function.
Preserve registers - these registers may be used by an algorithm, cannot be assumed to contain any
particular value upon entry to an algorithm function, but must be restored upon exit from an algorithm
to the value it had at entry.
Initialized register - these registers may be used by an algorithm, contain a specified initial value upon
entry to an algorithm function (as stated next to the register), and must be restored upon exit from the
algorithm.
Read-only register - these registers may be read but must not be modified by an algorithm.
In addition to the categories defined above, all registers can be further classified as being either local or
global. Local registers are thread specific; i.e., every thread maintains its own copy of this register and it is
active whenever this thread is running. Global registers, on the other hand, are shared by all threads in
the system; if one thread changes a global register then all threads will see the change.
below depicts the relationship among the various register types defined above.
Figure 5-1. Register Types
In preemptive systems, global registers can change at any point that preemption may occur. Local
registers, on the other hand, can only be modified by the current executing thread. Thus, application code
that depends exclusively on local registers will be unaffected by other preempting threads. Conversely,
application code that depends on global registers must prevent preemption around those sections that
have this dependence.
Guideline 10
Algorithms should avoid the use of global registers.
DSP-Specific Guidelines
46
SPRU352G – June 2005 – Revised February 2007