2022年12月1日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 アセトン蒸しを試す為に新たな分岐カバーをプリントしています。プリント済みのは全てハンマーで壊したので試す物がありません。
 CAM曰く1個のプリントには7時間半を要するそうですが、3個を一括プリントするジョブにすればラップが1日なのでセット替えに丁度いでしょう。
 1日3個かぁ~って本音はさておき・・・

追記

 考えてみたら、アセトン蒸しは繊細なプリント向けではないかと。
 アセトンをハケで塗ったところ、これでいいんじゃないかという仕上がり。
 ボッテリ塗ると垂れてしまいますので薄く3回くらい塗り重ね。プリントの割れはアセトンを流し込めば埋まるようです。塗って1分もすれば触れる状態になるので作業性もいいです。
 キレイな仕上がりとは言えませんが、積層痕が消えて割れの要因は軽減したかと。
 ケーブルクランプの取り付けは、ABS対ナイロンですが、ネジ穴にアセトンを塗って捻じ込めば強烈に固定されます。防水もいけてる気がします。
 強度は壁面を肉厚にして十分になったようです。
 完成品を数本作って試してみましょう。

#3D

2022年12月9日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 コレ、すげー。

#雑談
Icon of admin
 3Dプリンタそのものが旧式なのも原因でしょうが、相変わらずABSは難しい。
 反る、寸法が出ない、高積層だと割れるなど、求める形にするのに難儀します。
 されど、機械特性は良く真夏の倉庫に保管しても形が崩れることがありません。
 求めると応えてくれない、諦めようとすると応えてくる、相変わらずのツンデレさんであります。

 形状に合わせた条件を探っていけばそれなりに仕上がるのですが至るまでが大変。どうにかしたい。
 息抜きになんとなくネットを検索したところ、「polymaker(ポリメーカー)」というブランドのフィラメントが良いとの書き込みを見つける。
 PLAやPETG並みに扱いが簡単って意味ではありませんが、ABSにしては画期的に条件が出やすいとのこと。人によってはコレ一択だそうです。
 amazonで検索したところ扱いがありました。他のフィラメントより20-30%ほどお値段は張るものの、仕上がりを探る手間、つまりテストプリントの回数が減るならむしろ安いと言えます。

 もちろんポチリました。
 入荷は週明けですが、試すのが楽しみです。

#3D

2022年12月13日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 本業が過密日程ですが、3Dプリンタを用いた試作はプリンタが働くだけなのでボチボチと進めています。

 仕上がりが良いとされているpolymakerのフィラメントの入荷は明日以降ですが、今使っているフィラメントでも仕上がりが良くなりました。
 FDM方式3Dプリンタの仕上がりを左右する主な要素は、
1) ノズルの移動速度
2) ノズルの温度
3) プラットフォームの温度
 となります。
 このところ気温が下がりましたので、少し高めに設定すると良いようです。特に、ABSで難儀する反りはプラットフォームの温度を上げることでかなりの改善をみました。

#3D
Icon of admin
 分岐カバーは様々な形を試しています。取り急ぎは中華TRUE1用です。ケーブルかレセプタクルかの組み合わせとなりますが、コストや手間を考えるとナカナカ決めきれません。
 今のところ、40×80のアルミ角パイプにプリントしたフタを取り付けるのが良さそうです。すべてをプリントすると割れやすいのもありますが、アルミ角パイプを使った方がコストを抑えられそうだからです。4m材からの切り出しですと1個あたり320円程度です。コストは全てをプリントした際のフィラメントと大差ありませんが、プリント時間を考えればアルミの方が安いと言えます。浸水しない接着が課題ですが、ABSとアルミの接着なのでどうしたものか思案中です。

#照明器具 #ガチ工作

