1 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 10:40:30.02 ID:PyoNDBFu0.net] !extend:checked:vvvvv:1000:512 (新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C17 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C23 最新ドラフト https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 159 https://mevius.5ch.net/test/read.cgi/tech/1659623547/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
543 名前:デフォルトの名無しさん (ワッチョイ da79-Arif) mailto:sage [2023/02/26(日) 20:37:35.64 ID:gahU4Yv80.net] viは来世紀にも残ってそうだから最初に覚えたなあ eなんとかはデベロッパーのオナニーが透けて見えて気持ち悪すぎた
544 名前:デフォルトの名無しさん (ワッチョイ 7663-W5vA) mailto:sage [2023/02/26(日) 21:16:43.25 ID:fbmwPkIL0.net] viの様にコマンド覚えなくても使えたから便利だったぞ
545 名前:デフォルトの名無しさん (ワッチョイ 76cf-okFi) mailto:sage [2023/02/26(日) 22:04:54.83 ID:OdlyZwjm0.net] >>536 ちゃう、Emacsを貧相だと思ってるんじゃなくて計算機資源が豊かでない環境の方が使い出があるって言ってるんだよ
546 名前:デフォルトの名無しさん (ワッチョイ 7db3-sBbk) mailto:sage [2023/02/26(日) 22:36:28.47 ID:0m6hfJUV0.net] 最初に使い込んだエディタの話? 俺はVZだったな
547 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 04:08:09.05 ID:naBje3l2d.net] スレちがいだし わりとしょうもないレベルの自慢話になってることを警告しておくぞ
548 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 07:30:50.50 ID:U2h1s9M4d.net] ダム端末使ってた頃はviが有り難かったけど 今となっては当時慣らした人はともかく 若いやつにお奨めするもんじゃない と俺は思うな
549 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 09:43:18.06 ID:jlyK/+pC0.net] >>531 素のCだと何もないからデータ型を一つ一つ自分で理解していけていいという意味? 例えばC++ならlistがあるから理解しないままになる? でもlistとvectorの違いを知らなければ結局
550 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 12:21:44.99 ID:3zla3lE+0.net] >543 Cやる前はアセンブラだったからねぇ。アセンブラでの処理方法をそのままC言語に持ち込んでた。 当時はでっかく領域確保したらその領域で全部処理するって思考しか無かった(自動変数って概念も無し)。
551 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 12:29:45.17 ID:U2h1s9M4d.net] ダミーセクションは使ってたけどね
552 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 17:11:48.94 ID:3MgFEhuya.net] >>543 そこはdequeですよ常考
553 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 10:24:33.59 ID:7/0mM3ia0.net] >>544 >自動変数って概念も無し 自分はデバッグでディスアセンブルを読むぐらいしか用事がないんだけど、 ゼロからアセンブリを書く場合はスタックの操作で領域管理したりはしないと?
554 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 10:32:54.86 ID:7/0mM3ia0.net] >>546 listやvectorはほとんど使わない感じ?
555 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 12:10:45.99 ID:dNNgH11Kd.net] スタックはレジスタのバックアップが主な用途で メモリ変数はグローバルがデフォだった だから変数表を作ってた
556 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 16:07:40.92 ID:Ki6W+L2N0.net] あの 先頭に戻って検索 するかどうかを維持する変数名ってどんなのがいい?
557 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 16:44:22.88 ID:295BsPXb0.net] >スタックの操作で領域管理 8086系だとスタックレジスタ直接使うと遅いんじゃなかったっけ? MOV AX、[SP+10] とかやるより MOV AX、[TEMP] ... TEMP: DW 0000h ってやる方が速いとか。 BASIC時代のマシン語CALL時のレジスタエリアは16バイトってトラウマが・・・。
558 名前:デフォルトの名無しさん [2023/02/28(火) 21:38:56.96 ID:EshvOxGGa.net] ダミーセクションって、IBMのメインフレームのアセンブリ言語の DSECTですか?
559 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 21:47:36.63 ID:svcsEAcG0.net] うん
560 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 20:42:10.06 ID:fErXdR4ud.net] >>550 auto_reverse 絶対これにしなさい
561 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 23:36:37.44 ID:5C60qBo90.net] >>550 cyclic
562 名前:はちみつ餃子 mailto:sage [2023/03/02(木) 00:05:39.48 ID:pZfd6NSK0.net] そういうのはいわゆる自転車小屋の議論になりがち。 そこそこ盛り上がりはすることもあるかもしれないけどあまり意味のある結論は出ないよ。
563 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 03:04:30.24 ID:eGjuMjwU0.net] するか否か、1ビットのフラグの命名に他者を巻き込む議論が本当に必要ですかということか すなわち名前はflagとかで変数宣言部に日本語コメントでも添えた方が建設的ということだな?違うか?
564 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 07:06:54.36 ID:xa7MSIOTd.net] 変数名の付け方は案件による 無論、一般論などない 主観と思い込みで強弁するやつはいるけどね
565 名前:デフォルトの名無しさん [2023/03/02(木) 09:03:08.54 ID:GoAAqo+J0.net] C-gengo wa mada nihon-go kakenai no? bool 先頭に戻って検索 = 真 ;
566 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 16:32:03.69 ID:N0PfEOQ90.net] 質問の仕方でどういうコード書いてるか垣間見えるのはあるな int searchtype = FROM_TOPとかBOTTOMとかBACKWARDみたいな持ち方ならそんな質問出ないだろうし
567 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 17:21:24.58 ID:y83mRLNqd.net] >>551 どのCPUでもダイレクト指定が速いに決まっとりまんがな レジスタ相対はレジスタにディスプレースメントを加算してからアドレス出力するんだから
568 名前:はちみつ餃子 mailto:sage [2023/03/03(金) 01:19:24.14 ID:5ZXS0iFm0.net] >>561 個々の命令の速度で考えればその通りだが今どきの CPU だと パイプラインに隠れて差が出ない (差があっても観測不能なほどの極小) ってことも普通にあるんじゃないの?
569 名前:デフォルトの名無しさん mailto:sage [2023/03/03(金) 08:02:43.32 ID:an7QtCXRd.net] 1Hzぐらいの速度で計測すれば何かわかるかもしれない
570 名前:デフォルトの名無しさん mailto:sage [2023/03/03(金) 08:14:12.93 ID:jW6Dg0m70.net] 1Hzだと速度的には1秒周期なので測定の意味がない
571 名前:デフォルトの名無しさん (ワッチョイ 7663-W5vA) mailto:sage [2023/03/03(金) 22:40:53.27 ID:1TAJ9GtV0.net] もしかするとCPUクロックをそこまで落としてデバッグしたいとかw
572 名前:デフォルトの名無しさん mailto:sage [2023/03/04(土) 06:01:07.88 ID:2lfmGWRw0.net] [sp+10]はメモリアクセス1回だが [temp]は2回だな 8086だとキャッシュないからメモリのウエイト数の影響をモロに受ける どciscでパイプラインなんかないし
573 名前:デフォルトの名無しさん (スッププ Sd33-0t2P) mailto:sage [2023/03/04(土) 19:01:51.83 ID:siYz8HOgd.net] Cのコードを書くのにアセンブラまで意識するのか、、 立派な心がけあるな 精進しなされ でも、CPUやコンバイラで違うじゃん、、、
574 名前:デフォルトの名無しさん [2023/03/04(土) 21:31:31.02 ID:mhQJa69K0.net] >>566 勘違いしてない?
575 名前:デフォルトの名無しさん mailto:sage [2023/03/04(土) 21:33:37.98 ID:K3zEUrJN0.net] [sp+10]が1回なら[temp]も1回じゃね 命令のフェッチは数えないんでしょ? プリフェッチはパイプラインみたいなもんじゃね?
576 名前:デフォルトの名無しさん mailto:sage [2023/03/04(土) 23:58:44.62 ID:D8X7oasM0.net] 素の8086にsp使えるアドレッシングはないのでbpで… mov ax, [bp+disp] 命令3~4バイト 8+9クロック mov ax, [TEMP] 命令4バイト 8+6クロック と実効アドレスの計算時間に差があったという大昔のお話
577 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 06:15:37.72 ID:nSao/Dea0.net] >>568 何が?
578 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 06:58:01.26 ID:94fNx05VM.net] 8086には現在のような深いパイプラインは無いがそれでもEU(Execution Unit : 実行ユニット)とBIU(Bus Interface Unit : バスインタフェースユニット)は独立しており メモリアクセスと内部のALUはそれぞれ別々に動作する ある意味初歩的な2段パイプラインとも言える構造で単純なクロックサイクルの加算とはならない
579 名前:デフォルトの名無しさん [2023/03/05(日) 07:13:34.61 ID:cmZGkkdl0.net] >>571 >[temp]は2回だな なぜ2回?
580 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 08:11:12.86 ID:nSao/Dea0.net] >>573 temp: dw 0000h つまりtempはメモリに置かれている tempのREADで1回、 []によるインダイレクトでもう1回 だろ
581 名前:デフォルトの名無しさん (ワッチョイ 13ad-NCuH) mailto:sage [2023/03/05(日) 12:43:47.21 ID:nmaj3sub0.net] >>567 昔昔はそういうものだったんよ。 Cは、 ・プログラマの責任において何でもできる ・コンパイラはプログラマの意思に忠実であれ(余計な最適化なんかするんじゃねえ!) ってこと。だから、 a=a+1;と、a++;は違う。 前者は加算命令、後者はインクリメント命令になってほしいというのが、プログラマの意志。 ただ、Cが色々な場で広く使われるようになって、最適化を進めるしかなくなったから、そんなのどうでもいいことになったけど。
582 名前:デフォルトの名無しさん (ワッチョイ 1969-zdzo) mailto:sage [2023/03/05(日) 12:47:05.12 ID:s1YdjeUN0.net] >>574 だからさ……それを2回っていうなら、[sp+10]も2回だろ
583 名前:デフォルトの名無しさん (ワッチョイ d163-PMd1) mailto:sage [2023/03/05(日) 13:30:59.36 ID:nSao/Dea0.net] >>576 何で? 即値はフェッチ時点で取り込まれているのに
584 名前:デフォルトの名無しさん (ワッチョイ 1969-zdzo) mailto:sage [2023/03/05(日) 15:05:57.71 ID:s1YdjeUN0.net] >>577 tempもtemp自体は即値だよ [sp+10]と[temp]の違いはレジスタ相対かどうかだけ
585 名前:デフォルトの名無しさん (ワッチョイ 13ad-Qpn1) [2023/03/05(日) 15:07:29.13 ID:YlwUczDE0.net] >>575 ま、しかし、昔はコンパイラの最適化がしょぼかったというのもあるな。 CPU (特に 8 bit CPU とか) がC言語等のいわゆる高級言語を全く意識して作られていないというのが最大の問題だったのかも知れないが。
586 名前:デフォルトの名無しさん (ワッチョイ d163-PMd1) mailto:sage [2023/03/05(日) 15:41:40.37 ID:nSao/Dea0.net] >>578 DWディレクティブで定義してるんだからリテラルの類だよ 命令コードと一緒にフェッチされる即値とは根本的に違う
587 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 16:48:35.64 ID:0aHQQO/od.net] >>577 CPU仕様によるが 68000では8ビット範囲以内のディスプレースメントは命令中に含まれてたが 8086はどうだっけ…
588 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 17:03:05.50 ID:nSao/Dea0.net] >>581 いやここはCPU仕様には関係ないぞ 68kにしたってdc.lディレクティブで置いた定数はディスプレースメントじゃないし
589 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 17:27:59.49 ID:0aHQQO/od.net] 間違い、>>581 は6809の話だった… ややこしくなってるが MOV AX、[SP+10] がspレジスタから10バイト後を読むなら MOV AX、[TEMP] はアドレスTEMPを読む意味だろ 8086ニーモニックをよく知らないが
590 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 17:44:11.51 ID:nSao/Dea0.net] >>583 6809にしたってFDBディレクティブで置いた定数はディスプレースメントじゃないし
591 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 18:29:27.81 ID:On/jxRV/0.net] #include <stdio.h> #include <math.h> void main(void){ double a, b, c; double x1; a = 4; b = -3; c = 1; x1 = (-b + sqrt(pow(b,2) - 4*a*c)) / (2 * a); printf("%f\n", x1); } printfが-nanて表示します。これはどういう意味でしょうか?
592 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 18:43:57.85 ID:KnQWIUK4d.net] >>585 コンバイラかて人間や こんなつまらん二次方程式の解をなんぞ解きたくない そう言う意思表示や
593 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 18:53:30.15 ID:M62PQQGq0.net] >>585 printf("(%f)\n",pow(b,2) - 4*a*c);
594 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 19:03:21.29 ID:On/jxRV/0.net] あー、なんかわかってきました そういうことか サンクス
595 名前:はちみつ餃子 mailto:sage [2023/03/05(日) 19:07:20.35 ID:AE3nXsIn0.net] >>585 sqrt に負数を渡した場合には定義域エラーとなり、定義域エラーのときは処理系定義の値を返す。 その処理系では処理系定義の値というのが nan だということになる。 言語仕様では詳細は規定されていないけれど 一般に浮動小数点の表現として使われる IEEE 754 などでは非数 (not a number) を表現のひとつとして持ち、 意味のある計算結果にならなかったときは非数がセットされる。 not a number の略で NaN 。 処理系によっては定義域エラーをハンドリングする方法を用意してあることもあるけど、 発生させないように事前にチェックしたほうが基本的には簡単だと思う。
596 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 19:21:09.18 ID:0aHQQO/od.net] よくわからないんだが >>574 が勘違いだな TEMP: dw 0000h はデータ0000hをメモリに置いてそのアドレスをTEMPと定義するという命令(アセンブラ疑似命令) MOV AX,TEMP はAXレジスタにそのアドレス値を入れる MOV AX,[TEMP] はAXレジスタにそのアドレスの内容(0000H)を入れる さらに[0000H]の内容を読むにはもう1命令必要になる…はず 6809なら1命令で読めるがあまり使われなかったと思うどっちにしろ遅くなるので
597 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 19:26:59.51 ID:eomhsMcE0.net] 6809の用語でいうとメモリ間接参照アドレッシングだな
598 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 19:30:46.77 ID:eomhsMcE0.net] ちなみに1命令で読むのはダイレクトページ参照アドレッシングな 6809ではあまり使われなかったけど、6502などではこれが使えないと実質何も出来ない
599 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 23:40:03.63 ID:yUIw0mIIM.net] >>585 nanは、何処かでnanになると、その後の演算全てがnanになる なのでsqrtのnanが伝搬してprintfがnanを表示した ゲーム(特に3D)は、油断するとnanを伝搬させてしまう事があって、キャラがグチャグチャに壊れて表示されるのは、それが原因 nanを伝搬させるとデバッグが大変なので、nanを出さないように細心の注意が必要だ sqrtとか特に割り算(/)に気を付けないといけない
600 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 02:42:50.81 ID:Ht1FmqqLd.net] >>593 え、割り算でNaN出る?と一瞬思ったけど、0.0/0.0かな?多分 珍しいケースに思える 非ゼロ/0.0でinfが出るのは関数の根を簡易に求めるのに重宝するけど(逆数が極)、NaNが出る可能性にまでは気を配って無かったのでナイス指摘
601 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 02:51:49.35 ID:Ht1FmqqLd.net] >>589 IEEEはほぼCの為に制定されたようなものでは? fpuなんて改造してナンボな本場のnumber cruncher達(ほぼFORTRAN/Fortran)は最近までIEEEなんて最近までガン無視だったわけで 今は標準モジュールにIEEEサポート入って普及してるけど
602 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 02:52:25.09 ID:Ludh8Y7rM.net] >>594 3Dだとベクトルのノーマライズをしょっちゅうするけど、これはベクトルの長さで割るけど、事前に長さのチェックが漏れてると、ゼロで割ることになる そういう特殊な状況は確かに稀なんで、リリースに残ってしまうことがある
603 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 03:02:31.96 ID:Ludh8Y7rM.net] >>594 良く考えたら、rsqrtがnanを返してる気がする…
604 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 03:14:56.83 ID:VyhKtCOB0.net] >>596 俺環ではDBL_MIN/0.0でもちゃんとinf吐くから、ノーマライズされるべきベクトル(分母)が正確に0.0というのはdoubleでは考えにくいような… 3Dだとsingle以下のfloat16/8とか使うと聞くから、極端に精度が低過いと起きるのかしら?
605 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 07:22:56.30 ID:VyhKtCOB0.net] 分子、でした >>597 かもね あと0.0/0.0以外の四則でもnanが出るケースは他にも思い付く(今思い付いた) inf/infとか まあ実数関数求根/方程式を解く目的なら(精度上での)解に達した証がinfだから、発生した時点で必ずbreakするし、事実上到達し得ない計算だけど 定義域がパッチワークみたいな複素関数で一々入力のチェックなんてやってられないし、nanには静かに伝播してもらわないと困るけど とにかく欠損値の無い有限の実数値だけが欲しいだけ(例えばグラフィック)なら、fenv.h/signal.hで例外をヲチしてSIGFPE投げるとか、あるならsnanモードにするとか
606 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 14:19:01.34 ID:+b36jU+h0.net] この糖質3歩手前みたいな文章はいつもの彼かね >>385 とか>>523 とかと雰囲気が同じだが
607 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 22:43:56.50 ID:K6iDrUwm0.net] このような状態を「思考障害」と呼び、Cプログラマの2割ほどが患っていると言われています
608 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 07:51:33.34 ID:hIILJ8zA0.net] 次の議題は『gotoは活用すべきか全面廃止するべきか』でうわぁなにをするやめ・・・
609 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 13:35:22.89 ID:914niPGe0.net] 行き先はhellで
610 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 19:20:42.99 ID:L3ZoYgrgd.net] いいか?C言語について俺に聞け VAX11でcのコンバイラをcで作ろうとしたのはワシだ 当時のyacc lexに謎の挙動があって嫌気がさして失敗したが、、?
611 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 19:38:38.87 ID:2Q8k5rzL0.net] 創造主を作ったのは、オレだ、みたいな
612 名前:デフォルトの名無しさん [2023/03/07(火) 22:59:35.82 ID:s3GtgFEy0.net] インド料理屋で、NANを頼みました。
613 名前:デフォルトの名無しさん [2023/03/07(火) 23:06:20.52 ID:s3GtgFEy0.net] >>605 そういえばID論ってのがあって、何か高度な存在が人間や宇宙を作ったってやつだが(昔ながらの神が作ったというのと似ているが神ではない)、 それならばその高度な存在はどのようにして作られたのか?それはまた別の高度な存在によって作られたのか? とするとその存在も別のもっと高度な何かに作られたのか?という具合に無間ループになってしまう。
614 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 23:18:55.74 ID:aKlG86O40.net] ID論てのは地球のたった数億年で生命が生まれたのが信じがたいってだけで、 元の生命はどこかでもっと時間をかけて生まれたんじゃないかという話。
615 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 00:40:31.06 ID:diq3Y+zm0.net] 興味深いお話ですがスレ違いです
616 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 08:33:16.96 ID:qdKF3wc3d.net] Cインタプリタなら昔作った 当時こういうの流行ってたし いくつか書籍化もされてる
617 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 08:47:42.99 ID:D4+z1pfo0.net] どうせならB作ればよかったのに
618 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 09:22:43.28 ID:fOZ1V1tZd.net] >>607 ブートストラップローダという名前がついたのと似てるなw コンピュータ起動時に次々と自分より大きいローダを読み込んで起動する様が「自分の靴紐を持ち上げて空を飛ぶ」ような無茶に思えるから
619 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 12:12:57.95 ID:wYi2NpnKd.net] 鉄則 1 困った時のGOTO勝利 2 CALL関数はマクロ展開のヘッダファイル 3 SQL呼び出しはstructの前に敗北 4 while こそループの王 forは邪教 5 そこでbreakするな 6 switch文が見えたらバグの腐海
620 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 12:52:17.24 ID:qdKF3wc3d.net] でもswitchの巨大状態ループ便利なんよね バグの温床かもしれんけどメンテは凄く楽
621 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 09:47:34.15 ID:rNyfncCj0.net] あれやって 条件成立まって あれやって を 状態遷移しながらぶん回すときは 状態変数を int にして 巨大switch にしたくなる けど こことここの間に新たな状態差し込みたいってときに 状態変数値どうしよう? っておよよする
622 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 09:53:04.07 ID:rH46BtzXM.net] 状態変数は列挙型にしておけば状態の追加や修正に合わせて具体的な値は勝手に変わる
623 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 10:05:04.42 ID:rNyfncCj0.net] >>616 おおよそそれが一番良い解法なんだろうけど 次の状態へ ってのを同じ記述でいきたいよね と (return sts+1)
624 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 10:37:21.41 ID:zXViYC6t0.net] FSMだね 古典的なハード設計では常套手段
625 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 10:42:55.43 ID:m8Mymp8XM.net] 状態マシンの欠点は割込みや並列処理の扱いが非常に厄介なところ 複数箇所から状態変数を更新される可能性を考慮すると泥沼に嵌る
626 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 10:48:34.22 ID:kE5o8bWH0.net] 更新処理は一カ所にして、順番待ちにするのが吉
627 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 10:54:14.30 ID:WaHsZI+cM.net] 通常処理のメインループと外部割込みの割込みハンドラ(特に緊急割込み処理)を同じキューで順番に更新すると処理が破綻しないか?
628 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 11:08:05.83 ID:zXViYC6t0.net] ノンプリエンプティブなマルチは今でも
629 名前:普通にやる 問題なきゃそれが楽だから [] [ここ壊れてます]
630 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 11:12:46.89 ID:sK4pplDk0.net] 組込みではプリエンプティブが一般的 応答性最優先でCPUの実行権を強制的に奪わないと最悪の場合は事故に繋がる
631 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 13:56:50.62 ID:1gP/2BE4d.net] 問題なきゃって言ってるのに最悪の場合って・・・
632 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 14:41:35.25 ID:yDS62QUEM.net] 組込みシステムのタスクスケジューラーでノンプリエンプティブマルチタスクって地雷源もいいところだろ 自殺願望でもあるのか
633 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:23:16.50 ID:pN9rkknD0.net] 組み込みと一言で括られてプリエンティブで良い悪いの議論をされるの抵抗ある人がここにいるけど俺以外でもかなり多いんじゃないかな プリエンティブはタスクスイッチ自体が割り込み禁止を伴うクリティカル処理だからそれが組み込みに適しているとはいい難い タスクスイッチのレジスタ退避復帰で何十サイクルも消費して待ってる割り込みが処理できずにいるのが許容できかは案件により過ぎる 片やノンプリでは少なくとも割り込みを汚さない 従って俺はどんな案件でも通用するノンプリでまず検討する事を推奨したい。プリエンでもタイミング的に問題ないねとなったら移行すればいい いきなりプリエンありきで作る方が自殺行為に見える
634 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:36:55.55 ID:StryrQ2LM.net] タイミング的に問題ないという判断の前提が一定時間以内に必ず応答出来るという保証が必要 応答時間が保証されないノンプリエンプティブ環境でシステム設計とか殆ど不可能にしか思えない
635 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:39:33.97 ID:pN9rkknD0.net] 割り込みにも大別してすぐに応答が必要なもの、メインのキューに回してもよい優先度低のものの2種類存在する プリエンティブを採用できるかどうかは前者の応答にどれだけの遅延が許容されるかという事になる 割り込みハンドラを普通にCで書くとハンドラ内で使用するレジスタの退避コードが適当に生成されるが、 許容時間によってはインラインアセンブラで最小限のレジスタで書かざるを得ない場合がある そういう案件だとプリエンティブの採用はありえない
636 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:41:41.13 ID:pN9rkknD0.net] あーこれってノンプリエンプティブを何か誤解してる奴が話に参加してるってだけか 理解したわぁ
637 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:45:38.25 ID:pN9rkknD0.net] 623 625 627 これ同じ人か もうちょっと勉強してから参加しようね
638 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:48:44.72 ID:hgw38TJYM.net] いやその通りだよ 保証出来るようにアセンブラすら併用せざるを得ないのが泥沼の組込み開発 それでも駄目ならソフトウェアでなく専用ハードで物理的に処置する方向を検討する
639 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 16:57:03.69 ID:EoI0IUhJM.net] ちなみにとある産業用モータドライバー基板開発のお話し
640 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 17:02:44.72 ID:pN9rkknD0.net] >>631 タイミング調整にアセンブラ併記は組み込み案件でなくても普通に行われてるでしょ それと専用ハードって簡単に言うけど、大抵の組み込み案件ってハードの部品点数減らしていく傾向だから非現実的な提案にしか見えないよ 簡単に用意できるなら苦労しないし廃業だわ
641 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 17:08:56.67 ID:pN9rkknD0.net] そもそも俺が今相手してる奴って全員ID変えてどちら様だよ 議論もまともにできず論点ずらしにも失敗してお前ほんと今みじめだぞ
642 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 17:11:58.61 ID:pN9rkknD0.net] よくみたらこれワッチョイスレじゃん全部ばれてて草
643 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 17:14:52.84 ID:AnxNC5rK0.net] 623はともかく 625と627はワッチョイ同じじゃん