1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
FUNCTION FC 1 : VOID
BEGIN
L W#16#1234
T MW 0
CALL FC 2
END_FUNCTION
FUNCTION FC 2 : VOID
BEGIN
L W#16#6789
T MW 0
L 10
T LB 0
END_FUNCTION
FUNCTION FC 3 : VOID
BEGIN
L 1
T LB 0
CALL FC 2
__ASSERT== LB 0, 1
END_FUNCTION
FUNCTION FC 4 : VOID
VAR_INPUT
INPVAR : INT
END_VAR
BEGIN
L #INPVAR
__ASSERT== __ACCU 1, 9976
END_FUNCTION
FUNCTION FC 5 : VOID
VAR_INPUT
INPVAR2 : INT
END_VAR
BEGIN
CALL FC 4 (
INPVAR := #INPVAR2, // This is a parameter
)
END_FUNCTION
FUNCTION FC 6 : VOID
BEGIN
// Only check OV and OS bits
__ASSERT== __STW OV, 1
__ASSERT== __STW OS, 0
L 1
L 1
+I
__ASSERT== __STW OV, 0
__ASSERT== __STW OS, 0
END_FUNCTION
FUNCTION FC 7 : VOID
BEGIN
// Trigger an overflow
__ASSERT== __STW OV, 0
__ASSERT== __STW OS, 0
L 30000
L 30000
+I
__ASSERT== __STW OV, 1
__ASSERT== __STW OS, 1
END_FUNCTION
ORGANIZATION_BLOCK OB 1
BEGIN
CALL FC 1
__ASSERT== MW 0, W#16#6789
L 0
T MW 0
__ASSERT== MW 0, 0
UC FC 1
__ASSERT== MW 0, W#16#6789
L 0
T MW 0
__ASSERT== MW 0, 0
SET
CC FC 1
__ASSERT== MW 0, W#16#6789
L 0
T MW 0
__ASSERT== MW 0, 0
CLR
CC FC 1
__ASSERT== MW 0, 0
// Test localdata stack
L 255
T LB 0
__ASSERT== LB 0, 255
CALL FC 3
__ASSERT== LB 0, 255
CALL FC 5 (
INPVAR2 := 9976,
)
// Test OV/OS bits over call boundaries
__STWRST
L 30000
L 30000
+I
__ASSERT== __STW OV, 1
__ASSERT== __STW OS, 1
CALL FC 6
__ASSERT== __STW OV, 0
__ASSERT== __STW OS, 0
__STWRST
CALL FC 7
__ASSERT== __STW OV, 1
__ASSERT== __STW OS, 0
END_ORGANIZATION_BLOCK
|