2022年12月14日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 今は資料映像の書き出し待ちです。
 polymakerのABSフィラメントが入荷したので試したいけど時間がありません。
 本業では「私だけ、ちょっとだけ」のオーダーが山積しており、ここ数日は自由な時間がほとんど取れません。つか、睡眠時間を確保するだけで精一杯。
 お仕事を頂けるのはありがたいのですが、自分の用件を優先的に捻じ込もうと言質を取るというか揚げ足を取るというか勝手な解釈をする輩が居てとても不愉快だったりします。「この3日間のどれかは空くかもしれない」と伝えたのに「その3日のウチ、客先の都合で調整します」と返して来たアホがいる。なぜ、指定には合わせられないとかすべてダメかもしれないと言っていることを理解出来ないことが理解不能。
 自分に向けての言葉でもありますが、なんかこうコロナを経て世の中の心が狭くなっているような気がします。

#雑談

2022年12月15日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 このところライトアップのご要望を多く頂きます。
 特定の日時に人集めることが難しいため、特に行政さんではイベント予算の消化のためにライトアップをお考えになる事例が多いようです。

 ただ、長くて2か月の半仮設に適したライトアップの制御システムは既製品にありません。電源は電気工事さんにタイマーとリレーを施工してもらえば何とでもなりますが、DMXを出力する制御盤はありそうで無いのです。5時間のライトアップをDMXレコーダーで現尺保存などしたくありませんし。
 ならば作ってしまえとなるワケです。時刻をトリガーにシーンをめくる簡素なDMXコンソールってイメージですが、どうせならIoT的な手法でインターネット経由の遠隔操作が出来たらいいんじゃないかと。制御の核にRaspberryPiなどのLinuxベースのマイコンを用い、ポケットwi-fiを介してVPN接続するのです。VPNによってローカルLANと等しい接続をしてしまえばJAVA-scriptとPythonのsocketで自由度の高い制御が出来ます。現地の装置との接続を仲介するサーバーが別途必要なので、インフラ整備に物と手間と維持費がかかりますし、インターネットサーバーを扱うスキルも必要です。ナンのことすか?って話ですけどね。
 未解決の課題は少なくありませんが、インターネットを介したVPNで遠隔操作する手段はとうの昔に獲得済みですから、ブラウザで操作できるコンソールをRaspberryPi上に構成すれば必要な要素は揃います。IoT照明コンソール(笑
 未解決の主な課題はC言語によるPython用の計算ライブラリを書くことです。調光データの計算(マスター値を当てるとか、複数のシーンのレベルをマージするとか)に特化したものですが、繰り返し処理が激遅なPythonを補完するだけですので、PtyhonライブラリをC言語で書く教科書を熟読すればいけると思います。もちろんnumpyでも出来ることですが、繰り返し処理を軽くするには専用ライブラリがいいかなと。特化しといた方が書きやすいし。この案件に限らず、いずれ獲得したいライブラリです。

 本題のような余談ですが、PythonはC言語より100倍楽に書けるけど100倍遅いイメージです。Pythonは変数の型に自由度があること(整数の除算の結果が自動的に浮動小数点なるとか)が書きやすい特徴の一つですが、Pythonのコアが変数の「型」を推測するのに時間がかかるのだそうです。代表的な例がfor文を多用した際の激遅っぷりです。for文は繰り返しのステップ毎に扱う変数の型を推測しますから遅くなるのは当然です。C言語は変数の型が厳密に扱われて気難しい反面、優しさ全開のアシスト機能が無いので速いのです。あちらを立てればこちらが立たず。処理内容に寄ると言ってしまえばそれまでですが、単精度で単純な計算を延々と続ける調光卓みたいなシステムでは繰り返しが多い計算をC言語によるライブラリとして書くメリットは多大なのです。どうやら、Pythonというシステムはそんな使い方をするようにデザインされているとのこと。PythonはC言語で書かれたガチなライブラリを出来るだけ楽に使うための踏み台だとイメージすると良いようです。

 懸念されることは、世の中がコロナ前の状況に戻ってしまうと、ライトアップの件数も元に戻ってしまうことです。作っても使わないと意味ありません。

#照明器具 #Python

2022年12月16日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 やってもやっても本業が終わりません。
 このところ、毎週火曜日水曜日頃、週末に人を貸してくれないかと相談が来ますので、同業者の皆さんも大変な日々を送られているのだと思います。お互い、体を労わって乗り切りましょう。

 そんな渦中ではありますが、少しは息抜きをしないと精神が持ちません。
 3Dプリンタの試作や製品構成の妄想は時間を取られないし途中でも切りやすいので本業の切れ目にやっています。
 そんな息抜きをしていて想うことは「なんで自分の仕事の身の丈に合った道具が無いのだろう」という疑問です。
 客席テーブルや先日作った平台箱足の一般的な規格に合わせた汎用のカゲ段もそうですが、誰でも思い付きそうなアイデアだけに無いことが不思議です。
 身近なところに題材があって作って使えば仕事が楽になるのですから、工作が趣味の身としては面白いっちゃ面白いのですけどね。

 今年はバレエ教室の発表会と簡単なライトアップをやれば落ち着きます。
 「舞監」と呼ばれたなら時給100円でも完璧な下準備をするのが当然と思っている馬鹿な制作の仕事が年明けにあります。仮に予算が50万円あって、舞台進行、音響、照明をやったとして、舞台進行50万、音響50万、照明50万みたいな見方をしてくるのです。最初は「何言ってんだ、コイツ!?」でしたが、それが分かった時に唖然。金額でこちらの仕事にモノ言うなら、せめて3で割ってからにしろよって思います。不満をぶつけても理解出来ない人だし、年末年始を時給100円で潰したくないので適当にいなすつもりです。

 さて、少し休んだので本業再開しましょう。

#雑談
Icon of admin
 オレメモです。

 PythonからC言語の関数を呼び出す(基本編)

 タイトルの通りです。

 部分の説明で満足しちゃって全体が見えない解説がネットにも書籍にも多い中、この作者は部分の説明から入って全体を見せてくれるのでわかりやすい。
 C言語とPythonの両方を知らないと意味不明の暗号でしかありませんが・・・

#Python

2022年12月18日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 Pythonはとても書きやすい。インタプリタなので即実行出来てデバッグも楽だし、処理速度を求めないなら短時間で書けて生産性がいい。
 けど、重要な部分をC言語で書くなら全部C言語で書いてもいいんでないか?
 Pythonが私の用途でイマイチな点は条件分岐を多用する繰り返し処理が遅いことです。だからこそPythonのライブラリをC言語で書こうとしているのですが、目的が機械制御ですからPythonを使っている時点でそもそも間違っていると言われても仕方ありません。

 ならなぜC言語を使わないのか。
 何十年も前の話ですがC言語に挫折したトラウマがあるからです。MS-DOS上のTurbo-Cを触ってみましたが、書けるには書けるものの、やりたい機械制御は霞の向うの桃源郷の様でした。正しくはデバイス制御が出来なかったとなるでしょうか。それが故にPICマイコンに目が向いたとも言えます。

 ですが、今は良い教科書が多く、ネットにも先達の情報があふれています。デバイス制御をするにも先達たちが作り上げた資産の恩恵に与れます。
 ケースバイケースでありますが、C/C++をもっと積極的に使った方がいい気がしてきました。

 機械制御を目的とした製作なら、Pythonで試作をしてC/C++で本命を書くのがいいかもしれません。
 PythonもC/C++も作法が違うだけで本質的には同じですし。

 てなわけで、PythonのライブラリをC言語で書くことを勉強するのではなく、RaspberryPiをC/C++で開発する勉強をすることにします。
 手始めに何十年も前に買ったANSI-Cの教科書を読み直しましょうか。Art-NetエンジンをC/C++で書くことを当面の目標にしましょう。これはPythonベースでほぼ完成していますからね。

#Python

2022年12月21日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 そんなワケでC/C++の再勉強を始めたワケですがPythonよりも難しい。
 基本的な文法は簡単ですが、ライブラリの考え方が前世代的ですので、どの関数がどのライブラリからの物なのか因果関係を理解するのに一手間余計にかかります。
 また、ポインタの考え方も理解はしているつもりですがソースを書こうとすると頭が混乱します。このあたりは慣れなんでしょうが、マネージされている今時の言語の便利さを痛感。
 だとしても、ポインタとライブラリの扱い方を攻略出来ればPythonと大差なく書けそうです。

#C言語

2022年12月22日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 昼休みにC言語の教科書を読み直しています。
 「改訂第3版 ANSI C 対応 はじめてのC」
 (ANSIとはアメリカの工業規格です。ANSIの影響力は絶大で、C言語を名乗るならコレを基本とするのが絶対条件です。派生や方言はあれど、ANSI Cに準じて書かれたコードが動かなければC言語環境ではないのです。)
 平成7年改訂の少々古い版ですが、変化球な例題が少なく理解しやすい教科書です。
 買った当時は内容の1/5も理解出来ませんでしたが、今は書いてあることがストレス無く理解できるような気分。あくまで気分ですケド。
 Pythonなどの今時言語に比べるとC言語の表記は堅苦しいのですが、PICのアセンブラが一番好きな身には違和感が無く、堅苦しさの裏返しは曖昧さが無いことですから私はストレスを感じません。Pythonだってnumpyに代表されるライブラリを使うなら変数の型に気を配った堅苦しい書き方をするのですから同じことです。
 まずは基本記述と変数とポインタの扱い方をシッカリ頭に入れましょう。この教科書には改訂版(2008年改訂5版)があるのでポチってみました。基本となるこの2冊を読破すれば何とかなるっしょ。道のりは長いものの、オブジェクト指向(C++)の記述まで習得出来れば初級卒業です。アセンブラな感覚で書くならば純ANSI-Cだけでいいのですが、今時のライブラリを使うにはオブジェクト指向の習得が必須です。
 Art-NetパッチとライトアップIoTコンソールが当面の課題です。

#C言語
Icon of admin
 Pythonで難儀したオカゲ・・・ですが、C言語の基本が頭に入っていくと書きやすいなぁ~って気分になります。

 私が一番好きなのはPICのアセンブラです。アセンブラをガツガツ書いていると変人扱いされますが、機械を直接触っている感じがイイんです。
 C言語はこの感覚に近い気がします。優しさがないので取っ掛かりは大変ですが、見えてくると機械に直接触れている感じが強いのです。変数の型が厳密だと言っても、歯車だってタイミングベルトだってモジュールが合わなきゃ動かないのと同じことです。違いは物を理解するためのキーワードに過ぎず。むしろ共通点を見つけて利用した方が機械イジリは絶対に楽しい。
 コマンドの向こうにあるコンピュータの機械としての動作をイメージしないと出来ないことですが、コンピュータも歯車機械もバイナリコードか鉄板かの違いだけで部品が協調して動いていると思えば垣根なく感じられます。

 ・・・冒頭の書きやすいって言葉には語弊があるかも。
 変人が新しいオモチャを手に入れて嬉しくなってるだけです。すみません(笑

 分類は必要ですが、それが目的になって全体が見えなくなるのはつまらないと思うのです。
 分けることで理解を深め、よりよい組み合わせを見つけたいですね。

#妄想

2022年12月23日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 オレメモです。

● C言語のポインタ

 私の理解ですが、ポインタとは変数の扱い方の一つで、定義した名称ではなくメモリ上のアドレスを指定して変数にアクセスする方法です。変数のアドレス得る方法と、アドレス指定で変数を読み書きする方法の二つを総称したものとなります。
 OSやプログラム言語はハードウェアを直視せずに済ませるためにあるのですが、ポインタはその意図に反して原始的なアプローチでメモリに直接アクセスする方法だと言ってもよいようです。

 様々な解説では変数のアドレス得る方法アドレス指定で変数を読み書きする方法、さらにポインタの効能を混在させて説明するので分かりにくいのです。
 先達の意図には反しますが、少しアプローチを変えて書いてみようと思います。
 ただし、変数とは保存先を表す<アドレス>と保存されている<数値>で構成されているので、この辺りが頭にイメージ出来ないと以下は理解不能だと思います。
 任意のアドレスをユーザが設定することも可能ですが、OSや言語が割り当てるアドレスを使うのが普通。いや、勝手に決めて正常に動くことはまず無いでしょう。

変数のアドレスを得る方法

 変数を定義するなら、
  int data;
 などと書けばいい。この段階で保存先のアドレスは決定されています。というか、変数が持つ情報の実体は保存先を表すアドレスです。
 この変数のアドレス値を得るなら、
  &data
 とすればいい。変数名の前に<&>(アンパサンドと読むらしい。アンドではないそうな)を付けて装飾すると変数のアドレスを表します。
 単に変数名とすれば中身を読み書き出来、変数名の頭にアンパサンドを付ければ保存先アドレスを読み書き出来るのです。

 例えば、変数の中身を表示するなら、
  printf("変数の中身:%d\n", data);
 アドレスを表示するなら、
  printf("変数の格納先アドレス:%d\n", &data);
 となります。

アドレス指定で変数を読み書きする方法

 変数のアドレスを保存するための変数はポインタ変数と呼ばれる特殊なものです。
 通常変数と違って
  int *addr;
 とか
  char *str_addr;
 などと定義します。変数の前に<*>(アスタリスク)を付けて装飾することでポインタ変数だと宣言します。
 アドレスを格納するには<*>を付けず、
  addr = &data;
 とします。

 アドレス指定(ポインタ)で変数を読み出すには、
  num = *addr;
 とします。上記に続くなら変数dataの内容が変数numに入ります。

 書き込むなら、
  *addr = 10;
 となり、変数dataの内容も10になります。何故なら、dataも*addrも同じアドレス(実体)にアクセスするからです。

 ポインタの活用方法、動的変数、静的変数なども理解しなければなりませんが、先達の情報以上のことは書けそうありません。
 自分ナリの整理は付きましたし、数か月後の自分が再理解できると思うのでここまで。

#C言語
Icon of admin
 今扱っている課題ではハードウェアの処理能力を出来るだけ主題の処理に振り向けたいのです。
 C/C++の使用やポインタの活用は大いに貢献しそうですが、プロセス間通信をポインタを介して行うことは今時のOSでは無理っぽい。プロセスの独立性をOSがガッチリ固めるからです。
 プロセス間で通信するにはOSがマネージするpipeや共有メモリを用いないといけません。幸い、pythonで同様のことをするよりも処理速度が速いようなので現実的ではありますが、このレベルの情報になりますとその筋の上級者が書いているので前提が高度で完全理解には程遠いところです。もっと基礎を固めないといけません。

 現時点では同プロセス内でのスレッド処理で構成するのが現実的かなと。
 同プロセス内ならポインタを介してスレッド間で変数を共有できるそうです。
 ただ、Art-Netエンジン(受信/パッチ/送信の一連処理)を独立したプロセスにしたいので、いずれはプロセス間通信を多用出来る技術も習得しないといけません。
 理解には及んでいませんが、芸は無いけど速度が出せる共有メモリが一番良さそうです。

追記

 プロセス間でのメモリ共有
 説明は少ないですが、サンプルコードに余計な装飾がありませんし、ほぼANSI-Cで書かれているので理解しやすい。
 共有メモリを宣言し、そのメモリのアドレスを数値としてポインタ変数に渡しているだけです。別プロセスへのアドレスの渡し方が地味ですが、動作を理解するにはこれでいいのです。単に値が渡ればいいのか、特別な手段で渡すのか、明確にわかります。
 これを習得出来たら楽になりますね。

#C言語
Icon of admin
 もう数日頑張れば本業が落ち着きます。夏休み前の小学生みたいにワクワクした気持ちですが何をしましょう。
 手つかずの課題は特盛です。自由に何でも出来そうな解放感はあっても時間も気力も体力も資金も有限です。
 物理装置を作るのもいいのですが、暖かい部屋に籠ってヌクヌクと出来る課題がいい。
 まずはArt-Netエンジンですかね。これが出来れば幾つかの課題をクリアするキーになります。
 調光制御の底辺で必要になる計算ライブラリも重要でしょうか。レベル値にマスタ値を与えて出力値を得るとか、幾つかのレベル値をマージするライブラリです。調光卓的なシステムでは必須です。
 さらにはANSIエスケープシーケンスを用いた画面表示ライブラリです。これはpythonが苦手なfor文を多用せずには書けないのでC言語で書くのが必須だからです。
 明日は数か月ぶりの完全オフなのでゆっくり考えましょう。

追記
 ゆっくり考えようと思ったのですが、アホみたいに疲れが出て何も出来ませんでした。
 アドレナリンに頼って誤魔化すと反動が酷いお年頃。

#雑談

2022年12月27日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
「行燈」を作らねばなりません。
 灯台の様な円筒の建物のライトアップを依頼されているのですが、歴史のある代物なので落ち着いた雰囲気にしたいと。
 建築デザイン的に窓の存在感が強いのでライトアップでも窓を主張したいと。
 カーテンを付けて光を透かせばいいのですが、ライトアップをしない面の窓からは出来るだけ光を漏らしたくないと。
 と、なりますと、内側から窓に向けた面だけが光る「箱」をこさえねばなりません。「行燈」なワケです。
 お金も手間も時間もかけられないし、どうしたものかと思案しておりますが、看板屋さんの知恵と資材を使わせてもらうことにしました。
 全体を木枠で作り、光を漏らしたくない面には肉厚のターポリンを張り、光らせる面にはノボリ看板で使う生地を張ります。相手物が相手物ですから防炎素材を使わないといけませんが、看板で使う素材は余程の安物でなければ防炎素材。
 ちょいと年末年始休暇を減らして製作ですねぇ。

#本業 #ガチ工作
Icon of admin
 ライトアップのご依頼が多くなっています。
 自家製の制御システムがあるので安く提供出来るのが強みですが、このところはリレーやタイマーが手に入らず難儀してました。
 今月に入ってダメもとでモノタロウさんを見直したところ在庫あり。メーカーのサイトを見ると「供給量が少ないのでご注意ください」とはあれど供給は復活している。
 速攻でオーダー。
 リレーはOMRONさんのG7L-2A-BUBですが、フランジ形状なので取り付けが楽で、小型で動作電流も少なく、20A流せるので使い勝手が良いリレーです。AC100vで駆動する物を主に使いますが、制御用のDC電源が不要だし、横繋ぎで動かせるし、既設のタイマーで動いているAC100v負荷があれば制御信号として電源を盗み出して使うことも出来ます。
 タイマーも数量限定ながら手に入りました。近い将来IoT化するつもりですが、電源の制御はシンプルなタイマーリレーに限ります。

#本業 #ガチ工作
Icon of admin
 C言語を習得する壁として代表的な機能は、
1)ポインタ
2)構造体、共有体
3)typedef(自分なりの変数の型を定義する)
 でしょうか。
 ポインタは以前も書きましたが、変数をアドレス値で読み書きする方法です。CPU、メモリ、デバイスというハードウェアの基本要素が頭に入ってないと捉えにくいのですが、わかればシンプルだと思います。
 構造体はPythonで言うところのタプルみたいなものです。
 共有体は機能はわかっても意味がイマイチピンときませんが、高度なことを書く際に便利なのでしょう。
 typedefにはじんわりとオブジェクト指向を感じますが、データベースにアクセスするなど、構造体を多用する際に便利な気がします。
 他は計算記述とループコマンドですが、これらは方言のレベルで受け入れればいいようです。配列に対する計算はPythonと少し違うみたいなので整理が必要です。
 要所の基本は理解できたっぽいので、とにかく書いて慣れることですね。
 呆れる程書いて体に馴染ませたPICのアセンブラ並にC言語を書けるようになれたら御の字です。

 実習はこれからですが、共有メモリも見えてきました。
 名前のままですが、複数のプロセスからアクセス(共有)できるメモリ領域を定義する方法です。
 mmap(メモリマップドファイル)とかpipeに似ていますが、mmapはRAMディスク上のファイルを共有するイメージで、pipeは変数の内容をシステムを通じて送受信するイメージです。どれもプロセス間で情報を共有する手段ですが、共有メモリはこの中でもローレベルでシンプルな方法だと思います。ローレベルすなわち速度が期待でき、最初の定義は面倒だけど定義さえ済めば単なる変数として扱えます。
 今時のOSは特定のプロセスがアクセスできるメモリ領域を制限することで動作の安定とセキュリティ(セキュア)を担保します。このため、別プロセスの領域にある変数(メモリ)にはポインタを使ってもアクセス出来ないのです。
 MS-DOSなどの初期のOSではありえなかった制限ですが、利便性とセキュアは矛盾するシステム要件ですから、抜け道として共有メモリが用意されたのしょう。アクセスが許可されたプロセスからはただのメモリ領域ですからポインタで普通に読み書き出来ます。動作速度が通常変数と大差ないのも嬉しい。
 共有メモリを定義して得られる情報はID、先頭アドレス、メモリサイズ、パーミッションだけです。OSやコンパイラがマネージしてくれない変数ですから、メモリに展開する構造体を手作業で管理しなければなりません。読み書きもマネージしれくれませんので、プロセス間で動作が衝突して誤動作に繋がる可能性があるので、セマフォを使うなり、データを一方通行にするなりして対策する必要もあります。この辺りはPICのアセンブラと同じですけどね。

 学んでて思うのですが、C言語はアセンブラを抽象化して書きやすくしたものだとするのが私には自然です。アセンブラを補助するマクロ集を膨らませていったらマクロ命令だけでもプログラムソースが書けるようになってしまい、ならばマクロの内容を整理したら更に便利ぢゃね?となったんじゃないかと勝手に想像しています。プログラム言語としてJAVAやPythonと同類に位置付けされますが、性根のところでは別分野の代物なんですよ。学ぶ側にとっては、俗に言う高級言語に分類するから逆に理解し難いんだと思うのです。ハードウェアが直に読むマシンコードを便利マクロだけで書くと思えばポインタなどは超お気楽な便利機能に見えてきます。
 つーて、アセンブラとかマシンコードって何?って聞かれてしまうと困ります。色彩をカラーフィルターの番号と光源のレベルで例えてしまう照明屋の言葉が一般には通じないことと同じです。

