# HG changeset patch # User Andrey Skvortsov # Date 1527857177 -10800 # Node ID 9fa5be79bb7783815a6d294e98d5c2c7945b4f8e # Parent d1536c27186641054f18b28409f2b843d3644339 Add helper function GetRetainSize() it will be useful for retain implementations. diff -r d1536c271866 -r 9fa5be79bb77 targets/plc_debug.c --- a/targets/plc_debug.c Fri Jun 01 12:21:37 2018 +0300 +++ b/targets/plc_debug.c Fri Jun 01 15:46:17 2018 +0300 @@ -211,6 +211,31 @@ BufferIterator(dsc, 0); } + +unsigned int retain_size = 0; + +/* GetRetainSizeIterator */ +void GetRetainSizeIterator(dbgvardsc_t *dsc) +{ + void *real_value_p = NULL; + char flags = 0; + UnpackVar(dsc, &real_value_p, &flags); + + if(flags & __IEC_RETAIN_FLAG){ + USINT size = __get_type_enum_size(dsc->type); + /* Calc retain buffer size */ + retain_size += size; + } +} + +/* Return size of all retain variables */ +unsigned int GetRetainSize(void) +{ + __for_each_variable_do(GetRetainSizeIterator); + return retain_size; +} + + extern void PLC_GetTime(IEC_TIME*); extern int TryEnterDebugSection(void); extern long AtomicCompareExchange(long*, long, long);