Keil™, An ARM® Company

C166 User's Guide

STATIC Compiler Directive

Abbreviation None.
Arguments None.
Default REENTRANT
µVision Options — C166 — Use Static Memory for Non—register Automatics.
Description 

The STATIC directive instructs the C166 Compiler to use static memory locations for automatic variables (not parameters) that cannot be allocated to a CPU register. The generated code is not reentrant but code size is reduced and execution speed is improved.

The C16x/ST10 microcontroller can access static variables directly in operations like ADD, AND, CMP, OR, SUB, and XOR. The MOV instruction accesses direct memory faster than stack-based memory.

See Also REENTRANT
Example 
stmt level    source

   1          #pragma reentrant
   2
   3          int rfunc (int i, int j)  {
   4   1        int array[10];
   5   1
   6   1        array[i] = j;
   7   1        return (array[j]);
   8   1      }
   9
  10          #pragma static
  11
  12          int sfunc (int i, int j)  {
  13   1        int array[10];
  14   1
  15   1        array[i] = j;
  16   1        return (array[j]);
  17   1      }

ASSEMBLY LISTING OF GENERATED OBJECT CODE
	; FUNCTION rfunc (BEGIN  RMASK = @0x4070)
		; SOURCE LINE # 3
;---- Variable 'j' assigned to Register 'R9' ----
;---- Variable 'i' assigned to Register 'R8' ----
0000 06F0ECFF      ADD     R0,#0FFECH
		; SOURCE LINE # 6
0004 F058          MOV     R5,R8
0006 5C15          SHL     R5,#01H
0008 F060          MOV     R6,R0
000A F046          MOV     R4,R6
000C 0045          ADD     R4,R5
000E B894          MOV     [R4],R9
		; SOURCE LINE # 7
0010 F049          MOV     R4,R9
0012 5C14          SHL     R4,#01H
0014 0064          ADD     R6,R4
0016 A846          MOV     R4,[R6]
		; SOURCE LINE # 8
0018 06F01400      ADD     R0,#014H
001C CB00          RET
	; FUNCTION rfunc (END    RMASK = @0x4070)

	; FUNCTION sfunc (BEGIN  RMASK = @0x4010)
		; SOURCE LINE # 12
;---- Variable 'j' assigned to Register 'R9' ----
;---- Variable 'i' assigned to Register 'R8' ----
		; SOURCE LINE # 15
001E F048          MOV     R4,R8
0020 5C14          SHL     R4,#01H
0022 C4940000      MOV     [R4+#array],R9
		; SOURCE LINE # 16
0026 F049          MOV     R4,R9
0028 5C14          SHL     R4,#01H
002A D4440000      MOV     R4,[R4+#array]
		; SOURCE LINE # 17
002E CB00          RET
	; FUNCTION sfunc (END    RMASK = @0x4010)

Related Knowledgebase Articles