#C言語

2022年12月28日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 マルチプロセスについて調べていました。
 fork()、exec()、共有メモリをセットで使えば良いようです。

Linuxプロセスの生成と実行 fork/exec

 fork()は現プロセスを別プロセスに完全コピーします。実行状態も含めてです。同じプログラムが別々のプロセスでfork()を実行する直前のコンディションで並列実行されますが、自身がコピーされた子プロセスなら別プロセスで実行したいプログラムをexec()で起動するというもの。exec()で別プログラムを起動すると呼び出したプログラムは終了しますので、結果として別プロセスで別プログラムが起動したことになります。共有メモリなどの設定を済ませてからfork()を実行すれば、共有メモリの情報を別プロセスの別プログラムに簡単に渡せるのでスマートです。

 以下、いささか愚痴ですし、教えを頂いている立場が言うことではないのですが、fork()、exec()、共有メモリがセットであることに触れずにfork()だけを切り取った情報が多いこと多いこと。ゴッタ煮説明が理解しにくいのは事実ですが、fork()だけではfork()の意味すらわからないと思うのです。私と同じことを調べている方がいたら、exec()に触れずにfork()だけを力説している情報は読み飛ばした方がいいと思います。もちろん、瞬間的に計算能力を増やすのにサブルーチン的な別プロセスを使う方法あるのでexec()を用いずfork()と共有メモリで組むこともあるとは思いますけど。
 マルチプロセスというとfork()単独の話ばかりが目につきますが、共有メモリをキーに掘り下げたところfork()、exec()、共有メモリの3点セットが理解出来たところです。

 話を戻しますが、共有メモリの情報を別プロセスに渡す方法も含め、具体的に解決した感じです。
 これなら、複数ある機能のどれかから別機能のプロセスを起動するより、必要な機能の全プロセスを起動するだけのメインプログラムを書いた方が管理しやすいような気がします。共有メモリなどを設定し、機能ごとのプロセスを起動していく最初に起動するプログラムです。一種のランチャーですね。

 うーん、やっぱりC言語は高級言語というよりアセンブラ風味だなぁ。

