sumadoratyper's log : 2023-12-18

  1. sym_eager_pr, debounce time 25msで実際どうなるか試してみたけどグロすぎる. 絶対に同時押しで25ms(1ms未満の微妙なずれで24msに見える場合はある)遅延する.

    [14:     wl_keyboard] key: serial: 81223; time: 47068089; key: 38; state: 1 (pressed)
                          sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 81224; time: 47068114; key: 39; state: 1 (pressed)
                          sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 81225; time: 47068158; key: 39; state: 0 (released)
                          sym: s            (115), utf8: ''
    [14:     wl_keyboard] key: serial: 81226; time: 47068182; key: 38; state: 0 (released)
                          sym: a            (97), utf8: ''
    [14:     wl_keyboard] key: serial: 81227; time: 47070181; key: 38; state: 1 (pressed)
                          sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 81228; time: 47070206; key: 39; state: 1 (pressed)
                          sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 81229; time: 47070240; key: 39; state: 0 (released)
                          sym: s            (115), utf8: ''
    [14:     wl_keyboard] key: serial: 81230; time: 47070264; key: 38; state: 0 (released)
                          sym: a            (97), utf8: ''
    [14:     wl_keyboard] key: serial: 81231; time: 47071728; key: 39; state: 1 (pressed)
                          sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 81232; time: 47071753; key: 38; state: 1 (pressed)
                          sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 81233; time: 47071794; key: 38; state: 0 (released)
                          sym: a            (97), utf8: ''
    [14:     wl_keyboard] key: serial: 81234; time: 47071818; key: 39; state: 0 (released)
                          sym: s            (115), utf8: ''
    [14:     wl_keyboard] key: serial: 81235; time: 47072738; key: 38; state: 1 (pressed)
                          sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 81236; time: 47072763; key: 39; state: 1 (pressed)
                          sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 81237; time: 47072824; key: 39; state: 0 (released)
                          sym: s            (115), utf8: ''
    [14:     wl_keyboard] key: serial: 81238; time: 47072848; key: 38; state: 0 (released)
                          sym: a            (97), utf8: ''
    [14:     wl_keyboard] key: serial: 81239; time: 47073581; key: 38; state: 1 (pressed)
                          sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 81240; time: 47073606; key: 39; state: 1 (pressed)
                          sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 81241; time: 47073644; key: 39; state: 0 (released)
                          sym: s            (115), utf8: ''
    [14:     wl_keyboard] key: serial: 81242; time: 47073669; key: 38; state: 0 (released)
                          sym: a            (97), utf8: ''
    [14:     wl_keyboard] key: serial: 81243; time: 47074350; key: 38; state: 1 (pressed)
                          sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 81244; time: 47074375; key: 39; state: 1 (pressed)
                          sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 81245; time: 47074414; key: 39; state: 0 (released)
                          sym: s            (115), utf8: ''
    [14:     wl_keyboard] key: serial: 81246; time: 47074438; key: 38; state: 0 (released)
                          sym: a            (97), utf8: ''
  2. 遅延が生じるのは2キー目だけで, タイマーの共有で入力(送信)受け付けてない間にスキャンしたやつ(キューに溜まってるやつ)はタイマーがリセットされてから順次送信されるのか……? 順次送信なら1ms刻み(Chord Splitの都合)になる気がするんだけど. この辺よくわからん.

    [14:     wl_keyboard] key: serial: 86502; time: 48265866; key: 41; state: 1 (pressed)
                        sym: f            (102), utf8: 'f'
    [14:     wl_keyboard] key: serial: 86503; time: 48265890; key: 38; state: 1 (pressed)
                        sym: a            (97), utf8: 'a'
    [14:     wl_keyboard] key: serial: 86504; time: 48265893; key: 39; state: 1 (pressed)
                        sym: s            (115), utf8: 's'
    [14:     wl_keyboard] key: serial: 86505; time: 48265895; key: 40; state: 1 (pressed)
                        sym: d            (100), utf8: 'd'
    [14:     wl_keyboard] key: serial: 86506; time: 48265898; key: 45; state: 1 (pressed)
                        sym: k            (107), utf8: 'k'
    [14:     wl_keyboard] key: serial: 86507; time: 48265901; key: 46; state: 1 (pressed)
                        sym: l            (108), utf8: 'l'
    [14:     wl_keyboard] key: serial: 86508; time: 48265903; key: 47; state: 1 (pressed)
                        sym: semicolon    (59), utf8: ';'
  3. ポーリング周りの挙動全然わかってない.

  4. Duplex-Matrixを自作キーボードで使う方法 | e3w2q.github.io

  5. デバウンスアルゴリズムによるコードサイズの差のめも(FM60-H):

    デバウンスアルゴリズムサイズ (bytes)sym_defer_g との差
    sym_defer_g617720
    sym_defer_pr62380+608
    sym_defer_pk62540+768
    sym_eager_pr62476+704
    sym_eager_pk62504+732
    asym_eager_defer_pk62732+960

    sym_eager_pk より sym_defer_pk の方が若干大きいらしい.

  6. スキャンレート計測するために CONSOLE_ENABLE = yes にしないといけないんだけど容量食いすぎでコンパイルに失敗する……

  7. QMKでPro Micro用のファームを小さくする

  8. Reducing firmware size in QMK – Thomas Baart

  9. ここまでやっても失敗する.

    % git diff
    diff --git a/keyboards/geonworks/frogmini/fmh/config.h b/keyboards/geonworks/frogmini/fmh/config.h
    index 7410a49e59..3ae8cd1047 100644
    --- a/keyboards/geonworks/frogmini/fmh/config.h
    +++ b/keyboards/geonworks/frogmini/fmh/config.h
    @@ -28,3 +28,10 @@ along with this program.  If not, see .
    
     #define LOCKING_SUPPORT_ENABLE
     #define LOCKING_RESYNC_ENABLE
    +
    +#define FORCE_NKRO
    +#define DEBUG_MATRIX_SCAN_RATE
    +#undef LOCKING_SUPPORT_ENABLE
    +#undef LOCKING_RESYNC_ENABLE
    +#undef NO_ACTION_ONESHOT
    +#undef NO_ACTION_TAPPING
    diff --git a/keyboards/geonworks/frogmini/fmh/info.json b/keyboards/geonworks/frogmini/fmh/info.json
    index 7b381bc587..ededef5c16 100644
    --- a/keyboards/geonworks/frogmini/fmh/info.json
    +++ b/keyboards/geonworks/frogmini/fmh/info.json
    @@ -8,6 +8,10 @@
             "pid": "0x2D28",
             "device_version": "0.0.1"
         },
    +    "build": {
    +      "debounce_type": "sym_eager_pk"
    +    },
    +    "debounce": 25,
         "matrix_pins": {
             "cols": ["C4", "C5", "B0", "C13", "C14", "C15", "B9", "C1", "C2", "C3", "A6", "A5", "A4", "A0"],
             "rows": ["A3", "A2", "A1", "B8", "A7", "C0"]
    diff --git a/keyboards/geonworks/frogmini/fmh/rules.mk b/keyboards/geonworks/frogmini/fmh/rules.mk
    index 1775ec5c41..df77fe9b76 100644
    --- a/keyboards/geonworks/frogmini/fmh/rules.mk
    +++ b/keyboards/geonworks/frogmini/fmh/rules.mk
    @@ -9,7 +9,10 @@ COMMAND_ENABLE = no        # Commands for debug and configuration
     NKRO_ENABLE = yes          # Enable N-Key Rollover
     RGBLIGHT_ENABLE = no       # Enable keyboard RGB underglow
     AUDIO_ENABLE = no          # Audio output
    -LTO_ENABLE = no
     ENCODER_ENABLE = no
    
     BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
    +
    +LTO_ENABLE = yes
    +SPACE_CADET_ENABLE = no
    +MAGIC_ENABLE = no
    
    % ls -l geonworks_frogmini_fmh_via.bin
    -rw-r--r-- 1 sumadoratyper sumadoratyper 58304 Dec 19 00:29 geonworks_frogmini_fmh_via.bin

    というか LTO_ENABLE = yes ならサイズ的には問題ないはずなんだけど, qmk compile ではエラー吐かれる. ARMだと何らかの副作用があるとかで使っちゃいけないんだっけこれ.

  10. NKROとEXTRAKEYまで無効化してようやくコンパイル通った.

  11. OG60とDZ60RGB_WKLは面倒な真似しなくてもコンパイル通せた.

  12. 計測結果:

    PCBMCUMax Clock Rate (MHz)Debounce AlgorithmScan Rate (Hz, 入力なし)Scan Rate (Hz, ガチャガチャ時)
    OG60RP2040133sym_eager_pk51114952
    sym_defer_pk52385099
    FM60-HSTM32F40184sym_eager_pk40903101
    sym_defer_pk40003102
    DZ60RGB-WKLATmega32U416sym_eager_pk20971775
    sym_defer_pk20971781

    defer/eagerでスキャンの差はほぼなしと. DZ60RGB_WKL V2.1は前に計測したときよりなんか大分良くなってるね. 以前は1,300Hzくらいだった. FM60-Hだけガチャガチャすると大幅に落ちるのはなんだろ.