| 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. |
| 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)
|