2024年7月20日土曜日

STM32 FreeRTOSから離脱します

STM32F401を動かしています.RTOSを使っています.せまふぉをビシバシ使うほどには本気じゃないですけど、threadを何個か生成して働いてもらっています.

RTOSでない場合は、TIMER割り込み界隈にしこたま自作codeを仕込まなくちゃいけないので、見通しが悪くなってなんかイマイチな気がするんです.

RTOSの処理がだんだん重たくなってきたこのごろ、、、異常動作が増えてきました.

1)原因不明のHardFault

2)オカルトめいた誤動作
sub1はhung-upするが、sub2なら正常とか.
 sub1(){
  if(flag==0) return;
  process();
 }
 sub2(){
  if(flag!=0) process();
 }

今日はこの手の超常現象で丸一日潰しました.buffer[]を食い潰してたりしないかと調べたけどシロでした.

内部RAMは32kBぐらい空いてるのでスタック不足は無いと思います.

RTOSのbugかな?

というわけで、RTOSを止めます.
TIMER割り込みで地道にやります.君子危うきに近寄らず.


翌日追記:RTOSをやめて通常のTIMER割り込み形式に書き替えたら超安定して動いています.ビクともせん!

かしこ

10 件のコメント:

  1. ようこそ、「マルチタスク・スレッドの世界」へ!

    以前にも書いたと思いますが、この界隈では、
    ・原因不明のxxx
    ・オカルトめいた(誤)動作
    などは、「日常」です(笑)
    プログラミングの時間より、「幽霊退治」の時間のほうが長いです。
    まるで、「ゴーストバスターズ」の世界です。「バグ退散」の、お札のほうが効いたりして。
    ※まぁ、現実的な解釈では、↑の2なんて、flag 判断と、process() の間に、何らかのシステムタスクorスレッド処理が挟まって、そうなったのだと思いますが。
    sub2() のほうは、中断されること無くそのまま実行されてるからOK、とか。
    sub1() のほうは、コンテキストスイッチの戻りに失敗して、「変なアドレスに飛んだ」とか、
    (まぁ、これって単にバグですけど。)sub2() も、「マシン負荷が上がる」と、同じ事になるとかね。

    ※RTOS って、FreeRTOSを、STMが、自社CPU用に移植した奴ですかね?
    まぁ、まだデバッグが足りないんだろうな・・・ あんまり「シビアな用途」には、耐えられないのかも?

    返信削除
    返信
    1. ホントは、APIか何かに、
      ・ココからココ迄は、「コンテキストスイッチ禁止」
      とかの、書き方があるとは思いますが、まぁ、調べるよりも、今は自分で書いたほうが早いかな・・・
      ※時間があれば、調べてみるのですが

      削除
    2. 他のRTOSだと、DI(Disable Interrupt), EI(Enable Interrupt) みたいなのがあるのですが。多分、FreeRTOS にもあるハズ

      削除
    3. 上のsub1sub2の件はたまに落ちるのではなくて一発百中で腰が抜けます。
      他にもprint分の有無で変わったりするのもあったな。
      free DLしてNo supportで使えるほど甘くはないってことですね。
      火遊びはこれまで。
      STMのRTOSはSTMカスタマイズのようです。
      退散退散。
      一時楽しく過ごさせてもらいました。無料で。

      削除
  2. murasaki
    UNIXの流れを汲むLinuxにはプログラマの居心地を良くしようとしてくれる何かを感じますが、RTOSの世界にそれはなく、窮屈で容赦のない非寛容な居心地の悪さを感じます〜。
    少ないリソースの中でプログラマが犠牲になることで成り立つ世界みたいな。昔はそういうの嫌いではなかったですが、pythonとかで甘やかされているうちにちょっと無理になってきてしまいました。

    返信削除
    返信
    1. ふつーのTIMER割り込みで運用したら動作が鉄板になりました(祝)

      RTOS  10辛 素人には食えん
      STM   5辛 安定した辛さ
      Arduino  2辛 容易だがパンチが足りない
      win    辛口 喰ったことない
      Linux   中辛 Cで計算するのに最適
      python   甘口 ボンカレーのごとき味気無さ

      削除
    2. murasaki
      raspberrypiとブレッドボードとPythonで工作中〜。あまりおもしろくないです。甘口過ぎて糖尿病になりそうです。

      削除
    3. ラズベリーフレーバー
      ココナツフレーバー
      チョコチップ
      練乳がけ

      うぇ~ クレープ屋さん

      削除
  3. スズキです。反射がきつくて見えづらいけれども、ぼっちちゃんですね。うらやましい。
    そういや、同じく7−11でアイス2個買ったら結束バンドメンバーのクリアファイルもらえる企画があったのですが、虹香ちゃんしか残っていませんでした。虹香ちゃん好きなのでよかったけど、世間的には不人気なのね。

    返信削除
    返信
    1. ぼっちちゃんを引き当てました

      7/11のクリアファイルは当日午前に4色GETしました.アイス8個かった →奥さんがぜんぶ喰った
      こちらでは喜多郁代(赤髪)が残っていました

      ヒラ的には金髪が好みです

      削除