From 0880f41e252d8e000ade77b5efdb65d28857eba3 Mon Sep 17 00:00:00 2001 From: Evgeny Kochetkov Date: Tue, 4 Feb 2020 17:58:56 +0300 Subject: [PATCH] =?UTF-8?q?tweak(xod-arduino):=20if=20no=20one=20uses=20pi?= =?UTF-8?q?n=E2=80=99s=20dirtyness=20state,=20do=20not=20store=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/xod-arduino/platform/program.tpl.cpp | 8 +- packages/xod-arduino/src/templates.js | 8 +- packages/xod-arduino/tools/test-avr-size.sh | 4 +- workspace/big-patch/__fixtures__/arduino.cpp | 9 -- workspace/blink/__fixtures__/arduino.cpp | 3 - workspace/blink/__fixtures__/firmware.hex | 123 +++++++++--------- .../__fixtures__/arduino.cpp | 2 - workspace/lcd-time/__fixtures__/arduino.cpp | 1 - .../__fixtures__/arduino.cpp | 9 -- 9 files changed, 74 insertions(+), 93 deletions(-) diff --git a/packages/xod-arduino/platform/program.tpl.cpp b/packages/xod-arduino/platform/program.tpl.cpp index 2fca9f80..45aafcfd 100644 --- a/packages/xod-arduino/platform/program.tpl.cpp +++ b/packages/xod-arduino/platform/program.tpl.cpp @@ -26,7 +26,7 @@ struct TransactionState { {{#unless patch.isConstant}} bool node_{{id}}_isNodeDirty : 1; {{#each outputs}} - {{#if (isOutputLinked this)}} + {{#if (shouldOutputStoreDirtyness this)}} bool node_{{ ../id }}_isOutputDirty_{{ pinKey }} : 1; {{/if}} {{/each}} @@ -40,7 +40,7 @@ struct TransactionState { {{#unless patch.isConstant}} node_{{id}}_isNodeDirty = true; {{#eachDirtyablePin outputs}} - {{#if (isOutputLinked this)}} + {{#if (shouldOutputStoreDirtyness this)}} node_{{ ../id }}_isOutputDirty_{{ pinKey }} = {{ isDirtyOnBoot }}; {{/if}} {{/eachDirtyablePin}} @@ -192,7 +192,7 @@ void handleDefers() { // transfer possibly modified dirtiness state from context to g_transaction {{#eachDirtyablePin outputs}} - {{#if (isOutputLinked this)}} + {{#if (shouldOutputStoreDirtyness this)}} g_transaction.node_{{ ../id }}_isOutputDirty_{{ pinKey }} = ctxObj._isOutputDirty_{{ pinKey }}; {{/if}} {{/eachDirtyablePin}} @@ -407,7 +407,7 @@ void runTransaction() { // transfer possibly modified dirtiness state from context to g_transaction {{#eachDirtyablePin outputs}} - {{#if (isOutputLinked this)}} + {{#if (shouldOutputStoreDirtyness this)}} g_transaction.node_{{ ../id }}_isOutputDirty_{{ pinKey }} = ctxObj._isOutputDirty_{{ pinKey }}; {{/if}} {{/eachDirtyablePin}} diff --git a/packages/xod-arduino/src/templates.js b/packages/xod-arduino/src/templates.js index 5dbd6968..3e622cff 100644 --- a/packages/xod-arduino/src/templates.js +++ b/packages/xod-arduino/src/templates.js @@ -263,7 +263,13 @@ Handlebars.registerHelper( const isOutputLinked = R.pipe(R.pathOr(0, ['to', 'length'])); -Handlebars.registerHelper('isOutputLinked', isOutputLinked); +Handlebars.registerHelper( + 'shouldOutputStoreDirtyness', + R.both( + isOutputLinked, + R.propSatisfies(R.any(R.prop('doesAffectDirtyness')), 'to') + ) +); const isLinkedTweakNode = R.both( R.pipe(R.path(['patch', 'patchPath']), XP.isTweakPath), diff --git a/packages/xod-arduino/tools/test-avr-size.sh b/packages/xod-arduino/tools/test-avr-size.sh index bf75a588..fd34f958 100755 --- a/packages/xod-arduino/tools/test-avr-size.sh +++ b/packages/xod-arduino/tools/test-avr-size.sh @@ -57,5 +57,5 @@ Data:$3 fi } -test_size "blink" " 1546 bytes (4.7% Full)" " 30 bytes (1.5% Full)" -test_size "big-patch" " 25070 bytes (76.5% Full)" " 998 bytes (48.7% Full)" +test_size "blink" " 1526 bytes (4.7% Full)" " 30 bytes (1.5% Full)" +test_size "big-patch" " 25172 bytes (76.8% Full)" " 997 bytes (48.7% Full)" diff --git a/workspace/big-patch/__fixtures__/arduino.cpp b/workspace/big-patch/__fixtures__/arduino.cpp index bbb88bc5..6339a93e 100644 --- a/workspace/big-patch/__fixtures__/arduino.cpp +++ b/workspace/big-patch/__fixtures__/arduino.cpp @@ -5509,7 +5509,6 @@ struct TransactionState { bool node_84_isNodeDirty : 1; bool node_84_isOutputDirty_OUT : 1; bool node_85_isNodeDirty : 1; - bool node_85_isOutputDirty_DEV : 1; bool node_86_isNodeDirty : 1; bool node_86_isOutputDirty_OUT : 1; bool node_87_isNodeDirty : 1; @@ -5591,7 +5590,6 @@ struct TransactionState { bool node_123_isOutputDirty_DONE : 1; bool node_123_hasUpstreamError : 1; bool node_124_isNodeDirty : 1; - bool node_124_isOutputDirty_OUT : 1; bool node_125_isNodeDirty : 1; bool node_125_isOutputDirty_OUT : 1; bool node_126_isNodeDirty : 1; @@ -5627,7 +5625,6 @@ struct TransactionState { bool node_140_isNodeDirty : 1; bool node_140_isOutputDirty_OUT : 1; bool node_141_isNodeDirty : 1; - bool node_141_isOutputDirty_R : 1; bool node_141_hasUpstreamError : 1; bool node_142_isNodeDirty : 1; bool node_142_isOutputDirty_TICK : 1; @@ -5659,10 +5656,8 @@ struct TransactionState { bool node_154_isNodeDirty : 1; bool node_154_isOutputDirty_R : 1; bool node_155_isNodeDirty : 1; - bool node_155_isOutputDirty_R : 1; bool node_155_hasUpstreamError : 1; bool node_156_isNodeDirty : 1; - bool node_156_isOutputDirty_OUT : 1; bool node_156_hasUpstreamError : 1; bool node_157_isNodeDirty : 1; bool node_157_isOutputDirty_MEM : 1; @@ -5688,7 +5683,6 @@ struct TransactionState { bool node_165_isOutputDirty_OUT : 1; bool node_166_isNodeDirty : 1; bool node_167_isNodeDirty : 1; - bool node_167_isOutputDirty_OUT : 1; bool node_168_isNodeDirty : 1; bool node_168_isOutputDirty_OUT : 1; bool node_169_isNodeDirty : 1; @@ -5708,7 +5702,6 @@ struct TransactionState { bool node_175_isNodeDirty : 1; bool node_175_isOutputDirty_OUT : 1; bool node_176_isNodeDirty : 1; - bool node_176_isOutputDirty_OUT : 1; bool node_177_isNodeDirty : 1; bool node_177_isOutputDirty_OUT : 1; bool node_178_isNodeDirty : 1; @@ -5794,7 +5787,6 @@ struct TransactionState { node_83_isOutputDirty_DEV = true; node_84_isNodeDirty = true; node_85_isNodeDirty = true; - node_85_isOutputDirty_DEV = true; node_86_isNodeDirty = true; node_86_isOutputDirty_OUT = false; node_87_isNodeDirty = true; @@ -6881,7 +6873,6 @@ void runTransaction() { xod_dev__servo__servo_device::evaluate(&ctxObj); // transfer possibly modified dirtiness state from context to g_transaction - g_transaction.node_85_isOutputDirty_DEV = ctxObj._isOutputDirty_DEV; if (previousErrors.flags != node_85.errors.flags) { detail::printErrorToDebugSerial(85, node_85.errors.flags); diff --git a/workspace/blink/__fixtures__/arduino.cpp b/workspace/blink/__fixtures__/arduino.cpp index eb2b42ae..c47b9b84 100644 --- a/workspace/blink/__fixtures__/arduino.cpp +++ b/workspace/blink/__fixtures__/arduino.cpp @@ -1396,7 +1396,6 @@ struct TransactionState { bool node_4_isNodeDirty : 1; bool node_4_isOutputDirty_TICK : 1; bool node_5_isNodeDirty : 1; - bool node_5_isOutputDirty_MEM : 1; bool node_6_isNodeDirty : 1; TransactionState() { node_3_isNodeDirty = true; @@ -1404,7 +1403,6 @@ struct TransactionState { node_4_isNodeDirty = true; node_4_isOutputDirty_TICK = false; node_5_isNodeDirty = true; - node_5_isOutputDirty_MEM = true; node_6_isNodeDirty = true; } }; @@ -1546,7 +1544,6 @@ void runTransaction() { xod__core__flip_flop::evaluate(&ctxObj); // transfer possibly modified dirtiness state from context to g_transaction - g_transaction.node_5_isOutputDirty_MEM = ctxObj._isOutputDirty_MEM; // mark downstream nodes dirty } diff --git a/workspace/blink/__fixtures__/firmware.hex b/workspace/blink/__fixtures__/firmware.hex index 2b166f0e..ebfce6a2 100644 --- a/workspace/blink/__fixtures__/firmware.hex +++ b/workspace/blink/__fixtures__/firmware.hex @@ -2,18 +2,18 @@ :100010000C947A000C947A000C947A000C947A0078 :100020000C947A000C947A000C947A000C947A0068 :100030000C947A000C947A000C947A000C947A0058 -:100040000C9438020C947A000C947A000C947A0088 +:100040000C942C020C947A000C947A000C947A0094 :100050000C947A000C947A000C947A000C947A0038 :100060000C947A000C947A00000000080002010051 :100070000003040700000000000000000000000072 :10008000250028002B0000000000240027002A0083 :10009000040404040404040402020202020203032E :1000A0000303030301020408102040800102040836 -:1000B0001020010204081020F70211241FBECFEF08 +:1000B0001020010204081020EB0211241FBECFEF14 :1000C000D8E0DEBFCDBF21E0A0E0B1E001C01D92CD :1000D000AE31B207E1F710E0CDE5D0E004C02197E2 -:1000E000FE010E94FF02CC35D107C9F70E948202AF -:1000F0000C9405030C9400003FB7F89480911A010A +:1000E000FE010E94F302CC35D107C9F70E947602C7 +:1000F0000C94F9020C9400003FB7F89480911A0117 :1001000090911B01A0911C01B0911D0126B5A89BE7 :1001100005C02F3F19F00196A11DB11D3FBFBA2F99 :10012000A92F982F8827820F911DA11DB11DBC01F9 @@ -33,66 +33,65 @@ :10020000DC2FD170D82BD0FBC0F9C093130182E052 :1002100091E00E94AF00C2FB992790F9892B80FBE7 :10022000C2F9C0931301DD2361F080920A0190921C -:100230000B01A0920C01B0920D01C260C064C0938A +:100230000B01A0920C01B0920D01C260C062C0938C :100240001301882391F1C0911401750164018AEFB3 :10025000C80ED11CE11CF11C82E091E00E94AF00AD -:100260008111CFC090E0CC23A1F0409106015091C4 +:100260008111C3C090E0CC23A1F0409106015091D0 :1002700007016091080170910901481559056A0547 -:100280007B0508F4D0C0C416D506E606F70608F4C8 -:10029000CAC08091130190FB83F984FB222720F9C7 +:100280007B0508F4C4C0C416D506E606F70608F4D4 +:10029000BEC08091130190FB83F984FB222720F9D3 :1002A000922B90FB84F9809313018091130184FFBA -:1002B00013C083FF0AC09091000181E0892798173D -:1002C00021F08093000181E001C080E09091130152 -:1002D00080FB95F9909313018091130186FF67C00D -:1002E0006091000181FF63C041EB50E0FA0174911D -:1002F0008DE990E0FC012491222399F030E0220F57 -:10030000331FF901EA57FF4FA591B491F901E45861 -:10031000FF4F259134913FB7F8942C91272B2C93C4 -:100320003FBFE5E7F0E02491FA014491FC0194918C -:10033000992309F43CC0222339F1233091F038F499 -:100340002130A9F0223001F584B58F7D12C027300D -:1003500091F02830A1F02430B9F4809180008F7D95 -:1003600003C0809180008F77809380000DC084B59A -:100370008F7784BD09C08091B0008F7703C08091D2 -:10038000B0008F7D8093B000E92FF0E0EE0FFF1FEB -:10039000E458FF4FA591B4919FB7F8948C916111E7 -:1003A00003C04095482301C0482B4C939FBF109237 -:1003B000130180910A0190910B01A0910C01B09161 -:1003C0000D010097A105B10569F040910F01509111 -:1003D0001001609111017091120184179507A60711 -:1003E000B70790F182E091E00E94AF008823A9F165 -:1003F0001092020110920301109204011092050163 -:100400002CC0C0920601D0920701E0920801F09240 -:100410000901C0920201D0920301E0920401F0921E -:10042000050191E020CFC0920601D0920701E09231 -:100430000801F0920901C0920201D0920301E092FA -:100440000401F092050125CF10920A0110920B01D0 -:1004500010920C0110920D01C5CFDF91CF91FF904A -:10046000EF90DF90CF90BF90AF909F908F900895C6 -:100470001F920F920FB60F9211242F933F938F93D9 -:100480009F93AF93BF938091160190911701A09114 -:100490001801B09119013091150123E0230F2D3778 -:1004A00020F40196A11DB11D05C026E8230F029678 -:1004B000A11DB11D20931501809316019093170182 -:1004C000A0931801B093190180911A0190911B011A -:1004D000A0911C01B0911D010196A11DB11D809339 -:1004E0001A0190931B01A0931C01B0931D01BF91B1 -:1004F000AF919F918F913F912F910F900FBE0F90D1 -:100500001F901895789484B5826084BD84B581600D -:1005100084BD85B5826085BD85B5816085BD8091CE -:100520006E00816080936E00109281008091810046 -:10053000826080938100809181008160809381003E -:10054000809180008160809380008091B100846000 -:100550008093B1008091B00081608093B000809161 -:100560007A00846080937A0080917A008260809320 -:100570007A0080917A00816080937A0080917A007D -:10058000806880937A001092C1000E947C004B0129 -:100590005C0184E6C82ED12CE12CF12C0E947C0059 -:1005A000DC01CB0188199909AA09BB09883E93404F -:1005B000A105B10598F321E0C21AD108E108F108BC -:1005C00088EE880E83E0981EA11CB11CC114D104D2 -:1005D000E104F10419F781E0809314010E94CD0039 -:1005E000109214010E94CD000E94A100FBCF8091C7 -:1005F0001301807F85638064809313010895EE0F5B -:0E060000FF1F0590F491E02D0994F894FFCFB0 +:1002B00009C083FF07C02091000191E09227291314 +:1002C0009093000185FF67C06091000181FF63C0CA +:1002D00041EB50E0FA0174918DE990E0FC0124912A +:1002E000222399F030E0220F331FF901EA57FF4F24 +:1002F000A591B491F901E458FF4F259134913FB78E +:10030000F8942C91272B2C933FBFE5E7F0E0249144 +:10031000FA014491FC019491992309F43CC02223F1 +:1003200039F1233091F038F42130A9F0223001F571 +:1003300084B58F7D12C0273091F02830A1F0243091 +:10034000B9F4809180008F7D03C0809180008F7709 +:10035000809380000DC084B58F7784BD09C08091E3 +:10036000B0008F7703C08091B0008F7D8093B00084 +:10037000E92FF0E0EE0FFF1FE458FF4FA591B49175 +:100380009FB7F8948C91611103C04095482301C038 +:10039000482B4C939FBF1092130180910A019091BA +:1003A0000B01A0910C01B0910D010097A105B105C1 +:1003B00069F040910F01509110016091110170910D +:1003C000120184179507A607B70790F182E091E024 +:1003D0000E94AF008823A9F110920201109203013C +:1003E00010920401109205012CC0C0920601D09217 +:1003F0000701E0920801F0920901C0920201D09237 +:100400000301E0920401F092050191E02CCFC0922B +:100410000601D0920701E0920801F0920901C09212 +:100420000201D0920301E0920401F092050131CF64 +:1004300010920A0110920B0110920C0110920D0102 +:10044000C5CFDF91CF91FF90EF90DF90CF90BF901D +:10045000AF909F908F9008951F920F920FB60F92BA +:1004600011242F933F938F939F93AF93BF938091CA +:10047000160190911701A0911801B09119013091C6 +:10048000150123E0230F2D3720F40196A11DB11D86 +:1004900005C026E8230F0296A11DB11D209315016A +:1004A0008093160190931701A0931801B09319013E +:1004B00080911A0190911B01A0911C01B0911D0126 +:1004C0000196A11DB11D80931A0190931B01A09369 +:1004D0001C01B0931D01BF91AF919F918F913F91EE +:1004E0002F910F900FBE0F901F901895789484B5A0 +:1004F000826084BD84B5816084BD85B5826085BD20 +:1005000085B5816085BD80916E00816080936E00AD +:10051000109281008091810082608093810080919F +:100520008100816080938100809180008160809350 +:1005300080008091B10084608093B1008091B00010 +:1005400081608093B00080917A00846080937A000B +:1005500080917A00826080937A0080917A00816035 +:1005600080937A0080917A00806880937A0010925C +:10057000C1000E947C004B015C0184E6C82ED12C96 +:10058000E12CF12C0E947C00DC01CB018819990937 +:10059000AA09BB09883E9340A105B10598F321E063 +:1005A000C21AD108E108F10888EE880E83E0981E8F +:1005B000A11CB11CC114D104E104F10419F781E0BC +:1005C000809314010E94CD00109214010E94CD006E +:1005D0000E94A100FBCF80911301807F8561806222 +:1005E000809313010895EE0FFF1F0590F491E02D05 +:0605F0000994F894FFCF0E :00000001FF diff --git a/workspace/count-with-feedback-loops/__fixtures__/arduino.cpp b/workspace/count-with-feedback-loops/__fixtures__/arduino.cpp index fd8bbfc0..c8cca8d2 100644 --- a/workspace/count-with-feedback-loops/__fixtures__/arduino.cpp +++ b/workspace/count-with-feedback-loops/__fixtures__/arduino.cpp @@ -2311,10 +2311,8 @@ struct TransactionState { bool node_20_isOutputDirty_OUT : 1; bool node_20_hasUpstreamError : 1; bool node_21_isNodeDirty : 1; - bool node_21_isOutputDirty_OUT : 1; bool node_21_hasUpstreamError : 1; bool node_22_isNodeDirty : 1; - bool node_22_isOutputDirty_OUT : 1; bool node_22_hasUpstreamError : 1; bool node_23_isNodeDirty : 1; bool node_23_hasUpstreamError : 1; diff --git a/workspace/lcd-time/__fixtures__/arduino.cpp b/workspace/lcd-time/__fixtures__/arduino.cpp index d0f32107..16e35fb8 100644 --- a/workspace/lcd-time/__fixtures__/arduino.cpp +++ b/workspace/lcd-time/__fixtures__/arduino.cpp @@ -1439,7 +1439,6 @@ struct TransactionState { bool node_8_isNodeDirty : 1; bool node_8_isOutputDirty_TIME : 1; bool node_9_isNodeDirty : 1; - bool node_9_isOutputDirty_OUT : 1; bool node_10_isNodeDirty : 1; TransactionState() { node_7_isNodeDirty = true; diff --git a/workspace/two-button-switch/__fixtures__/arduino.cpp b/workspace/two-button-switch/__fixtures__/arduino.cpp index c565fe43..ffc4f206 100644 --- a/workspace/two-button-switch/__fixtures__/arduino.cpp +++ b/workspace/two-button-switch/__fixtures__/arduino.cpp @@ -1487,29 +1487,23 @@ struct TransactionState { bool node_3_isNodeDirty : 1; bool node_3_isOutputDirty_TICK : 1; bool node_4_isNodeDirty : 1; - bool node_4_isOutputDirty_SIG : 1; bool node_5_isNodeDirty : 1; - bool node_5_isOutputDirty_SIG : 1; bool node_6_isNodeDirty : 1; bool node_6_isOutputDirty_F : 1; bool node_7_isNodeDirty : 1; bool node_7_isOutputDirty_F : 1; bool node_8_isNodeDirty : 1; - bool node_8_isOutputDirty_MEM : 1; bool node_9_isNodeDirty : 1; TransactionState() { node_3_isNodeDirty = true; node_3_isOutputDirty_TICK = false; node_4_isNodeDirty = true; - node_4_isOutputDirty_SIG = true; node_5_isNodeDirty = true; - node_5_isOutputDirty_SIG = true; node_6_isNodeDirty = true; node_6_isOutputDirty_F = false; node_7_isNodeDirty = true; node_7_isOutputDirty_F = false; node_8_isNodeDirty = true; - node_8_isOutputDirty_MEM = true; node_9_isNodeDirty = true; } }; @@ -1635,7 +1629,6 @@ void runTransaction() { xod__gpio__digital_read::evaluateTmpl(&ctxObj); // transfer possibly modified dirtiness state from context to g_transaction - g_transaction.node_4_isOutputDirty_SIG = ctxObj._isOutputDirty_SIG; // mark downstream nodes dirty } @@ -1662,7 +1655,6 @@ void runTransaction() { xod__gpio__digital_read::evaluateTmpl(&ctxObj); // transfer possibly modified dirtiness state from context to g_transaction - g_transaction.node_5_isOutputDirty_SIG = ctxObj._isOutputDirty_SIG; // mark downstream nodes dirty } @@ -1745,7 +1737,6 @@ void runTransaction() { xod__core__flip_flop::evaluate(&ctxObj); // transfer possibly modified dirtiness state from context to g_transaction - g_transaction.node_8_isOutputDirty_MEM = ctxObj._isOutputDirty_MEM; // mark downstream nodes dirty }