いろいろ試す57

GWは北陸出張と雨でどこにも行けなかった…!!!
気力があるうちに貯めたネタを吐いていきます…!

●OpenOCDにちょっと困った変更
ねむいさんのOpenOCDを使った書き込み手順では従来elfファイルを
指定して書き込み/ベリファイを行っておりました。しかし…
一部の方は気づいたかと思いますがOpenOCDでこのアップデート
がマージされて以来
一部のelfファイルの書き込みができなくなって
しまいました…

具体的に言うとSTM32H7の作例のようなRAMの割り振りをしていて
BSS領域とデータ領域が別々に存在したり起動後にITCMにコードを
置くような使い方のプログラムが全滅です。


具体的にはこうなります…余計なことしやがって…F〇CK!!!
しかもフリーズ…


対策ですがelfの代わりにhexファイルやアドレスを指定して
binファイルを書き込んでやればいつも通りに書き込みとベリ
ファイが可能です。もちろん書き込み後は普通に動作します。


デバッグに関しては普通にelfファイルを指定しこちらは問題
なくデバッグが可能です。


私のARM開発環境まねされてる方は上記対応をお願いいたします。
ちなみにこのコミット、やっぱり方々から不評が出ているようで
差戻しの提案が出ております・・・早く元に戻して…!

20230514追:
差し戻しパッチ適用しました!!
普通にelfファイルでフラッシュ書き込みできます!!!





●ARM-GCCアップデート
ARM-GCCも2023年版にアップデートしております。
メジャーバージョン12->13を意識したものになっています。

arm-none-eabi-gcc (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 12.2.1 20221205


arm-none-eabi-gcc (Arm GNU Toolchain 12.2.MPACBTI-Rel1 (Build arm-12-mpacbti.34)) 12.2.1 20230214


アップデート内容はCortex-M85とCortex-M PACBTI extensionやらの
サポートだそうですが私が気付いた最大の違いはC++の例外処理に
関するコードが挿入されていることです。


具体的にはeh_frame,ARM.exidxに相当するコードが挿入され、若干バイナリ
サイズが増加しております。ARM.exidxとか10年以上昔からありますが
コードが追加されています…ていうかこちらが本来の姿だったのでは…

仕事ではmbedOSでC++バリバリ使っているのでないがしろにできないので
注視していこうと思います。


また、おきぱのFatFs移植例でLTDCを使っているSTM32F7,STM32H7について
従来最適化レベルを"-Ofast"で行っておりましたが無駄にサイズが大きく
なり過ぎているのとlibpngデコード時に画面が激しく乱れる副作用が
GCC12に上がったころから出てきてしまいましたのでSTM32F4の作例も含め
スタンダードな"-O2"にして提供することにしました。


●おきぱのプログラム大更新

STM32系のメンテを続けているSTM32系のFatFs移植例の大更新を
行いました。メインは以下の箇所です。
1. C++で禁止されている"__(ダブルアンダースコア)"で始まるマクロや定義
 およびコーディング規約に反する一部の変数名の修正
 ->このポカミス思いっきり全弾ヒットしていましたorz

 ↑こういうやつ
   STM32Primer2の件でちょこっと触れたやつですね。
  特にインクルードガードに関してはほぼ全部ダブルアンダー
  スコアやらかしていましたので全部修正してやりました…はぁはぁ。

  識別子についてはこちらの方の解説もわかりやすいです。

ChaN'師のFatFsは数年前すでに対応済みでしたね…サスガダァ…

2. タッチパネル入力で押しっぱなしで連打機能
 ->タッチパネルで該当するキーを押して一定時間後連打するやつです。
  この機能はもともとはタッチパネルに一回ちょっと触れただけで
  複数回押されてしまうことになっていたバグの修正からで、ついで
  だから入れようということで追加しました。


  ただし↑と↓だけ機能します。それだけでもすごい楽ですね。
  該当コードは¥lib¥display¥abstract¥src¥touch_if.cの230行目
  以降を参考にしてください。

  これも"ねむいさんのプログラムってタッチパネル入力だけ雑"
  って10年間くらい言われ続けていましたがやっと重い腰が上がり
  ました。そして安心して座れる…。


また、下記のi2cデバイスの動作を絡めたexampleも超大改版を行い
ましたが、これに関しては内容が多すぎるので次回に委ねます。
先に公表しておきますが改変したプログラムは下記になります。
STM32F03x
STM32G03xxx
STM32C03xxx
STM32F401,F411



●STM32向I2Cタイミングレジスタの値計算機作った
STM32F0以降のI2Cはレジスタの構造が一新されてしまいクロック生成に
超めんどくさい計算式が必要でそれをタイミングレジスタに入れる
ようになってしまいました。一応計算用のエクセルファイルが配布
されていますがF3までしかサポートしてなくて使いづらいので…
自分で作製しました。

・使い方

まずexeを立ち上げます。デフォルトでI2Cカーネルクロック48MHz,I2C
のクロック周波数は100(KHz)が設定されております。
I2Cのカーネルクロックは上限400MHzまで設定可能、I2Cクロックは100kHz,
400kHz,1000kHzの3種類だけです。それ以外を設定すると計算結果が0に
なるステキ仕様となっております。

ひとまずKeisanボタンを押すとタイミングレジスタに入れる値がポンと
出てきます。


これを自分のプロジェクトのI2Cの設定時にコピーペーストしましょう。

・精度は?

(※STM32C0-NUCLEOの作例です)
ぁららー(脂汗)
う〜んまぁいいんじゃないでしょうか…
すみません適当のやっけつ仕事で…

ちなみにSTMicroが提供しているi2c_timing_utility.cの計算時の定数値
のtriseの値が変な値になっていて実際に波形もへんてこりんなものに
なっていましたのでエクセルファイルの値準拠に変えて計算しています。

STM32F0,STM32F3,STM32G0,STM32C0で確認しましたのでたぶん大丈夫だと
おもいます…


●PicoScopeのソフトが大変更!メジャーバージョンが7に!
読んで字のごとくです…長らくbetaバージョンだったのがついに
メジャーリリースとなったのでねむいさんも乗り換えたのですが…


あのさぁ…特殊なトリガかけようとしたら何度やってもすぐプログラム
落ちるんですけぉ!1111!!11!!1!
今まで6を使ってそれのUIに慣れてしまったのですっっっっっっっごい
使いづらいうえにbuggyとかやめてください…

で、やっぱり苦情が多かったのか前バージョンの6のソフトもダウン
ロードできるようになっております
…もっと7が安定化するまで当分6
で運用ですね…。

Go to top of page