feat(motor): 自适应 PDO 窗口与通道活动指示,新增原生 SOEM 时序诊断
后端 PDO 循环改为按在线槽收缩状态窗口,稀疏总线下单槽每周期都能刷新, 并补上尾部槽的发现扫描游标;新增自旋节拍源(阈值/显式覆盖)、P 核识别 与线程级钉核,自旋期间释放 GIL 以免 HTTP 线程被饿死;启动时先关停旧实例, 避免两个进程争用 Npcap 适配器。 记录每拍完整时间线、GC stop-the-world 事件与网格跳拍数,经 /api/motor/dbg 导出用于归因固定频率的超时;配
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
"""exports2def.py — 把 dumpbin /exports 的输出转成 .def(给 lib.exe 生成导入库用)。
|
||||
|
||||
用法: python exports2def.py <exports.txt> <out.def> <LIBRARY名>
|
||||
"""
|
||||
import re
|
||||
import sys
|
||||
|
||||
def main():
|
||||
src, dst, libname = sys.argv[1], sys.argv[2], sys.argv[3]
|
||||
names = set()
|
||||
pat = re.compile(r"^\s+\d+\s+[0-9A-Fa-f]+\s+[0-9A-Fa-f]+\s+(\S+)")
|
||||
with open(src, encoding="utf-8", errors="ignore") as f:
|
||||
for line in f:
|
||||
m = pat.match(line)
|
||||
if m:
|
||||
names.add(m.group(1))
|
||||
if not names:
|
||||
print("exports2def: 没解析出任何导出名", file=sys.stderr)
|
||||
return 1
|
||||
with open(dst, "w", encoding="ascii", newline="\r\n") as f:
|
||||
f.write(f"LIBRARY {libname}\nEXPORTS\n")
|
||||
for n in sorted(names):
|
||||
f.write(n + "\n")
|
||||
print(f"exports2def: {len(names)} 个导出 → {dst}")
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user