タグ「C言語」を含む投稿[79件]
C言語の共用体(union)ですが、教科書やら動画を見ますと「あまり使い道が無い」的な解説が多いような気がします。
されど、今回のArt-Net系の装置では便利です。Art-Net のポート番号 0x1936(6454) の受信値をとりあえず突っ込んでおけばいいからです。例えば ArtDMX は530バイトのパケットですが、受信値を uint8_t[530] (または unsigned char[530]) の配列として保存するだけで ArtDMX の構造体としても扱えます。パディングに注意は必要ですが、便利に使えると思うのです。ID、OpCode、ProVer をまとめて評価するのに先頭12バイトを uint8_t[12] としておいて memcmp で判別することも出来ます。AertDMX と別種の Art-Net パケットもシームレスに扱えそうです。
天才を超越した神たちが何故 union を作ったのかを考えるとワクワクします。
とまぁ、最近C言語の理解が進んで一人笑いが止まらないアホの戯言でした。
オレメモです。
gccで構造体のパディングを回避する書き方。
struct に続いて「__attribute__((__packed__))」を入れるそうな。
typedef struct __attribute__((__packed__)) {
uint8_t ad_ID[8];
uint8_t ad_OpCode[2];
uint8_t ad_ProVerHi;
uint8_t ad_ProVerLow;
uint8_t ad_Sequence;
uint8_t ad_Physical;
uint8_t ad_SubUni;
uint8_t ad_Net;
uint8_t ad_LengthHi;
uint8_t ad_Length;
uint8_t ad_Data[512];
} artdmx;
ArtDMXの構造体ならこんな感じに書けばよいのでしょう。たぶん。
パディング対策はコンパイラによって書き方が違うこともあるそうな。
この型を sizeof で見て530バイトならヨシです。
ついでに共用体の定義(案)です。
union an_stack {
struct __attribute__((__packed__)) an_resv {
uint8_t resv[530];
} an_resv;
struct __attribute__((__packed__)) artdmx {
uint8_t ad_ID[8];
uint8_t ad_OpCode[2];
uint8_t ad_ProVerHi;
uint8_t ad_ProVerLow;
uint8_t ad_Sequence;
uint8_t ad_Physical;
uint8_t ad_SubUni;
uint8_t ad_Net;
uint8_t ad_LengthHi;
uint8_t ad_Length;
uint8_t ad_Data[512];
} artdmx;
};
union an_stack an_loopbuffer[8192];
こういうことでいいのかな?
#C言語
されど、今回のArt-Net系の装置では便利です。Art-Net のポート番号 0x1936(6454) の受信値をとりあえず突っ込んでおけばいいからです。例えば ArtDMX は530バイトのパケットですが、受信値を uint8_t[530] (または unsigned char[530]) の配列として保存するだけで ArtDMX の構造体としても扱えます。パディングに注意は必要ですが、便利に使えると思うのです。ID、OpCode、ProVer をまとめて評価するのに先頭12バイトを uint8_t[12] としておいて memcmp で判別することも出来ます。AertDMX と別種の Art-Net パケットもシームレスに扱えそうです。
天才を超越した神たちが何故 union を作ったのかを考えるとワクワクします。
とまぁ、最近C言語の理解が進んで一人笑いが止まらないアホの戯言でした。
オレメモです。
gccで構造体のパディングを回避する書き方。
struct に続いて「__attribute__((__packed__))」を入れるそうな。
typedef struct __attribute__((__packed__)) {
uint8_t ad_ID[8];
uint8_t ad_OpCode[2];
uint8_t ad_ProVerHi;
uint8_t ad_ProVerLow;
uint8_t ad_Sequence;
uint8_t ad_Physical;
uint8_t ad_SubUni;
uint8_t ad_Net;
uint8_t ad_LengthHi;
uint8_t ad_Length;
uint8_t ad_Data[512];
} artdmx;
ArtDMXの構造体ならこんな感じに書けばよいのでしょう。たぶん。
パディング対策はコンパイラによって書き方が違うこともあるそうな。
この型を sizeof で見て530バイトならヨシです。
ついでに共用体の定義(案)です。
union an_stack {
struct __attribute__((__packed__)) an_resv {
uint8_t resv[530];
} an_resv;
struct __attribute__((__packed__)) artdmx {
uint8_t ad_ID[8];
uint8_t ad_OpCode[2];
uint8_t ad_ProVerHi;
uint8_t ad_ProVerLow;
uint8_t ad_Sequence;
uint8_t ad_Physical;
uint8_t ad_SubUni;
uint8_t ad_Net;
uint8_t ad_LengthHi;
uint8_t ad_Length;
uint8_t ad_Data[512];
} artdmx;
};
union an_stack an_loopbuffer[8192];
こういうことでいいのかな?
#C言語
先日の現場はヒマな時間が長かったのでC言語の教科書を読みまくってみましたがかなり整理出来ました。
昨今の教科書はポインタの説明が丁寧です。ハードウェアとしてのメモリの動作がアタマに入っていないと分かり難いことですが、私はPICのアセンブラで普通に扱ってきたことなので改めてではありますが素直に理解出来ました。わかってしまえばむしろ便利だなと。変数の読み書き方法が何種類もあることになるので混乱すると思いますが、どれもメモリへのアクセス手段だと捉え直せばいいだけでした。このあたりが整理できるとmmapも自然に理解出来ます。
ヘッダーファイルはコピペでテキトウに書いていましたが、意味と書き方が整理できました。後はmakefileが整理出来れば良さそうです。
#C言語
昨今の教科書はポインタの説明が丁寧です。ハードウェアとしてのメモリの動作がアタマに入っていないと分かり難いことですが、私はPICのアセンブラで普通に扱ってきたことなので改めてではありますが素直に理解出来ました。わかってしまえばむしろ便利だなと。変数の読み書き方法が何種類もあることになるので混乱すると思いますが、どれもメモリへのアクセス手段だと捉え直せばいいだけでした。このあたりが整理できるとmmapも自然に理解出来ます。
ヘッダーファイルはコピペでテキトウに書いていましたが、意味と書き方が整理できました。後はmakefileが整理出来れば良さそうです。
#C言語
Art-Net 切替&パッチマシンを作るためにC言語を勉強しなおしています。AI/Geminiさんから学んだことですが、C言語はいわゆる高級言語(PythonやJAVAなど)ではなくアセンブリ言語の一つと捉えて教科書を読み直したところわかるわかる、すっげーわかる。なんだ簡単じゃねーかってくらいです。高級言語ほど抽象化されていないけれど、「機械としてのコンピュータ」を操っている感じが強いのにマシンコード(PIC16アセンブリしか知りませんが)を直にさわる時ほどレジスタやメモリに気を配らなくてもいい。途方もなく膨大で広大なライブラリの世界を網羅するのは不可能ですが、基本的なライブラリを使ったC言語として定義された基本書式はPIC16アセンブリのちょっと上くらいです。もちろん、CPUは何をやっているのか、メモリとは何のためにあるのか、I/Oっちゃ何よって基本機構をわかっている必要はありますけど。
教科書は買い直しました。所有しているのは2008年執筆が一番新しいのですが、20年近く経って書式が変わってきているようです。例えば1バイトを表すcharはint8_tとも書けるようです。コンパイルが通るならば古くても新しくてもいいのですが、どうせならこれからの書式に慣れた方がいいかなと思うのです。
アセンブリ言語は愚直にベタに書くモノだと思っています。10年後の自分が楽しんで読める内容にしたいですね。
#C言語
教科書は買い直しました。所有しているのは2008年執筆が一番新しいのですが、20年近く経って書式が変わってきているようです。例えば1バイトを表すcharはint8_tとも書けるようです。コンパイルが通るならば古くても新しくてもいいのですが、どうせならこれからの書式に慣れた方がいいかなと思うのです。
アセンブリ言語は愚直にベタに書くモノだと思っています。10年後の自分が楽しんで読める内容にしたいですね。
#C言語
猛烈に忙しかった一か月でしたが、落ち着いてきたのでC言語の勉強を再開しています。
データ蓄積の話です。変数と呼ばれる入れ子に数値を代入して一時保存するのが普通のやり方です。ですが、その実体はメモリに保存するに他なりません。
C言語は「高級アセンブリ言語」と呼ばれることもあり、派生の歴史はマシンコードが違うハードウェア間でソフトウェアの移植性を高めることにあったとか。AI/Geminiさんとやりとりをしてわかってきたことですが、C言語はソフトウェアを書きやすくするのとは少し違った方向性のようです。Pythonの様な言語に慣れてしまうと「どうしてこうなのか?」「不便だな」と思うことが多々ありますが、アセンブリ言語として捉えると「こりゃ便利だ」と思えます。この感覚はアセンブリ言語を書いたことがないとピンと来ないことかもれませんが、ハードウェアは何をしているのか、OSは何をしているのか、コンパイラは何をしているか、この辺りをイメージ出来るとC言語の書式の意味が見えてくるように思います。
変数はメモリ領域を確保しインデックス(ステータス・メタ情報)を関連付けることで成立します。確保しただけのメモリ領域を「Raw」とも呼ぶそうですが、「Raw」のアドレスを示すのがポインタです。変数という作法(インデックス)を使って読み書きしてもいいのですが、ポインタというメモリアドレスで直接読み書きすることも出来るようです。私が知るアセンブリ言語はPIC16のそれしかありませんが、変数とはどういう機構なのか?を理解出来るとポインタのイメージをすんなり受け止められました。typedefも「オレ専用の型」作っておくClassみたいな作法だと思えば自然と理解。
ここまできたところ、構造体(Structure)と共用体(Union)の違いや使い方もすんなり理解。どちらもメモリ領域を確保してインデックスを関連付けることは同じですが、共用体は複数のインデックスを関連付けることが出来ることが違う。Art-NetでDMXのデータを扱うArtDMXパケットは受信した際は530バイトのバイナリですが、その何バイト目がどんな意味のデータかとなるので、同じデータ群であっても530バイトのバイト配列であったり構造体であったりするので、共用体として保存するが適当ぢゃないかと思ってきたところです。
mmapも意味や作法がイマイチわからなかったのですが、C言語の深堀り出来てきた気がしています。
#C言語
データ蓄積の話です。変数と呼ばれる入れ子に数値を代入して一時保存するのが普通のやり方です。ですが、その実体はメモリに保存するに他なりません。
C言語は「高級アセンブリ言語」と呼ばれることもあり、派生の歴史はマシンコードが違うハードウェア間でソフトウェアの移植性を高めることにあったとか。AI/Geminiさんとやりとりをしてわかってきたことですが、C言語はソフトウェアを書きやすくするのとは少し違った方向性のようです。Pythonの様な言語に慣れてしまうと「どうしてこうなのか?」「不便だな」と思うことが多々ありますが、アセンブリ言語として捉えると「こりゃ便利だ」と思えます。この感覚はアセンブリ言語を書いたことがないとピンと来ないことかもれませんが、ハードウェアは何をしているのか、OSは何をしているのか、コンパイラは何をしているか、この辺りをイメージ出来るとC言語の書式の意味が見えてくるように思います。
変数はメモリ領域を確保しインデックス(ステータス・メタ情報)を関連付けることで成立します。確保しただけのメモリ領域を「Raw」とも呼ぶそうですが、「Raw」のアドレスを示すのがポインタです。変数という作法(インデックス)を使って読み書きしてもいいのですが、ポインタというメモリアドレスで直接読み書きすることも出来るようです。私が知るアセンブリ言語はPIC16のそれしかありませんが、変数とはどういう機構なのか?を理解出来るとポインタのイメージをすんなり受け止められました。typedefも「オレ専用の型」作っておくClassみたいな作法だと思えば自然と理解。
ここまできたところ、構造体(Structure)と共用体(Union)の違いや使い方もすんなり理解。どちらもメモリ領域を確保してインデックスを関連付けることは同じですが、共用体は複数のインデックスを関連付けることが出来ることが違う。Art-NetでDMXのデータを扱うArtDMXパケットは受信した際は530バイトのバイナリですが、その何バイト目がどんな意味のデータかとなるので、同じデータ群であっても530バイトのバイト配列であったり構造体であったりするので、共用体として保存するが適当ぢゃないかと思ってきたところです。
mmapも意味や作法がイマイチわからなかったのですが、C言語の深堀り出来てきた気がしています。
#C言語
ちょっと忙しい1月です。
仕事があるのは喜ばしいことですが、妄想は出来ても工作の実作業は出来ません。設計という名の妄想をキッチリやらないといけませんのである意味いいのですけどね。
最近の妄想はGoogle検索よりもAIさんたちに聞くことで進めることが多くなりました。AIさんから結論をもらうというより代わりに検索してもらってレポートを頂戴する感じです。
そんなやりとりの中で「C言語は高級アセンブリ言語である」という言葉がありました。ハードウェアを隠蔽してサービスに特化するいわゆる高級言語ではなく、ハードウェアに依存しないアセンブラ言語を示すってことらしいです。自分はハードウェアを動かすことに趣向が向いています。自分のベースはPIC16のアセンブラですが、書いているウチに「C言語はCPUにごとに違うアセンブラを汎用化して書きやすくしたモノだと思えば自分にとって自然だな」と感じていたので妙に納得した言葉です。
何をしたいかによるので「C言語が絶対正義」とは思いませんが、昨今流行りのプログラム言語の大半はC言語を基礎としてして作られていますので原典とも言える存在です。高級言語を書いているとC言語が見え隠れしますので、C言語を知っていた方が理解し易いように思います。今どきの高級言語はC言語の方言と言ってもいいのかもしれません。自分はPIC16アセンブラの後にPython3に行ったのですが、むしろPythonだけを見て煮詰まったことがC言語を習得することで解決したように思います。高級言語とはC言語を楽に使うためのマクロ言語と捉えることが自然な気すらします。FORTRAN・COBOL・BASICなどのC言語と同時期に研究・開発された高級言語は少し違う感じがしますが、今主流の開発言語の大半はC言語の方言なのでしょう。
私のように「物理的な装置を作ること」に趣向を持つ方は少ないと思いますが、コンピュータはマシンコードで動くのですから、マシンコードを汎用的に表現するC言語はハードウェアを直接動かす存在なのでしょう。名前が似通ったC++やC#(C++++)はそれとは違った感じがしますけど。
#C言語
仕事があるのは喜ばしいことですが、妄想は出来ても工作の実作業は出来ません。設計という名の妄想をキッチリやらないといけませんのである意味いいのですけどね。
最近の妄想はGoogle検索よりもAIさんたちに聞くことで進めることが多くなりました。AIさんから結論をもらうというより代わりに検索してもらってレポートを頂戴する感じです。
そんなやりとりの中で「C言語は高級アセンブリ言語である」という言葉がありました。ハードウェアを隠蔽してサービスに特化するいわゆる高級言語ではなく、ハードウェアに依存しないアセンブラ言語を示すってことらしいです。自分はハードウェアを動かすことに趣向が向いています。自分のベースはPIC16のアセンブラですが、書いているウチに「C言語はCPUにごとに違うアセンブラを汎用化して書きやすくしたモノだと思えば自分にとって自然だな」と感じていたので妙に納得した言葉です。
何をしたいかによるので「C言語が絶対正義」とは思いませんが、昨今流行りのプログラム言語の大半はC言語を基礎としてして作られていますので原典とも言える存在です。高級言語を書いているとC言語が見え隠れしますので、C言語を知っていた方が理解し易いように思います。今どきの高級言語はC言語の方言と言ってもいいのかもしれません。自分はPIC16アセンブラの後にPython3に行ったのですが、むしろPythonだけを見て煮詰まったことがC言語を習得することで解決したように思います。高級言語とはC言語を楽に使うためのマクロ言語と捉えることが自然な気すらします。FORTRAN・COBOL・BASICなどのC言語と同時期に研究・開発された高級言語は少し違う感じがしますが、今主流の開発言語の大半はC言語の方言なのでしょう。
私のように「物理的な装置を作ること」に趣向を持つ方は少ないと思いますが、コンピュータはマシンコードで動くのですから、マシンコードを汎用的に表現するC言語はハードウェアを直接動かす存在なのでしょう。名前が似通ったC++やC#(C++++)はそれとは違った感じがしますけど。
#C言語
珍しく年末年始休みですが、いざとなると暇すぎ。
ならばとAIのGeminiさんと会話。Art-Net機器の開発に関してです。ぶっちゃけChatGPTより頼もしい回答。色々解決しました。
#[Art-Net] #C言語
ならばとAIのGeminiさんと会話。Art-Net機器の開発に関してです。ぶっちゃけChatGPTより頼もしい回答。色々解決しました。
#[Art-Net] #C言語
最近、現場の合間に「POSIX(ポジックス)」の勉強をしています。UNIX互換OSの標準仕様を定義したもので、OSや言語の仕様の基です。それぞれについて学ぶことも大切ですが、そもそもを知ることに意味はあります。たぶん最初からPOSIXを学んでも迷宮を彷徨うだけですが、ある程度わかってから読むと「なるほどぉ〜」が沢山です。
#C言語
#C言語
Art-Net切替器の構成メモ
・マザーボード:EtherNet-Portを2つ、Wi-fiを1つ持つ RaspberryPi (CM4 + Dual Ether Boardなど)
・Ether Hub:ごく普通の EtherNet-Hub × 2
・NICの設定:OEMコードとMACアドレスからIPv4アドレスを定義しこれを基本アドレスとする
・ネットワークの構成:ネットワークはArt-Net切替器を挟んで卓側とノード側の2ゾーン構築する。この2ゾーンは全く同じ構成とする。Wi-fiは操作用のスマホやタブレットなどを接続するアクセスポイントとする。
・IPアドレスの工夫:手打ちやArtPollを用いてネットワーク上のArt-NetデバイスのIPアドレスを取得し、卓側ゾーンのArt-NetデバイスのIPアドレスをノード側ゾーンのエイリアスとして設定し、ノード側ゾーンのArt-NetデバイスのIPアドレスを卓側ゾーンのエイリアスとして設定する。
追記
必要になりそうなコードをChatGPTに聞いたところそれらしいモノが出てきました。これで動いたらこの上なく便利ですね。雛形であってもChatGPTと10分もやりとりするだけで得られるのは生産性が無茶苦茶いい。IPアドレスのエイリアスを一覧の状態にするコードを尋ねたのですが自分ですべて書いたら何日かかったでしょう。
こういった手段でC言語の関数ライブラリを増やしていけばいいのかもしれません。
ただ、概要を理解して質問しないと求める答えに近づくには時間が掛かるようです。
追記の2
「IPv4アドレスの配列から「0.0.0.0」と重複を削除する」とか
「4バイトのchar配列からIPv4アドレスの文字列配列を作る」とか
「IPv4アドレスの文字列配列から4バイトのchar配列を作る」などの一見地味だけど絶対必要になる処理は chatGPT で一発解決。先人が作った関数ライブラリがあれば簡単ですが、自作するには案外時間がかかったりする代物かもしれません。得られたコードを整理して関数ライブラリ化しヘッダーファイルまで作っておけば便利に使えそうです。この他にも使いそうなローレベルの関数を chatGPT に質問してコレクションしています。IPv4アドレスの一覧からIPアドレスのエイリアスをNICに定義する処理も得ましたが、Google検索だけで自作するには数週間かかったかもしれません。これは本当に凄い。Google検索で先人たちの成果を参考に書いていた時とやっていることは同じですが、より答えに近いところに短時間で到達出来るので生産性は良さそうです。別にC言語を身に着けたいのではなく、C言語でないと処理速度を確保出来ないから仕方なくC言語で書いているだけですからね。
ただ、やってて思ったのですが、全体のアルゴリズムを chatGPT にまとめてもらうにはプロの設計さん並みの知識と説明力が必要かもしれません。求める結果と状況を適切な言葉で簡潔に表さないといけないからです。AIはこちらの求めていることを推測しようとしてくれますが、説明が足りなければ、AIからの提案を理解出来なければ、その先に進むことは出来ません。いや、無料で得られる範囲では限度があると思うべきでしょう。
#器具の製作 #[Art-Net] #C言語
・マザーボード:EtherNet-Portを2つ、Wi-fiを1つ持つ RaspberryPi (CM4 + Dual Ether Boardなど)
・Ether Hub:ごく普通の EtherNet-Hub × 2
・NICの設定:OEMコードとMACアドレスからIPv4アドレスを定義しこれを基本アドレスとする
・ネットワークの構成:ネットワークはArt-Net切替器を挟んで卓側とノード側の2ゾーン構築する。この2ゾーンは全く同じ構成とする。Wi-fiは操作用のスマホやタブレットなどを接続するアクセスポイントとする。
・IPアドレスの工夫:手打ちやArtPollを用いてネットワーク上のArt-NetデバイスのIPアドレスを取得し、卓側ゾーンのArt-NetデバイスのIPアドレスをノード側ゾーンのエイリアスとして設定し、ノード側ゾーンのArt-NetデバイスのIPアドレスを卓側ゾーンのエイリアスとして設定する。
追記
必要になりそうなコードをChatGPTに聞いたところそれらしいモノが出てきました。これで動いたらこの上なく便利ですね。雛形であってもChatGPTと10分もやりとりするだけで得られるのは生産性が無茶苦茶いい。IPアドレスのエイリアスを一覧の状態にするコードを尋ねたのですが自分ですべて書いたら何日かかったでしょう。
こういった手段でC言語の関数ライブラリを増やしていけばいいのかもしれません。
ただ、概要を理解して質問しないと求める答えに近づくには時間が掛かるようです。
追記の2
「IPv4アドレスの配列から「0.0.0.0」と重複を削除する」とか
「4バイトのchar配列からIPv4アドレスの文字列配列を作る」とか
「IPv4アドレスの文字列配列から4バイトのchar配列を作る」などの一見地味だけど絶対必要になる処理は chatGPT で一発解決。先人が作った関数ライブラリがあれば簡単ですが、自作するには案外時間がかかったりする代物かもしれません。得られたコードを整理して関数ライブラリ化しヘッダーファイルまで作っておけば便利に使えそうです。この他にも使いそうなローレベルの関数を chatGPT に質問してコレクションしています。IPv4アドレスの一覧からIPアドレスのエイリアスをNICに定義する処理も得ましたが、Google検索だけで自作するには数週間かかったかもしれません。これは本当に凄い。Google検索で先人たちの成果を参考に書いていた時とやっていることは同じですが、より答えに近いところに短時間で到達出来るので生産性は良さそうです。別にC言語を身に着けたいのではなく、C言語でないと処理速度を確保出来ないから仕方なくC言語で書いているだけですからね。
ただ、やってて思ったのですが、全体のアルゴリズムを chatGPT にまとめてもらうにはプロの設計さん並みの知識と説明力が必要かもしれません。求める結果と状況を適切な言葉で簡潔に表さないといけないからです。AIはこちらの求めていることを推測しようとしてくれますが、説明が足りなければ、AIからの提案を理解出来なければ、その先に進むことは出来ません。いや、無料で得られる範囲では限度があると思うべきでしょう。
#器具の製作 #[Art-Net] #C言語
ChatGPT に Art-Net を受信するC言語のコードを聞いたところ、これまでに勉強したことが簡潔にまとまったコードが出てきました。
欲しいすべてが出て来るワケではありませんが、これはスゲー。
出てきたコードを理解・評価するにはある程度の基礎が必要ですが、細かい質問にも丁寧に答えてくれますし、何よりもヘッダーファイルを読んだり検索しないと理解出来なかったライブラリ関数の使い方も詳しく解りやすく教えてます。Google 検索で先達の成果から学ぶのも大事だと思いますが、AIエージェントを検索と同じ感覚で使うのは効率的だと思った次第。
アプリの製作代行まで求めるには質問の仕方を工夫して課金しなければならないでしょうけど、イメージとしては教科書から求める情報を抜き出してくれる補助ツールとして有効だなって感じ。
追記
他にも重要となる処理を ChatGPT に聞きましたが簡潔でわかりやすいお答え。
先達の書き込みはありがたいものの奇妙な応用を含めた物が多く知りたいことが読み取りにくいことがあります。
シンプルな質問を心がければ AI はとても便利に使えそうです。
#C言語 #AI
欲しいすべてが出て来るワケではありませんが、これはスゲー。
出てきたコードを理解・評価するにはある程度の基礎が必要ですが、細かい質問にも丁寧に答えてくれますし、何よりもヘッダーファイルを読んだり検索しないと理解出来なかったライブラリ関数の使い方も詳しく解りやすく教えてます。Google 検索で先達の成果から学ぶのも大事だと思いますが、AIエージェントを検索と同じ感覚で使うのは効率的だと思った次第。
アプリの製作代行まで求めるには質問の仕方を工夫して課金しなければならないでしょうけど、イメージとしては教科書から求める情報を抜き出してくれる補助ツールとして有効だなって感じ。
追記
他にも重要となる処理を ChatGPT に聞きましたが簡潔でわかりやすいお答え。
先達の書き込みはありがたいものの奇妙な応用を含めた物が多く知りたいことが読み取りにくいことがあります。
シンプルな質問を心がければ AI はとても便利に使えそうです。
#C言語 #AI
現地照明でしたが、シュートが終わったらバラシまで待機という名の休憩。直しとトラブルシュートに対応出来ればいいのでまとまった空き時間です。こんな時は設計という名の妄想が一番です。
課題は毎度おなじみ「ArtNetPatch」です。主にソフトウェアの構成が課題です。
受けたデータを一時保存、加工、出力しますので、機能は映像ストリーミングに近いかもしれませんが、自分のイメージはデータベースです。
その昔ファイルメーカーを母体に機材の稼働管理システムを作って今も使っていますが、データを動的に仕分けて加工する感覚が今回活用出来ています。
アルゴリズムと言えばそうなんですが、データを保管する構造体の設計が主な作業です。可能か不可能かを確認しながらになりますが、最終的にまとめる構造体が決まれば仕分けて加工するアルゴリズムはおのずと決まってくるので私にはこの感覚で進めるのが性に合っているようです。処理の全体像が見えてきました。
アセンブラではないので構想の段階で処理時間の見込みを付けることは難しいのですが、そもそもRaspberryPiのCPUにおけるマシンコードの動作速度はどうだと計算したら恐ろしい数字。ARMの2.4GHzですが、PICの感覚で単純計算したら1クロック当たりの時間は0.42nsec。PICに比べたら桁違いというか単位違い。OSを介するので単純には比べられないもののマシンコードのイメージで書けばかなり速くなりそう。例えば、積や商を求めるために四則演算をするかビットシフトをするかってことです。2倍や1/2などの2の乗数に関わる積や商ならビットシフトの方が速いハズです。この辺りが「C言語はアセンブラを汎用化したもの」ってイメージであり、Pythonとは違い、C言語はアセンブラの感覚で使うベシってのが私個人の感覚になりつつあります。出来るだけ単純な計算方法を目指してデータ構造を考えるのです。C言語の難解さがアセンブラ傾向のアプローチで軽くなった気分です。普通は逆なんでしょうけど。
C言語を作った神達はアセンブラをマクロ化して手間を減らすところから始まってますので、世代を経ても底辺はアセンブラなんでしょう。同時代のCOBOLやFORTRANは意味付けが違うようですけど。
勝手な妄想はともかく、どんなデータをどう変換・加工するかを明らかにすればおのずと見えてくるようです。
#[Art-Net] #器具の製作 #C言語
課題は毎度おなじみ「ArtNetPatch」です。主にソフトウェアの構成が課題です。
受けたデータを一時保存、加工、出力しますので、機能は映像ストリーミングに近いかもしれませんが、自分のイメージはデータベースです。
その昔ファイルメーカーを母体に機材の稼働管理システムを作って今も使っていますが、データを動的に仕分けて加工する感覚が今回活用出来ています。
アルゴリズムと言えばそうなんですが、データを保管する構造体の設計が主な作業です。可能か不可能かを確認しながらになりますが、最終的にまとめる構造体が決まれば仕分けて加工するアルゴリズムはおのずと決まってくるので私にはこの感覚で進めるのが性に合っているようです。処理の全体像が見えてきました。
アセンブラではないので構想の段階で処理時間の見込みを付けることは難しいのですが、そもそもRaspberryPiのCPUにおけるマシンコードの動作速度はどうだと計算したら恐ろしい数字。ARMの2.4GHzですが、PICの感覚で単純計算したら1クロック当たりの時間は0.42nsec。PICに比べたら桁違いというか単位違い。OSを介するので単純には比べられないもののマシンコードのイメージで書けばかなり速くなりそう。例えば、積や商を求めるために四則演算をするかビットシフトをするかってことです。2倍や1/2などの2の乗数に関わる積や商ならビットシフトの方が速いハズです。この辺りが「C言語はアセンブラを汎用化したもの」ってイメージであり、Pythonとは違い、C言語はアセンブラの感覚で使うベシってのが私個人の感覚になりつつあります。出来るだけ単純な計算方法を目指してデータ構造を考えるのです。C言語の難解さがアセンブラ傾向のアプローチで軽くなった気分です。普通は逆なんでしょうけど。
C言語を作った神達はアセンブラをマクロ化して手間を減らすところから始まってますので、世代を経ても底辺はアセンブラなんでしょう。同時代のCOBOLやFORTRANは意味付けが違うようですけど。
勝手な妄想はともかく、どんなデータをどう変換・加工するかを明らかにすればおのずと見えてくるようです。
#[Art-Net] #器具の製作 #C言語