FUNCTION_BLOCK FB 1 BEGIN L W#16#4321 T MW 0 END_FUNCTION_BLOCK 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 // Test raw FB call UC FB 1 SET CC FB 1 // Test indirect calls L 0 T MW 0 L 1 T MW 50 CLR UC FC [MW 50] L MW 0 __ASSERT== __ACCU 1, W#16#6789 L 0 T MW 0 SET CC FC [MW 50] L MW 0 __ASSERT== __ACCU 1, W#16#6789 L 0 T MW 0 CLR UC FB [MW 50] L MW 0 __ASSERT== __ACCU 1, W#16#4321 L 0 T MW 0 SET CC FB [MW 50] L MW 0 __ASSERT== __ACCU 1, W#16#4321 END_ORGANIZATION_BLOCK