Diagnosed from the user's console output - 25 chunks pushed cleanly at ~124ms each, then stalled. Two coupled causes: 1) Bus contention. tick() and Live sync share self.midi with the chunk ACKs. While the device was processing a chunk, a Note On / Clock Out / Live-sync FULL heartbeat could land on the same MIDI OUT stream and the host's parser dropped the interleaved ACK SysEx. Fix: self._fw_pushing flag set on 0x21 BEGIN, cleared on 0x23 COMMIT or any error. midi_send / Clock Out / _sync_broadcast / _sync_broadcast_full all early-out when _fw_pushing is True. Only ACKs go out during a push. 2) SysEx assembler garbage. self._sx = bytearray() per chunk leaks ~70 bytes / chunk that only GC'd every 50 chunks. 25 chunks of trash plus a slow heap walked the wrong way explains the ramp-up to 174 -> 119 -> 124 ms ACK times. GC every chunk now (~30ms cost on RP2040/RP2350 with small heap) so the assembler buffer is always fresh. Same patch on both pico-cp/ and pico-explorer/ since the bug is identical. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
No EOL
2.5 KiB
Python
29 lines
No EOL
2.5 KiB
Python
from collections import defaultdict
|
|
from skidl import Pin, Part, Alias, SchLib, SKIDL, TEMPLATE
|
|
|
|
from skidl.pin import pin_types
|
|
|
|
SKIDL_lib_version = '0.0.1'
|
|
|
|
rtc = SchLib(tool=SKIDL).add_parts(*[
|
|
Part(**{ 'name':'RV-8803-C7', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'RV-8803-C7'}), 'ref_prefix':'U', 'fplist':None, 'footprint':'RTC_MicroCrystal:RV-8803-C7', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[
|
|
Pin(num='1',name='SDA',func=pin_types.BIDIR),
|
|
Pin(num='2',name='CLKOUT',func=pin_types.OUTPUT),
|
|
Pin(num='3',name='VDD',func=pin_types.PWRIN),
|
|
Pin(num='4',name='CLKOE',func=pin_types.INPUT),
|
|
Pin(num='5',name='VSS',func=pin_types.PWRIN),
|
|
Pin(num='6',name='INT',func=pin_types.OPENCOLL),
|
|
Pin(num='7',name='EVI',func=pin_types.INPUT),
|
|
Pin(num='8',name='SCL',func=pin_types.INPUT)] }),
|
|
Part(**{ 'name':'D_Schottky', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'D_Schottky'}), 'ref_prefix':'D', 'fplist':[''], 'footprint':'Diode_SMD:D_SOD-323', 'keywords':'diode Schottky', 'description':'Schottky diode', 'datasheet':'~', 'pins':[
|
|
Pin(num='1',name='K',func=pin_types.PASSIVE,unit=1),
|
|
Pin(num='2',name='A',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
|
Part(**{ 'name':'Battery_Cell', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'Battery_Cell'}), 'ref_prefix':'BT', 'fplist':[''], 'footprint':'Battery:BatteryHolder_Keystone_1066_1x2032', 'keywords':'battery cell', 'description':'Single-cell battery', 'datasheet':'~', 'pins':[
|
|
Pin(num='1',name='+',func=pin_types.PASSIVE,unit=1),
|
|
Pin(num='2',name='-',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
|
Part(**{ 'name':'C', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'C'}), 'ref_prefix':'C', 'fplist':[''], 'footprint':'Capacitor_SMD:C_0402_1005Metric', 'keywords':'cap capacitor', 'description':'Unpolarized capacitor', 'datasheet':'~', 'pins':[
|
|
Pin(num='1',name='~',func=pin_types.PASSIVE,unit=1),
|
|
Pin(num='2',name='~',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
|
Part(**{ 'name':'R', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'R'}), 'ref_prefix':'R', 'fplist':[''], 'footprint':'Resistor_SMD:R_0402_1005Metric', 'keywords':'R res resistor', 'description':'Resistor', 'datasheet':'~', 'pins':[
|
|
Pin(num='1',name='~',func=pin_types.PASSIVE,unit=1),
|
|
Pin(num='2',name='~',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] })]) |