2024年5月12日日曜日

STM32で1bit DAC出力できるかな(2)HAL driver巨大すぎ? doubleのせいでした

前回の続きです.

昨日、秋月でSTM32C011J4M7という8ピンマイコンを買いました.@140円.
これでも32bitCPUでTIMER, UART, ADC, DMAなどが一通り入ってます.
これを使って1bit DAC型のsin波発生器を作ろうとしています.
JLCPCBにプリント基板を発注もしました.

しかしトラブル発生中.

同CPUには、FLASH 16kB、RAM 6kBが載っています.こんだけありゃぁ極楽の楽勝と高を括っていたのですが、FLASH overflowでビルドが通らないよ.う~ん、ミニマム過ぎて企画だおれか・・・

ビルド結果のFLASH状況です..textで18.46kB喰ってるのが大きすぎる.
net調査によると、HAL driverがやたらと贅沢にFLASHを食い散らかすらしい.
しかしHAL driverを使わずにSTM32のprogrammingする気にならんぞ.

以下では.map fileを見ます.

HAL driverをloadしてるところがあります.妥当なものたち.
 LOAD ...../stm32c0xx_hal.o
 LOAD ...../stm32c0xx_hal_cortex.o  CPU
 LOAD ...../stm32c0xx_hal_dma.o   DMA
 LOAD ...../stm32c0xx_hal_exti.o   外部割込み
 LOAD ...../stm32c0xx_hal_flash.o   FLASH
 LOAD ...../stm32c0xx_hal_gpio.o   GPIO
 LOAD ...../stm32c0xx_hal_i2s.o    I2S
 LOAD ...../stm32c0xx_hal_pwr.o   電源
 LOAD ...../stm32c0xx_hal_rcc.o    clock
サイズoptimizeかけてるから、使ってない関数は削除してるんじゃね?と思うので仔細に見てゆくと、そうなっているようです.無関係と思われる関数はmapされてない.
また、HAL driverの各関数の占有サイズも驚くほどではないです.

※無関係な関数とは、I2S_Recieve()みたいな関数です.ここではI2S_Transfer()しか使わないので.

さらに.mapを見てゆきますと、、、、やたらと.text(program領域)を喰っている連続箇所があります.そのうちの1つがこれ.ARM製のlibraryのようです.
 .text 0x738 ../lib/gcc/arm-none-eabi/..../libgcc.a(subdf3.o)
738H=1.8kBも喰ってるsubdf3とは何かというと、floating point emulatorの「引き算だけ」です.こんなのが四則演算でポコポコある.浮動小数点のSin()を使うのでぐぅの音も出ない.

さらに.mapを下がってゆくと、.rodata(固定テーブル領域)が1kBぐらい喰われていて、その中で大き目なのは三角関数のテーブルっぽい感じ.でも1kBなので許す.

というわけで、、、いまのところこんなです.
 ・FLASH 16kBに対して.text 18.9kBとoverflow
 ・FLASH喰いはHAL driverではなく、
 ・浮動小数点演算libraryが巨大みたい

むかし、STM8Sで浮動小数点演算をさせたことがあったのだけど、その時はメモリ圧迫はそんなでもなかったんだがなぁ.

困ったなぁ.
このCPUってfloating point accelerator載ってないのかな?

ーーーー
どーん、治った

まず、FPAは載ってませんでした.ちなみにcoretex-m0です.

.textが10.84kBに減りました.ビルド通った.
何をやったのかというと、これだけです.
 sin() → sinf()
 atan() → atanf()
浮動小数点演算libraryの棚から、doubleを捨てて、floatのみにしたというだけでした.

めでたし、めでたし.

1へ    3へ

ーーーー
その後:
I2Sの関数がバグってる地雷を踏みました.マイナーCPUのlibraryはdebugしてなくない? こうゆうの2度目だわ.

さらにその後:
debuggerで追いかけたらI2S enable bitを立てたとたんにreset vectorへ飛んでるんですけど....