#C言語
Icon of admin
 書き方を考えています。
 PICマイコンを書く場合は、表面の機能からではなく、全体の構造からまとめていくからです。
 表面的な機能だけで装置は動きません。これらを後回しにすることを推奨するのではありませんが、機能と機能を能動的に結びつけなければ結果に至らないからです。
 DMXのディマーも、DMXを受信するだけでなく、アドレスを設定したり、ACの波長とゼロクロスポイントを取得したり、得た情報を結びつけて適切なタイミングでSCRをON/OFFしなければなりません。
 PICにおいてはハードウェアモジュールの割り込みフラグを用いるのは当然としても、1個のタイマーで複数の実行タイミングを生成出来なければなりません。タイマーはほんの数個しかありませんので、実行モジュール毎にタイマーを割り付けてタイムアップを取るのは不可能だからです。細かい構造は割愛しますが、環境に合わせた工夫を仕込んでおかないと動くモノも動かないのです。

 PICとは事情が違いますが、RaspberryPiを開発するなら複数のCPUスレッドに仕事を分散させて処理能力を出来るだけ引き出さないといけません。
 PythonでもC言語でも、プログラムをマルチスレッド化するだけならプロセスは一つでありCPUスレッドは1つしか使われません。CPUスレッドを振り分けるのはOSの仕事でプログラムの記述で指定することは出来ないようですが、CPUスレッドを最大限利用するにはマルチプロセスで書くことが最低条件となるようです。
 マルチプロセス化する方法はいくつかありますが、プロセスとプロセスの間に継承と共有をする情報があるならば工夫が必要です。これらを都度の例外とするのは開発においてもメンテナンスにおいても効率が良くありませんので、継承と共有の仕組みを最初から作っておくのが良いと思います。
 これから取り組もうとしている工夫は正にコレです。この仕組みがまとまればC言語での開発が飛躍的に発展します。

#C言語

2022年12月31日 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 2022年の大晦日です。
 コロナの感染拡大は完全に収まりはしなかったものの、仕事ではその影響も和らぎ忙しくさせて頂いた一年でした。
 ご協力を頂いた各方面の方々に改めて感謝申し上げます。

 ただ、体力的には過負荷が続いたもので、年末休暇に入ってからの2日間は完全にシャットダウン。大晦日の今日になってようやく普通に戻ってきた感じです。
 年末にやるべきことの大半が出来ませんが、少しはこなして実家にも顔を出しましょう。
 C言語の書き方は妄想だけなので合間に少し進めます。

#雑談