組み込みソフトの職人芸 リングバッファ【VOICEVOX】【プログラミング】

Поделиться
HTML-код
  • Опубликовано: 24 ноя 2024

Комментарии • 25

  • @rydotyosh
    @rydotyosh 17 дней назад +32

    マイコンで%演算は遅そうなので、バッファ長を2^nにしてビット演算にしたいですね〜

    • @sy-cg7te
      @sy-cg7te 17 дней назад +8

      やるやる。割り込み部分だけアセンブラで書いたりしたもんだ

    • @satoukouji9618
      @satoukouji9618 16 дней назад +1

      バッファ長の指定や制限が無ければそうしたいですよね。

  • @肉巻きアスパラガフNo.2317
    @肉巻きアスパラガフNo.2317 18 дней назад +12

    最近授業でやってるようなところで面白い
    (情報学部生)

  • @gugulecus8782
    @gugulecus8782 16 дней назад +7

    この技法は、ゲームを作る際にはよく使われており、というのは定かではありませんが、ゲーミングプログラムにおいては覚えておいたほうがいい技法なのです。
    使いどころとしましては、キーボード、マウス、ジョイスティックの入力部分でしょうかね。
    入力イベントはいつ発生するのかわかりませんので、イベント発生時にバッファにセットしてheadを動かし、1/60秒ごとに動くループの中で、それまでのイベントを取り出してtailを動かす、といったところですねぇ。
    特にマウスは、秒間8000回ものイベントを出すアホみたいな機種もありますので、そんなマウスで各座標を取り込む気なら、そのバッファサイズも注意が必要だったりするのです。

  • @銀河鉄道の昼-g6s
    @銀河鉄道の昼-g6s 16 дней назад +3

    どんなレイヤーにおいてもパフォーマンスを意識することは大事ですからね。

  • @YukiYukiVirtual
    @YukiYukiVirtual 16 дней назад +5

    プロセス間で共有するリンクバッファのindex更新でバグあってやばかった思い出

  • @irohasu-iroha
    @irohasu-iroha 17 дней назад +10

    Head, tailは逆のパターンが多い気がする
    Headが読み出しで、tailが書き込み

  • @user-xt6go9sz1o
    @user-xt6go9sz1o 17 дней назад +4

    非常に良い

  • @piccadillylily
    @piccadillylily 6 дней назад

    SHとかH8で組んでた時はそんな風にしてたかな。けど割算器が無いcpuでは%は使いたくないですね。
    高速化を狙ってるとバッファ長の折り返しに条件分岐を使うのが嫌だったので、カウンタにマスク掛けたり、バッファ長を256にしてuint8で数えたりしました。けど、コンパイル後にアセンブラを見ても大した事が無かったので、途中で飽きちゃった。
    Arduino始めた時にSHのソースを移植したけど、Arduinoは内部でシリアルをバッファリングしてる感じがしたので、面倒なループはやめて単純にしちゃいました。割り込みレベルとかソフト割り込みが使えないっぽいしコンパイラも何だか不気味なので、昔みたく凝ってもメリットが全然無さそうなので簡単に済ましてます。

  • @あうら-g2j
    @あうら-g2j 17 дней назад +4

    キューを実装する時にリングバッファを使うのは、決して組み込みに限らない話のような気がします。バッファを越えたら次のバッファを確保、とはしたくありませんし、かと言って取り出す度にデータを移動するなんて言語道断。組み込みのリングバッファとの違いは「バッファが一杯になったらバッファを増やせる」くらい?

    • @klk2937
      @klk2937 17 дней назад +2

      カーネルが持ってるIO用のキューとかもリングバッファですもんね

    • @あうら-g2j
      @あうら-g2j 17 дней назад +1

      C++やC#の標準ライブラリのキューも拡張可能なリングバッファですね。

  • @小豆はん
    @小豆はん 14 дней назад

    プログラミングやったことないんで当てずっぽうなんですけど、LISPってこういう処理得意だったりするんですかね。

  • @un_chi
    @un_chi 16 дней назад +1

    カメラの画像取込でも使いますね🥺

  • @iwacchi9821
    @iwacchi9821 16 дней назад

    CD焼いてた世代はバッファアンダーランエラーでおなじみ

  • @dmdm1234
    @dmdm1234 17 дней назад +4

    基本情報技術者試験を思い出します

  • @ぐうたらぼっち-e7t
    @ぐうたらぼっち-e7t 16 дней назад

    最近のシリアル通信チップってよくバッファ機能まで内蔵してくれてるけどさ、あれ、待機パケットを『ちょっとだけ弄る』が出来ないせいで結局ビットバングすることになったり、逆に不便になる場面多くないですか?なんか余計なお世話って印象がさぁ…💢

  • @zako57
    @zako57 17 дней назад +1

    6:52 Unityのシェーダースクリプト書くとき、if文使うとバカ重くなるから無理やり三項演算子使ってたの思い出した

    • @ぐうたらぼっち-e7t
      @ぐうたらぼっち-e7t 16 дней назад +2

      三項演算子ってif文のエイリアスだと思ってたんですけどUnityでは違うんですか?!
      ブロックを生成しない、ってことなのか…?
      そしてシェーダースクリプトってCPUでコンパイルしてGPU処理するもの、って認識で合ってます?じゃあ、コンパイル時点で0/1との積算に書き換えている…?
      Unityに興味があるので気になります!もしよかったら教えて欲しいです!!

    • @Otoboke123
      @Otoboke123 16 дней назад

      私もこれ,昔聞いたことがあって三項演算子を使ってました...
      でも技術的根拠isどこ...?( ´∀` )

  • @kosetei1
    @kosetei1 16 дней назад

    そんな遅いマイコン今時使うか?

    • @馬鹿は伝染病で移る
      @馬鹿は伝染病で移る 11 дней назад

      組み込み系わからないんですが…。
      客「あれもしたい!これもしたい!もっとしたい!もっともっとしたい~♪処理速度には余裕がある~♪」
      プログラマー「ハードにミスがある~♪ソフトで逃げれないかだと!想定外なバグがある~♪対応で行数が増える!」
      結果としてカツカツに……。
      あると思います。

  • @anabis173
    @anabis173 9 дней назад

    6:15 モジュロ演算で%はあめえ
    (H/Wで除算サポートしてないなら)&でマスク取った方が早い(ぇ
    7:44 よく「読込側はメインtaskだから割り込み禁止しましょう」って見るけど、このリングバッファはFIFOだから割込禁止しなくても(仮にどのタイミングでプリエンプティブな書込割込が入ったとしても)基本的に影響無いとボクは思うんだ
    いずれにしても聞き齧りでそのまま動画にするのやめようぜ