もっとその後:
各pinにいろいろな機能をassignできる.assignできるのは唯一の機能に限られる.そこで仮説であるが、I2S master clk出力pin=reset pinに機能重複してしまうbugがあるんじゃないかな? I2Sを起動したとたんに自分をresetしてしまうギャグ.

その後その後:
I2S master clk出力pin=reset pinに機能重複 が正解でした.reset pinはGPIO設定で排他的に設定されるのかと思ってたのですが違いました.reset pinを殺すにはoption BYTEで明示的に殺さなくちゃいけません.また工場出荷設定ではreset pinは生かされています.

うごいた.今日一日悩んだ...後でレポします.

かしこ

32 件のコメント:

  1. >浮動小数点演算libraryの棚から、doubleを捨てて、floatのみにしたというだけ
    これって、例の、
    ・何も言わないと「一番高い(と思われる)精度で勝手に最適化する」
    という奴ですかね?(確か、これは、C言語自体の仕様だったような・・・)
    まぁ、linux とかで動かしてる分には気にしないけど、「組み込み系」は、
    ・「1バイト(ビット)」の差が、命取りになる
    世界ですからねー。(というか、コンパイルオプションに、そういうの無いのか?)

    ※まだまだ、他にも「地雷」が、ありそうですね。

    返信削除
    返信
    1. doubleはぜーんぜん要らないのに勝手にいれないでっ!
      数値関数のdouble/float設定するoptionとかあればいいのに.

      削除
    2. 今気づきましたが、タイトルが、
      ・double ジャナクテ bouble
      に、なってますよ・・・
      ※ちなみに、これを Google翻訳にかけてみたら、
      「(自動検出にして)しばらく無反応」 → 「英語で自動検出」(もしかして: bubble が付いた)
      日本語訳:ブーブル
      に、なりました・・・
      ※最近の Google翻訳は、「翻訳出来ない単語」は、みーんな「カタカナ表記」を出して、誤魔化すようになりましたね。昔は「そんなの知らない」だったような?
      まぁ、変に「誤訳」されるよりはましといえばマシですが、「カタカナで誤魔化す」は、無いだろう・・・ あと、「(漢字の)日本語訳」があるにもかかわらず「カタカナ」(単語によっては、そのほうが良い場合もあるが)が出て来て、非常に「英和辞典的な使い方」がやりにくくなってる気がする。
      ※これも何故か、ちょっと「入力文」を変えると、突然「漢字の日本語訳」に、なったりするし。
      (ホントに、「その時の気分」で変わる、ような感じがする。改行有り・無しでも、突然「漢字訳」に、変わったりするから、逆に、「スペース入れたり、改行してみたり」して、目的の単語が出るようにすることもある(笑)

      削除
    3. あ、これじゃぁバブルだ
      浮動小数点なので泡みたいなもんだからなぁ
      だがしかし、なおしておくのです

      削除
  2. >マイナーCPUのlibraryはdebugしてなくない?
    多分、
    ・シミュレータ(開発環境。勿論、パソコン上とかの)
    では確認してるんだろうけど、一々「実機ではやってない」
    (おおかた、「一番大きい、全機能が載ってる奴」ではチェックしても、こういう「シュリンクチップ」の実機検証は、全部やってないのでしょうね・・・シュリンクした時に、微妙に「回路の動き(タイミング)が変わってたり」する)
    とかのような気がします。

    なんだかなー

    返信削除
    返信
    1. こういうのを、「マメに」開発元に報告したら、
      ・謝礼
      が、貰えたりして。(あるいは「開発環境」を、タダで呉れたりとか。)
      ※そして、「開発中の未公開版チップ」とか、触れるようになったらスゴイですね。

      削除
    2. STM32のQ&Aサイトを見ていると、userがSTM supprtの人にこんなことを言ってたりします
      「このレベルのbugが残っているということは実際に動かしてないとしか思えません」

      I agree.

      削除
    3. 「無料同然で環境を提供してくれてるんだからあまり文句言うつもりはないが・・・」
      という外人さんもいます.

      I agree.

      削除
  3. ARMネタのおまけ:
    http://www.publickey1.jp/blog/24/googlearmgoogle_axionx8650google_cloud_next_24.html
    Google、同社初の独自Armプロセッサ「Google Axion」発表。
    ※私も知らなかったのですが、AWS(Amazon)や Microsoft () も、
    ・ARM ベースの、独自プロセッサ
    を、開発してたのですね・・・
    >Armベースのプロセッサは、すでにAWSとマイクロソフトがそれぞれ発表済みです。
    >AWSは2018年に独自のArmプロセッサである「Graviton」を発表しており、2023年には最新版の「Graviton4」を発表しています。
    >マイクロソフトは昨年(2023年)に同社初のArmベースの独自プロセッサ「Azure Cobalt」を発表しています。
    ※「独自チップ」を開発してるのは、Apple くらいだと思っていました。
    (Apple は、「Apple Silicon」として、iPhone や Macintosh で使われていることは有名です。)
    (Facebook(Meta) は、AI系の推論チップを、独自開発している。)
    これで、いわゆる「GAFA(M)」と言われている企業は、全社、
    ・独自チップを開発
    したことになります。
    もう、これからは、「一企業一CPU」は、当たり前になるのかも知れません・・・
    ※確かに、こうしておけば、仮に「ソフトを盗まれて」も、チップが使えなければ意味が無い(独自なので、対策は容易)ので、抑止力になりますね。ユーザーの囲い込みにも有利に働きそうです。
    なんかまだ、「ARMの天下」は、続きそうだなぁ・・・

    返信削除
    返信
    1. >Microsoft () も、
        ↓
      >Microsoft (Azure) も、
      です・・・

      削除
    2. AZARE(あざれ)という地味な化粧品屋がありまして、azureを見るといつもそれを思い出してしまいます.

      CPU名にアクシオンとかグラビトンとか素粒子系が多いのはなんでかなと.

      かつてソニーもcellというのをやってたけどビビッてやめさせられました.「自社製品には自社製半導体をたっぷり使う」というのは正しいのですが、当時のソニーはお金が無かったのでHQがおしっこチビりそうになってたみたいでした~

      教訓:競争力の要には出資を惜しまないGAFAは偉い

      削除
    3. >「自社製品には自社製半導体をたっぷり使う」というのは正しい
      と、言いながら、イマドキは、「論理(回路)設計は自社」でも、結局は、
      ・プロセス(製造)は、殆ど「tsmc」
      だったりするので、「なんだかなー」と、思わなくもない。
      ※「自社でマトモなプロセスまで持ってる」のは、他には、「SAMSUNG」「Intel」位のものですからねー
      まぁ、↑に上げた会社(GAFAM)は、基本、
      ・ソフトウエア(アプリケーション)会社
      なので、しょうがないけど・・・
      (それでも、「自社チップ」を持つメリットは大きいと思う。)

      削除
    4. 日本にも「半導体(ICチップ)自体を製造できる」会社はありますが、軒並み、
      ・10年前のプロセス
      なので、「先端用途(クラウド、とか、AIとか・・・)」には使えません。
      (まぁ、それでも「自社で作る」意味が無いわけでは無いですが。他社との差別化にはなるから。)
      ※せいぜい「民生用途」と、思ったけど、イマドキ「TV用のIC」(昔は、コレの出荷が一番多かった)作ってもしょうがないし、よく考えると「使い道」無いですね(笑)
      あの、「ESP8266」「ESP32」でさえ、実は、
      ・tsmc
      が、「チップ製造を担当」してるし(笑)(仕様書に、ちゃんと明記されてます。これ何故か「制裁」から逃れてるんだよな・・・ESPに至っては、最近は「RISC-V化」してるし(笑)
      ※だったら、日本メーカーも「そういうの」作ってもらえよ!と思ったり。
      (Sony の、「Spresense」って、どこのプロセスなのかな?自社じゃなくて「tsmc」だったら、笑っちゃうけど。)

      削除
    5. ソニーのそのchipはたぶんtsmcなんでしょう。もう微細な論理ICは作ってない気がするんです。

      削除
  4. そう言えば、ちょっと前まで「世界一」の称号を持っていた、
    ・「スーパーコンピューター 富岳」(富士通)
    も、実は、
    ・Architecture: ARM, Process: tsmc
    だったんだよなー。
    ※ある意味、↑の会社たちよりも「先んじて」やっていたという意味では偉い。
    でも、「なんで『日本製』の半導体を使わなかったの?」と、結構当時、言われてました。
    (↑に書いた通り、「10年前のプロセス」しか作れなかったからなんだろうな、と思います)
    (その前の「京」は、名実ともに「日本製」の、半導体を使ってました。ちなみに、45nm プロセスだったらしい。それくらいまでは「国内で」作れたんですね。)
    (45nm は、Intel CPU で言うと、「Core2 QUAD」とか「Core i の一番最初」に、相当します)

    返信削除
    返信
    1. 45は築年数古い物件

      ひら的にはベクトルプロセッサにもっと注力して欲しいけど、fabはどうせ桃園界隈じゃいまいちなのかな

      削除
    2. >ベクトルプロセッサにもっと注力して欲しい
      現在の「AI」って、結局、内部的には、
      ・「狂ったように」積和演算してるだけ(しかも、「超多次元」レベルで)
      なので、事実上の、
      ・ベクトル演算
      を、しているとも言えますけど。
      ※まぁ、言いたいことは分かります。もっと、既存の
      ・「気象シミュレーション」みたいなやつ、に注力すれば?
      ってことですよね?
      ※そういう意味では、既に「富岳」は、
      ・どっちでも使えるようになって
      ますけどね。。。
      ※「ある時は、『気象シミュレーション』」、ある時は、「『AI(GPT系)』プロセッサ」と、ホントに何でもできる(笑)のがスゴイ

      削除
    3. リアルタイムレイトレーシングやっちゃってください

      削除
  5. そう言えば、AMD が、Intel よりも「高性能なCPU を作れた理由」は、やっぱり、
    ・リサ・スーが、台湾出身だった
    と言うのが大きいんだろうな・・・ (AMD のハイエンドCPU は、みんな「tsmc製」です。)
    ※「AMD」自体は、「米国の会社」であって、台湾資本は入って無い?ハズですが。
    「リサ・スー」自身は、「3歳で渡米」とあるので、「ほぼアメリカ人」(但し「米国生まれ」ではないので、何時かは不明だが「アメリカ国籍」を取っているハズ。)

    返信削除
    返信
    1. intelはプロセスで遅れましたかね

      削除
    2. Intel は、一時期「スマホの台頭」などで、CPU事業が怪しくなりかけたことがあって、その時に、イロイロと「経営の合理化」を、進めました。
      その時期のCEOが、「経営重視、技術軽視」だったため
      (まぁ、ある意味「潰れかかってる」のだから、間違ってはいませんが。)
      に、あろうことか、
      ・次期プロセス開発(これには「死ぬほどカネが掛かる」し、かつ「費用対効果」が、すぐには見えにくい。)
      の、「中止」だか「費用削減」、また、その「キーマン」を、クビにしてしまいました・・・
      なので、「開発現場」は、大混乱に陥って、「従来プロセスを使わざるを得なかった」と、言われています。
      ※あの「インテル」でさえ、こんなことするんだなー、と、この話を聞いた時には思いました。
      で、運悪く(運良く?)この時期に、AMDのCEOが、「リサ・スー」になって、この隙をついて、伸しあがっていきました。

      削除
    3. 私は、この話を聞くたびに、
      ・どこかの陰謀ではないか?
      (インテルの株価が下がって、AMDの株価が上がって「得をする」奴が仕掛けた罠、とか)
      と、思っています。
      ※そう言えば、日本でも「似たような話」を、聞いたような・・・
      つくづく、技術系の会社は、経営陣に「技術への理解が無いと」簡単におかしくなるんだな、と思いました。

      削除
    4. ちなみに、Intel は、その時期あたりから
      ・創業メンバーが、余り会社経営に関わら(れ)なくなった
      (既に現在、Intel 創業者と言われている人は、みんな「物故者」に、なってます。)
      気がします。
      ※よっぽど、創業者が「優秀」でないと、会社なんて「続かない」んだなー、と思いました。
      経営ノウハウを、如何に「次期上層部に、伝えていくか」に、失敗したら、「あっと言う間もなく」試合終了。合掌。

      削除
    5. 技術が変遷してゆく業界はやるべきことがどんどん変わってしまうのでマネジメントが難しいですね.トリニトロン然り、VTR然り.

      会社が大きくなるにつれ、権力欲が強い者が競争を勝ち抜いて上層部を占めるようになります.すると、占いとかオカルトで技術開発投資するようなクレイジーな状況に容易に堕ちてゆきます.

      それに懲りてか、ソニーは文系の会社に生まれ変わって復活しました.

      占いとかオカルトで投資決定するようなクレイジーな状況とは、現在の霞が関とか永田町でやってることも同じです.少子化対策とか.再エネ賦課金とか.岸田とか.
      昭和10年代に戦争になだれ込んだ当時の霞が関や永田町も占いオカルトレベルのクレイジーでした.

      削除
    6. ソニーの生き残りは、液晶はサムチョンとやって絶滅したがCCDは運よく国内のままで技術流出なくてよかったのかと予想

      Cellプロセッサーは、cpuとは知りませんでした
      アルディーノに毛が生えたくらいを1000倍にしたくらいとばかり

      任天堂は絶滅の危機でしたが得意の携帯ゲームスイッチで浮上

      PS5は、国内販売絞りすぎてゲーム自作pcや任天堂スイッチに逃げ出すかps4のままと、ユーチューブではまことしやかに解説してるます

      削除
    7. <会社が大きくなるにつれ
      マクドの原田えいこうみたいに直営店をFCに売ったり 人件費下げで年寄り雇用で憧れのバイト先でなくしたり 時短調理機械で在任中の数年間は短期的利益だして、財務をぼろにして未來のない会社になろうがいなくなったおとのことは知らんのサラリーマン社長は、短期的に配当よくても売り抜けしない投資家には害悪な感じですね

      削除
    8. CCDは運よく海外勢に追い越されずにkeepできました

      任天堂はゲームを作れるので強いです

      ソニーはゲーム作れなくてハードしか作れないので任天堂より弱いです

      ソニーはアニメを作れます

      削除
    9. 原田ってDVで逮捕されましたね、ワケワカメ

      削除
    10. <占いとかオカルトで
      地元のそういう見える人いて 社長から 電話かかってくるという話をきいたことある

      新築するなら神主よんで 式をしたいので 自分もオカルトかもしれない 地鎮祭

      削除
    11. ソニーのアニメなんてアニメじゃないとかばかにできるものではないと
      圧倒的パワーで ごり押しできそう
      制作費は 半端ないな あとは 監督やらなんやらの 選球眼ですねえ

      秋葉原でマーベラスのシャツ着た外人 日本人なら日本の漫画のシャツと考えると 即売会会場内以外は恥ずかしくて着れない

      外人は 恥ずかしがりはいないんだな

      削除
  6. CCDがソニーでだいたいできそうになったときに 外国科学者にCCDは ノイズが酷くてつかいものにならんよ と言われたけどソニーは 研究はできたので実用化研究を始めたと きいたことある
    0から1 だめだけと1から100なら日本人は得意だそう
    CCDは外国はソニーに追いつけないだろうなあ

    返信削除
  7. ありましたねDV 磁気テープではないほう

    そのころマクドの店内改装で背もたれなくて 牛丼屋かと思いました

    スタバとちがう 目黒にRといふスタバがあるそう
    話の種に一度見学したい
    持参スマホはないので 注文システム使えないし
    秋葉原1058円ジャンクスマホでは動かないと思う

    返信削除