スレ立てるまでもない質問はここで 160匹目

■ このスレッドは過去ログ倉庫に格納されています
2022/05/10(火) 14:24:35.29ID:+9FnNLoT
この板はプログラムを作る人のための板です。
あらゆる質問はまず
スレ立てるまでもない質問はここで
スレにしてください。

次スレは>>980が立てること

【前スレ】
スレ立てるまでもない質問はここで 159匹目
https://mevius.5ch.net/test/read.cgi/tech/1644673480/
2022/07/15(金) 01:34:39.13ID:GD18JH44
>>340
そんな前近代的なことをしている人がいて驚く
・まず手間も時間もムダ
・その作業も漏れなくミスなくすることを保証できない
・実行しないと何も判明しない
・レアケースに露見するミスはレアケースが来るまでわからないまま
様々な点で問題が多すぎる

C/C++を捨ててRustへ移行すれば
・コードに問題があればコンパイラが通さず問題点を指摘してくれる
・つまりチェックは人手でやる必要なくコンパイラにより完全自動
・コンパイルが通れば安全性が保証される
・つまり実行前に静的に問題がないことを確定できる
・使われなくなった時点で即座に自動的にメモリ解放されるためC/C++で手動で最善にメモリ解放した時と同様に高速
このようにRustへ移行すれば問題が解決する
2022/07/15(金) 01:41:41.27ID:Ck4HswxJ
>>340
解放忘れは機械的にはプロセス終了時点まで分からないと思うけど、プロセス終了時にその領域の情報はどうやって報告するの?
未解放メモリの全部のポインタをどこかに覚えておく?
そして、どこからの malloc で確保されたメモリなのかはどうやって管理する?
他にも new や delete はどうするのとか。
そのノウハウは聞いておきたい。
2022/07/15(金) 04:34:16.20ID:H/wtb5p/
>>332
> どうせ主流ではないと言いたいんでしょ?
イエス
反語表現の意味を調べよう
(中高で習うそんなに難しくはない概念だし、注意してみると日常生活の中でもよく使われているので、勉強しておくことを勧める)


> 主流ではないから○○だみたいに、
> その先を説明してよ
ホワァイ?
元々>>320が頓珍漢な回答をしているのを指摘しただけなので、そこで終わってる話
頓珍漢に輪をかけたレスがその後も相次いでいるので驚いているが


> なんで自分の意見を相手に聞くかな?w
> 自分の意見は、自分から言えば良いんだよ。
言ってるんだよなあ
まあこの先日本語をもっと勉強することでいずれ理解できるようになると思う
頑張って
2022/07/15(金) 04:37:28.40ID:H/wtb5p/
>>334
勧めていません
ただし、低レベルプログラミングが必要な場面でないのに「C++はメモリの解放が~」とか言ってるのは誤謬でしかないし、標準ライブラリで提供されてる範囲内で簡単に解決できると示しているだけ
2022/07/15(金) 04:40:39.28ID:H/wtb5p/
>>340はヤバいね
これなら思考停止でRust使ってた方が良い

今自分でmalloc、free、new、deleteしなきゃいけない場面なんて特定の領域を除いて存在しないでしょっていう話だから
2022/07/15(金) 04:43:52.51ID:GD18JH44
>>343
その件もmakeでやってた前近代的な方法を根本的に見直し捨て去ることで
全く新たなcargoというエコシステムが作られてそれ単独でmakeやその類似を必要とせずに動作しているわけだから
makeの代わりの新たなものという位置付けも一つの見方であると思われる
2022/07/15(金) 04:44:34.45ID:nNsZOfDm
>>343
だから、Rustのcargoが本当にLinux・UNIXにおけるパッケージ管理の主流じゃないから何?
OSの仕事はあくまでOSのパッケージの管理であって
プログラミング環境のライブラリの管理じゃないんだよ
あんたcargoの役目を理解してなさすぎw
2022/07/15(金) 05:21:48.13ID:tRnFuWaP
>>344
その後半の「標準ライブラリで提供されてる範囲内で簡単に解決できる」は二重にダウト
標準ライブラリの範囲内でも解放忘れや多重解放などは起こり得る
さらに標準ライブラリの範囲内のみで解決できるとはかきらない
したがって標準ライブラリを持ち出すことに何の意味もない
2022/07/15(金) 05:25:05.82ID:H/wtb5p/
>>346
ていう話なら是

>>347
ええ。ですから>>316に対してcargoとか言い出すのは頓珍漢なのですよ
私と反対のことを言いたいばかりに元々がどんな話だったかすっかりお忘れになられているようで、本当に気の毒ですがもう少し日本語のお勉強に真剣になられた方が良いです
2022/07/15(金) 05:39:30.79ID:nNsZOfDm
>>349
はぁ(苦笑)

あのねぇ、makeはね、OSのコマンドなの。UNIXの中に含まれてるから。
でね、makeっていうのはビルドツールなわけ。
昔のunixにはパッケージ管理ツールなんてなかったのから
ビルドするしかなかったの

今はビルドツールにOSのコマンドを使わなくなってきてるの
cargoはプログラム専用のパッケージ管理ツール兼ビルドツールなわけ

つまりね、
・パッケージを使う場合はOSのパッケージ管理ツールを使う
・しかしパッケージ管理ツールは、make、ビルドツールのことじゃあない
・今の話はmakeの代わりに何を使うって話
・makeの代わりはcargoや各言語のビルドツールなわけ
おまえはmakeをパッケージ管理ツールだと勘違いしてる

ここまで丁寧に教えないと理解しないんだろうな
2022/07/15(金) 05:44:04.50ID:nNsZOfDm
makeの代わりに何を使う?って話なんだからcargoは間違いじゃない

makeの話なのにOSのパッケージ管理ツールってなんだよ?とかいいだしてる>>323がアホと言う結論
2022/07/15(金) 06:06:48.38ID:H/wtb5p/
>>350
>>346で止めときゃ合ってたのに……(もしかして「是」の意味がわからなかった?)

OSのコマンドとして見るなら尚更cargoを持ち出すのは頓珍漢だろ
2022/07/15(金) 07:03:07.90ID:LI/vBnI5
とりあえず>>340って実際にどんなことをしてるかちょっとだけ気になるんだけど
よかったら具体的な説明を
2022/07/15(金) 07:08:23.44ID:LI/vBnI5
と思ったが、あれかな、valgrindとかでやることを自分でやるみたいな?
普通にそういうツールやライブラリに頼った方がいいような
2022/07/15(金) 07:28:20.56ID:45o+VwAU
>>352
今どきはOSのコマンドでビルドしないって言ってんだろ
いい加減OSの話忘れろよ
おまえだけだぞ
2022/07/15(金) 08:15:46.31ID:uLC7CBw4
Rust Foundation Platinumに日本企業はない。中国企業はいる
日本は中国未満
2022/07/15(金) 09:59:34.96ID:TA6nqc+L
現時点でRustで構築されてるOSってある?
カーネルはLinuxでもいいけどそれより上の部分で
2022/07/15(金) 10:57:19.78ID:lF4sBNwn
Rustなんて結局流行らんでしょw
まぁ、スレ違いなのでしょーも無い事を語るなら別のスレにいけ
2022/07/15(金) 11:39:33.98ID:YErsqPqr
gitでマージしてコンフリクトしなかったファイルとコンフリクトしたファイルがあって
これをコミットする際、コンフリクトせずマージされたコミットとコンフリクト解消したコミットのように2つに分けたいのですが
どうやればいいのでしょうか
2022/07/15(金) 12:11:03.83ID:lF4sBNwn
単純にマージする前にブランチ切っていれば戻れるし好きに出来るのでは?
361デフォルトの名無しさん
垢版 |
2022/07/15(金) 12:12:45.10ID:YXwn0a1o
>>359
stageに上がった修正だけがcommitされるから、
コンフリクト解消前のstageをcommitした後に
コンフリクト解消してまたcommitすりゃいい
2022/07/15(金) 12:44:10.41ID:YErsqPqr
>>361
コンフリ解消前のをcommitするとコンフリ解決してないので
committing is not possible because you have unmerged files
とエラーが出てコミットできないんですが
コンフリしたファイルをそのままaddしてコミットしろってことでしょうか?
363デフォルトの名無しさん
垢版 |
2022/07/15(金) 15:05:45.09ID:oyGbt8u5
>>362
merge状態から抜ければcommitできるので、そうしてもいいし
コンフリクトしたファイルだけを元に戻してもいい

でも、どちらにせよビルドできない状態をcommitすることになるだろうから
ちゃんとコンフリクトを解消してからcommitした方がいいと思うけどなぁ
まあ、最初のやりたいことからは外れちゃうけど
2022/07/15(金) 15:18:15.30ID:UMF7Eduu
>>357
これからは一つの言語で構成されるOSはなくなっていく
2022/07/15(金) 21:04:15.70ID:knkavBW6
>>341
>・まず手間も時間もムダ
ちょいちょいと 200 ステップくらいで簡単に実現できますよ、一晩で書けちゃいますよ

>・その作業も漏れなくミスなくすることを保証できない
>・実行しないと何も判明しない
何もしないよりはましでしょうね、簡単なラッパを置くだけでケアレスミスは弾けますね、やったことなければわからないでしょうが

>>342
末尾に解放忘れを列挙する関数を置けばいいだけですよ、リリース時には #ifdef で無効にするようなものでね

>>345
私は別に rust を否定しているわけではないですよ
指摘された問題点はちょいちょいとラッパを書くだけで割と簡単に弾けるのに、というだけですね

>>353
ヘッダ:https://ideone.com/E6J83P
本体:https://ideone.com/WpsIxp
一晩で即席に作ったけれども結構今でも役に立っていますね‥‥
2022/07/15(金) 21:41:31.38ID:0WMM6JpG
リーク検出なんてVCは標準であるけど、他の環境にはないの?
2022/07/15(金) 21:52:23.36ID:YErsqPqr
>>363
コンフリしたファイルをHEADの内容で更新commitして
コンフリしたファイルを再度修正してそれをコンフリ解決としてコミットすれば
やりたいような感じのことができました
レスありがとうございました
368365
垢版 |
2022/07/16(土) 06:41:19.01ID:c7EwU+jp
>>366
昔の bcc にもありました、ちょっとバグってたけれども
clang ベースの今の bcc にあるかどうかはちょっとわかりませんね
2022/07/16(土) 11:51:34.05ID:v3eAMl7Q
質問と言うかご意見をお聞かせください

daoパターンを調べていてトップに出てきたのがこれです
https://kanda-it-school-kensyu.com/java-jdbc-contents/jj_ch04/jj_0401/
気になったのは
selectIsbnAll、selectTitleAll、selectPriceAllが、内部で使うSQL文以外は全く共通の構造になっているということです
例えば受け取ったSQLを実行して結果を返す関数xxxを別に作る、上の3関数ではSQL文を作ってxxxに渡して呼び出す
そういう構造にするのはダメなんでしょうか

それとも重複させたほうがいい理由が何かあるのでしょうか。よろしくお願いします
2022/07/16(土) 11:55:03.81ID:v3eAMl7Q
失礼しました。SQL文以外にも取得する列名も関数ごとに別ですね
まぁその場合でもxxxに列名を引数として追加すればいいのではと思いますが
2022/07/16(土) 12:32:31.14ID:730D9OZt
>>369
>そういう構造にするのはダメなんでしょうか

全く問題ないよ
2022/07/16(土) 12:37:49.48ID:730D9OZt
しいて言えば
他の開発者が重複させた状態でパターン認識してれば共通処理に切り出すと分かりにくくなるとか
すべてのDAOが依存する共通クラスができるのでその維持管理に少し手間がかかるとか
そういうデメリットはあるかもしれない
2022/07/16(土) 14:05:36.11ID:2WLM14wy
Java のJDBC って、何十年前の話なの?

Ruby on Rails では、Active Record というO/R マッパーで全自動。
こんなコーディングを見た事がない
2022/07/16(土) 15:47:30.46ID:aE5onCgd
markdownってなにが便利なの?
見る人にわざわざViewerをインストールしてもらわなきゃいけないの
2022/07/16(土) 16:12:32.42ID:8tacx+39
>>374
HTMLよりも文法が簡単で、わかりやすい。
テキストベースでGitと相性が良い。
markdownが書ければ本も出版できる。
2022/07/16(土) 17:00:15.16ID:aE5onCgd
本を出版できるかどうかは関係ないでしょ
書く内容があれば、markdownがかけなくても出版は出来るでしょうし。

整形されたものを見るためには、ブラウザ側の準備とかも必要ですし
○○をインストールすれば、綺麗に見えますよ
なんていってもそんなの面倒といわれるのがオチですよね
2022/07/16(土) 17:08:33.25ID:EqAVTetZ
ブラウザ等が必要なのはHTMLやTextileも同じ
それらに比べてプレーンテキストでの視認性は良い
2022/07/16(土) 20:25:35.05ID:v3eAMl7Q
gitと相性良いってのは本当にでかい
未だにword/excelをSVN管理してるところの多さよ
2022/07/17(日) 08:58:42.91ID:Pz/w1EQs
音楽を流すプログラムを公開する時、著作権の問題を回避するため、曲データそのものは省いた状態で公開したい。
でもデモというかサンプルとして、そのデータのシーケンスの様子を youtube で公開して、ようするにそれを見ればデータを再現できるわけだけど、
そういう公開の仕方で著作権の問題は出そう?
公開したいものの主体としてはシーケンサの方ではあるけど、その曲を入れたくて作ったという側面がある。
もちろん使う人がお好きなデータを入れられる。
380デフォルトの名無しさん
垢版 |
2022/07/17(日) 18:48:28.79ID:soXI7jwH
仕事中に転職予定のプログラミングの勉強をしたいのだけど
いい方法はないかしら?
今の仕事中はときどきアイドル時間があってわりと勉強できそうだけど
周りにチームリーダーやまじめ君がいてPCをのぞきこまれてそれを見つかるのはまずい。
2022/07/17(日) 19:38:41.12ID:9SO4ZDqK
スマホPDFでみれば
382デフォルトの名無しさん
垢版 |
2022/07/17(日) 19:51:05.43ID:soXI7jwH
>>381
それもなかなか難しいんですよ。
理想はPCで仕事してるふりしてPCの小領域に勉強のためのWebサイトを開くみたいな。
2022/07/17(日) 19:53:22.97ID:9V4W1mRI
PC介すと検閲に引っかかるとかないの?
2022/07/17(日) 20:52:28.23ID:zSvUsLU3
えー要約すると仕事中に仕事と全く関係なくて見つかるのもまずいことしようとしてるんだけどいい方法ありませんか
2022/07/17(日) 21:13:42.26ID:Il0xN2QW
通信URLが監視されてたら何してもばれる。

それでもやりたいならWin+D
2022/07/17(日) 21:21:33.73ID:Il0xN2QW
「ボスが来た」で検索すると、そういうツールが見つかるよ。
2022/07/17(日) 21:22:16.77ID:Il0xN2QW
通信内容も隠蔽したいならテザリングするといいよ。
2022/07/17(日) 21:26:39.21ID:Il0xN2QW
内部通告は社会の正義だからね。がんばってね。
2022/07/17(日) 21:41:58.23ID:Il0xN2QW
今ならメガネ型の端末やコンタクトレンズみたいな端末があるって。
それでネットサーフィンできるよ。
2022/07/17(日) 22:12:12.21ID:og+Kl2+D
などと自宅警備員が言っており
391デフォルトの名無しさん
垢版 |
2022/07/18(月) 02:41:01.00ID:M8P73NZJ
その言語の研修に行かせてもらえば?
2022/07/18(月) 09:09:17.65ID:unHGOtJd
UMLとかどこ行っても潰しの効く技術を勉強しといたら?
特に最下流なゴミ案件だと設計ドキュメント無かったりするから、それを作ってますと言い訳
2022/07/18(月) 10:38:54.88ID:kCD1BPcn
OSSのライブラリって設計ドキュメントとかなかったりするよね
OSSの開発には参加できない低レベル人材ということだよね
2022/07/18(月) 12:40:49.12ID:VS4KQwYj
設計資料の無いプログラムなんて、何の価値も無いでしょ
個人が趣味やってるようなものなら話しは別だけど
会社で仕事としてやってるなら、ソースだけなんてありえない。

そこらに建ってるビルで設計図ないビルなんて無いだろ
犬小屋つくるのとはわけがちがう
2022/07/18(月) 12:47:50.22ID:QxUO6Zmj
設計図は保守のために必要なのであって開発のための設計図は不要
2022/07/18(月) 12:49:37.70ID:VS4KQwYj
会社に入れば分かるよ
学生さんがお遊びで書いてるようなおもちゃコードとはダンチレベチだから
2022/07/18(月) 13:25:28.89ID:LUyjnnnP
OSSはわかる人が参加するものであって
企業内の製品は誰でもわかるようにしなければいけない
設計あるなしは要否によっても決まるもの、という位置付けに変化した
2022/07/18(月) 13:28:37.05ID:T3NdTMmH
会社でコード書いてるのなんて高卒とか専卒のやつらだろ
大学でちゃんとコード書いてる学生さんの方が上だよ
2022/07/18(月) 13:34:29.85ID:VS4KQwYj
なぜか学歴の話しになってて草草草
頭の悪い人って物事を別の方向に捉えて勝手に結論付けるよね
2022/07/18(月) 14:19:10.39ID:unHGOtJd
N□□セキュアとかの仕事ですら、設計ドキュメント無かったぜ
2022/07/18(月) 14:39:42.97ID:kCD1BPcn
ビルは完全にウォーターフォールでしか開発できないからな
途中で改善点など見つけても後戻りできない
そこがソフトウェア開発と建築との違いで何度でも試行錯誤してブラッシュアップできるのがソフトウェアの良いところなのに
混同して考えているという時点でセンスないし向いてないから別の業界に転職した方が良いよ
2022/07/18(月) 15:03:52.33ID:RNtKt9aH
設計ドキュメントの作成・維持・読んで理解するのに要するコスト・時間と
設計ドキュメントなしにコードを読んで設計を理解するのに要するコスト・時間を状況に応じて比較して考えればいいよ

設計するやつとコード書くやつが分かれてたり
コードだけからだと設計を読み取るのに時間がかかったり
そもそもコードを読めない・読まない人が設計を理解する必要があったり
多くのソフトウェアやシステムは後者のコストが著しく高くなる環境のほうが一般的

設計するやつとコード書くやつが同じでユーザーもコードを読む前提のソフトウェアやシステムはどちらかといえば例外的
2022/07/18(月) 15:52:41.75ID:88C78euP
>>394
オープンソースのソフトウェアに分厚い設計資料はありますか?
2022/07/18(月) 16:11:52.15ID:f70Fl4T+
>>403
オープンソースには分かるやつしか参加しないから、ソースコードを別の言葉で書き直したような設計書ならいらないんだよね。
企業は人員の 9割が無能だから、そいつらのための仕事として設計書作成作業を設けてるだけ。
んで 9割の連中がその設計書を見ながら作った動かないコードは、残りの 1割の連中が設計書など見ずに動くように書き直す。
だから設計書と製品が解離する。
2022/07/18(月) 17:54:35.48ID:lfKiyV0F
>>404
オープンソースに分厚い設計資料がないのだったら、本質的に企業の仕事においても不要でしょうね、偉い人にはどうしてそんなことがわからないのでしょうか?
2022/07/18(月) 18:01:12.19ID:LUyjnnnP
製作者がいなくなったとき、

オープンソースは引き継げる能力のあるやつが引き継ぐ、いなければいつか消えるのみ
会社は他に能力のあるやつがいなくても、誰かに引き継がせなきゃいけない。放置は許されない
2022/07/18(月) 18:20:16.09ID:Vps5Lgrt
>>396
せやな。Linuxぐらいの設計書は必要
2022/07/18(月) 19:30:18.00ID:iK5pz8lh
>>406
製作者がいなくなる状況を生成した、それが会社側の失敗なのでは?
ドキュメントなんて所詮、参考でしかなく、結局はコードを読むしかない、偉い人にはそれがわからないのでは?
2022/07/18(月) 20:03:26.47ID:SlCZ8nzK
書類なんざ所詮管理手段の一つ。結果が伴わなければ意味ない
書類の作成を目的化するような会社じゃビジネスは上手くいかないだろうね
2022/07/19(火) 00:29:30.95ID:KHPjwZjx
ダメなプロジェクトや仕事は設計ドキュメントが先にある

良いプロジェクトや仕事は様々なレベルでそれぞれ試しに作っては壊したり比較したりやり直したり
システムアーキテクチャレベルで固まってきてもデータ構造やらAPI相当やらはリファクタリングでどんどん良いものへ変化
そして最後に設計ドキュメントに相当するものをきちんと作る
2022/07/19(火) 02:32:32.91ID:u93zEaXd
エクセルのデータを読み込んで加工して手元のmysqlに書き込むプログラムがあるのですが
プログラムで書き込むのと sql fileに書き出してコマンドで実行する方式のどっちがいいでしょうか?
2022/07/19(火) 11:20:13.57ID:6ZFnu09m
>>411
どういう観点で比較したいの?
2022/07/21(木) 14:52:16.30ID:qntGDUHT
C,C++の勉強してListの構造を学んで疑問に思ったのですが
Javaなどでメモリ飛び飛びで作られたListが存在するときにGCが発生したら完全整列するのでしょうか?それとも要素毎に空いたメモリに再配置されるのでしょうか?
前者なら遅くなるなぁ?と、後者で動いてる?
まぁわかったところでGCなのでやりようがないかもですが、考え方だけでも知っておきたいです
2022/07/21(木) 14:59:01.82ID:cxEc0/aI
>>413
後者
GC言語に限らずリンクリストは非常に非効率なデータ構造であり、動的配列よりもリンクリストの方が適している状況は極めて稀である
Cで実装しやすいから教科書に出てくるだけ
2022/07/21(木) 15:10:02.66ID:qntGDUHT
>>414
ありがとうございます
やはり後者ですか
List使った処理を追加したら遅くなりまして
もう一度コードの見直ししてみます
416デフォルトの名無しさん
垢版 |
2022/07/22(金) 21:00:16.41ID:coO/VVNr
アセンブラスレがなかったのでこちらのスレで失礼します。
学校でH8/300Hのマイコン学習をしています。
どうしてもわからないことがあり質問させてただきます。

HEW 生成ファイル補足説明(H8S、H8/300)
https://www.renesas.com/us/ja/document/man/735601
の3ページ目、リセット関数に関してです。

.SECTION PResetPRG,CODE,LOCATE=H'0400
_PowerON_Reset:
SLEEP
.SECTION $VECT0,DATA,LOCATE=H'0000
.DATA.L _PowerON_Reset
.END

上記のコードは実行してもただSLEEPするだけ、ということは理解できています。

コードの読み方を調べているうちに、
上記コードで定義されているPResetPRGのH'0400と、$VECT0のH'0000は、
ディフォで生成される設定に合わせているということは理解できたのですが、
じゃあ、なんでわざわざ宣言するんでしょうか?
ネットや書籍で調べまくっているのですが、掘り下げた説明に出会えず、
これがピンとこないせいか、授業の内容もいまいちピンときません。
まだLEDをピカらせるといった初歩的なことをしているだけですが、
リセット関数はどのコードにも冒頭部分に記述されています。
しかし初期設定部分ということもあってかコピペで済ましており、
学校の人も誰もこの記述の具体的な説明を含む読み方ができません。

どなたか日本語訳的な感じで読み替えてもらえないでしょうか?
よろしくおねがしいます。
2022/07/22(金) 21:56:20.98ID:5RjVUBfu
アセンブラというかハードの知識が足りてないんじゃね?
ベクタテーブルで調べてごらん。
2022/07/22(金) 21:57:59.77ID:JKfbNlr+
h8なんて知らん素人だけどさ
このCPUはリセットされると0番地の内容をプログラムカウンタに設定して
そこから実行を開始するっぽい
で、今回はH'0000番地にVECT0という名前をつけて
内容はH'0400
H'0400番地にPResetPRGという名前をつけて
内容はSLEEP命令
この名前とかアドレスはその開発環境のデフォルトなんでしょ
2022/07/22(金) 22:31:54.54ID:QLPuwyNz
>>416
>じゃあ、なんでわざわざ宣言するんでしょうか?
この回答は「PResetPRGのアドレスは変更可能だから」かな
420416
垢版 |
2022/07/22(金) 23:10:59.57ID:coO/VVNr
>>417->>419
ありがとうございます。書き込み後も調べ続けておりました。

>>417
一応イメージは掴んでいるつもりですが、改めて勉強してみます。
リセット時や割り込み時の処理の仕方だと認識しています。
自分はたぶんsection宣言の読み方や使い方がわかっていない気がします。

>>418
ありがとうございます。レス読んで思い出しました。
このリセット関数については、最初は先生に質問したのですが、
「0000の中に0400が入っているんだよ」と言われ、その時はわかった気になったのですが、
帰宅後に調べ直したらまたわからなくなり、今回の質問に至ったという経緯でした。

わかる
・このCPUはリセットされると0番地から実行を開始する
・名前とかアドレスはデフォルトのやつをそのまま使っている
・H'0000番地にVECT0という名前をつけている。
・H'0400番地にPResetPRGという名前をつけている。

わからない1
・H'0000番地の中にH'0400が入っているについて、その入れる処理は、どこがそうなっているんですか?
私の理解では「番地に名前をつけて、コードかデータの種類を指定しただけど、入れる処理はしていない」です。

わからない2
・.DATA.L _PowerON_Reset はプログラムを「_PowerON_Reset」からスタートする動作だと
教わりましたが、この記述でなんでそうなるかがわからないです。

>>419
ありがとうございます。そういうもんですか・・・そこは飲み込みます。
2022/07/22(金) 23:24:37.68ID:bpOnuI9e
CODE Section は、0400 から、
DATA Section は、0000 からとか、

どこのアドレスを使うか、決めるのは自由だろ?
2022/07/22(金) 23:37:14.09ID:bpOnuI9e
0000 などは、16進数か?

0000〜00ff: 0〜255
0100〜01ff: 256〜511
0200〜02ff: 512〜768
0300〜03ff: 768〜1023
0400〜04ff: 1024〜1279

つまり、0400 は1024のアドレスから始まる
2022/07/22(金) 23:38:03.71ID:JKfbNlr+
_PowerON_Resetっていうラベルは
SLEEP命令の位置のH'0400を指すんだよ
それで.DATA.Lという疑似命令で
現在位置H'0000にH'0400を出力する
2022/07/22(金) 23:51:00.22ID:JKfbNlr+
というかマニュアルを読めよ全部書いてあるぞ
たぶんこの2つだろ↓
H8/300H シリーズ プログラミングマニュアル
H8S, H8/300 シリーズ クロスアセンブラ ユーザーズマニュアル
425デフォルトの名無しさん
垢版 |
2022/07/23(土) 00:11:15.01ID:mkhmVAM0
>>424
今回の質問の前に思いつく限りの検索ワードで調べました。
以下の媒体は特に参考になったと思えたページの一部です。
流石に書籍やpdfを全ページ読んだとは言いませんが、
SECTION、PResetPRG、CODE、LOCATE=H'0400、_PowerON_Reset:、$VECT0、DATA
など、コード内にあった主要な記号は全て検索し、
ヒットした箇所の前後の記述を熟読し、それでも理解できなかったので質問しました。
今は >>423 さんのレスにあった疑似命令について調べているる途中です。

プログラムはHTML/CSSしかやったことがなく、そっちの感覚が全く使えないので苦慮しております。


[プログラム](http://www.t-net.ne.jp/~kuu-sky/page090.html)
[01_01.EPS](https://nagasm.org/ASL/manual/soft.pdf)
[HEW 生成ファイル補足説明(H8S、H8/300)](https://www.renesas.com/us/ja/document/man/735601)
[H8プログラミングメモ](https://bluefish.orz.hm/sdoc/h8_prog.html)
[たのしくできるH8マイコン制御実験 - 横田一弘 - Google ブックス](https://books.google.co.jp/books?id=hNPVNj4wuOIC&printsec=frontcover&hl=ja#v=onepage&q&f=false)
(https://books.google.co.jp/books?id=9dd1xBNFRpAC&printsec=frontcover&hl=ja#v=onepage&q&f=false)
[ppkitinside2004.pdf](http://www.robot-triathlon.org/kit/ppkitinside2004.pdf)
[H8S H8/300シリーズ クロスアセンブラ ユーザーズマニュアル](https://www.renesas.com/us/ja/support/document-search?keywords=j702038_h8s)
[H8/36064グループハードウェアマニュアル](https://www.renesas.com/jp/ja/document/mah/h836064-group-hardware-manual?language=ja&r=1052281)
[プログラミング(前編) | Renesas](https://www.renesas.com/jp/ja/support/engineer-school/mcu-programming-peripherals-05)
[H8/300H シリーズ プログラミングマニュアル](https://www.renesas.com/jp/ja/document/man/870711)
[猫ですが。: H8マイコン-その1](http://konohanaya.blogspot.com/2010/10/h.html)
426419
垢版 |
2022/07/23(土) 00:43:15.10ID:6LmREh/f
>>420
開発時にメモリ上にどのようにデータを配置するかの指定は今は一般的にリンカの仕事
パソコンのプログラムはもちろん、マイコンでも今はリンカに対して配置するアドレスを
指定するのが一般的
ルネサスの場合、現行のRXマイコンやRAマイコンなどもアドレスはリンカに指示する

しかしレガシーな開発環境だとアセンブラコード内にアドレスを直打ち出来たりして
>>416の例はそのケースだと思う。今時の開発環境でこのパターンはレアと
思われるので理解を深める必要はないかも

H8の開発環境はないのでRXマイコン(CS+)の例だけど
RXマイコンのリセットベクタのアドレスは0xFFFFFFFCからの4バイト
リセットが解除されるとこのアドレスの値がPCへロードされる(=書かれているアドレスから実行が始まる)
ttps://uploader.purinka.work/src/20992.png
右のメモリダンプを見ると0xFFFFFFFCの値は0000C0FF。リトルエンディアンなので並べ替えると
0xFFC00000となりこのアドレスから実行が開始される
左の逆アセンブルリストで0xFFC00000を見るとPowerON_Reset_PC関数がある
PowerON_Reset_PC関数のソースコードを見ると
ttps://uploader.purinka.work/src/20994.png
#pragma sectionでResetPRGセクションへ配置するよう指示されている(91行目~)
Pはセクション種別で2文字目以降がセクション名
そしてリンカの設定を見ると
ttps://uploader.purinka.work/src/20993.png
ResetPRGセクションは0xFFC00000が指定されていて上記アドレスと一致する
427419
垢版 |
2022/07/23(土) 00:44:12.83ID:6LmREh/f
>・このCPUはリセットされると0番地から実行を開始する
正確にはこれは間違っている。正しくは0番地に書いてあるアドレスから実行が開始される
リセットベクタというかベクタテーブルには大きく分けて2パターンあって
・該当するアドレスに書いてある命令を実行する
・該当するアドレスにアドレスから実行する
通常はこのどちらか。H8は後者。前者は古い物に多くて、新しめのはほとんど後者

>・H'0000番地の中にH'0400が入っているについて、その入れる処理は、どこがそうなっているんですか?
>.SECTION $VECT0,DATA,LOCATE=H'0000
>.DATA.L _PowerON_Reset ←PowerON_Resetのアドレスが配置される実データ
この部分が該当箇所。最終的なデータを出力しているのはアセンブラ
上にも書いたけどこのような書き方は今の主流ではない

何となくだけど開発ツールの扱いもまだ不慣れなのかな。自分も使いこなせているとは言い難いけど
428デフォルトの名無しさん
垢版 |
2022/07/23(土) 01:38:12.90ID:mkhmVAM0
>>>423
調べてきました!
DATA命令を使ってメモリ上にアドレスを確保できるってことですね。
どうやら自分はその使い方を、検索時に見落としていたようです。
ようやく0000の中に0400が入る流れがイメージできました。
レスの内容を頼りに調べたところ、下記書籍にDATA命令を用いて
アドレスシンボルの番地をメモリに確保する旨の解説がありました。

たのしくできるH8マイコン制御実験
https://books.google.co.jp/books?id=hNPVNj4wuOIC&printsec=frontcover&hl=ja#v=onepage&q&f=false

>>426-427
419さん画像付きでの解説ありがとうございます!今の自分は「リンカとは?」ってレベルなのですが、
少なくともその「ResetPRGセクションは0xFFC00000が指定されていて上記アドレスと一致する」までの解説は、
画像を見ながら最後まで追いかけることができました。
来週また学校へ行った時に、HEWのツールで同じように追いかけてみます!
「0番地に書いてあるアドレスから実行が開始される」のご指摘も含めて、今後も学んでいきます。
2022/07/23(土) 11:02:36.52ID:a/eG1EZ0
うむ。なかなか見所のある若者じゃ、精進なされよ
430419
垢版 |
2022/07/23(土) 11:39:15.16ID:n897GEgW
ぶっちゃけ「今更H8かよ」感はある
確かに古い故にシンプルだろうし学校の教材の都合なんだろうけど
H8マイコンのほとんど(全部?)は新規開発非推奨になっているはず
マイコンの勉強にはなっても実践的ではない

>>428
本気でマイコン開発を勉強したいなら32bitマイコンのボードを購入して弄ってみる方が
良いかもしれない・・・と思ったけど今やルネサスの評価・試作ボードは値上がっている上に
販路も限られるようだ。国内から買えるところだとTarget Board for RXもRA Fast Prototyping Boardも
chip1stopかmouserくらいしかなくて値段も4~5千円くらいはするっぽい

自分のパソコンを持っているならだけど、HEW後続のCS+の評価版は無料で利用できるから
ダウンロード(確か要登録)&インストールして同梱されているRXシミュレータを動かしてみるとか?
RXのシミュレータはお世辞にも出来が良いとは言えないけど>>426程度の確認は出来るし
ルネサスがRXをH8の後続に据えていることもあってH8→RX移行マニュアル的なドキュメントも揃っている
もちろんH8のノウハウそのままとは行かないけど雰囲気を掴むくらいは出来るのでは

あとリンカに関してだけどそもそもリンカを含む低レイヤーの解説資料は少ないと思う
自分が知る範囲だとこの本を紹介しておく
リンカ・ローダ実践開発テクニック
ttps://shop.cqpub.co.jp/hanbai/books/38/38071.html
FreeBSD&gcc環境で解説されていてマイコンに特化した説明ではないので適宜読み替える必要があるけど
2022/07/23(土) 11:46:55.13ID:PpxI5rKd
アセンブラでリンカの話とか最初からしてもなぁwとは思う
432デフォルトの名無しさん
垢版 |
2022/07/23(土) 12:01:32.61ID:bR39w9BX
H8のベクタってその番地にjmpを描くんじゃないの
2022/07/23(土) 12:08:49.71ID:ESnt81dA
H8/3069Fみついわボードはよく出来てたなあ
H8のアーキテクチャは普通のPCのCPUと同じノイマン型だからアセンブラの学習には良いと思う
当時はWebでの情報も比較的多かったが
今はどうかな
434419
垢版 |
2022/07/23(土) 12:28:51.76ID:n897GEgW
>>431
現在の学習レベルだと、とりあえず「そう言うもんだ」で済ましてかまわないとは思うけど
本人は納得できていないみたいだし、いつかは理解しなきゃいけない部分だし良いんでないの
割り込みコントローラ回りを弄るようになったらデバッグのために嫌でも覚えるようだろうし
435416
垢版 |
2022/07/23(土) 14:22:31.02ID:mkhmVAM0
>>430
学校というのは実は職業訓練でして。
今はH8/TinyマイコンとHEW環境を教材にして学んでいますが、
この後の授業は半年かけて、C言語、ラズパイ、Java、スマホのアプリ制作と進んでいく流れです。
H8が時代を感じるものであることは承知しており、プログラムや組込みの基礎を学びつつ、
「わからない状況に陥った時の対応力」を鍛えるつもりで向き合っています。
今回は、自分が勉強しなくちゃいけないところがよくわかりました。
メモリとCPUの関係と、プログラムカウンタの動き方をよく調べておきます。
あとDATA命令の使い方もおさらいします。
ソースコードはちゃんと、1行1行全部、根拠付きで説明できるようになりたいですね。

>HEW後続のCS+の評価版
環境は自宅でも導入しようと以前調べたのですが、自分のメイン機がMac(M1Air)でして、
HWEがMacで使えないと知り、ちょっと保留にしているところです。
Windows機は10年ほど前に買ったDELLのinsprion15Rが押し入れに眠っているので
Macでやるいい方法が見つからなかったから、お盆あたりにそいつを蘇生しようかな、と。

HEW後続のCS+の評価版の件と、リンカ・ローダ実践開発テクニックはブクマ入れました。
2022/07/23(土) 15:00:25.61ID:cRrcO95j
うむ
2022/07/23(土) 17:13:46.90ID:FGM1D/su
職業訓練校でH8でアセンブラなんて尖ってるなぁ。
アセンブラなんて基本情報処理向けにCASLでも勉強して
マイコンなんてCでいいと思うんだけどな。
2022/07/23(土) 18:33:10.27ID:qgluObjk
単にアセンブラと言ってもOSみたいのを作る場合と単にユーザープログラムを
書く場合では必要な知識が違うと思われ
2022/07/23(土) 19:08:26.97ID:PpxI5rKd
>>438
そうだね
今時組み込みですらlinuxとかOSを使うし一昔前でもitronとか使ってたし
直接リセットベクタやらを設定するようなプログラムは現実にはスーパーファミコンぐらいの
時代に戻らないと無かった気がするな
まぁ、コンピュータの知識としての課題でそういう基礎と言うか基本的な事を知っていて悪い事では無いけど
相当前から最低でもC/C++での開発だっただろうし部分的にインラインアセンブラを使う事はあっても
アセンブラでOS無しのプログラムを書くことはまずないからそんな知識は今となっては殆ど必要無くなってるよね
440デフォルトの名無しさん
垢版 |
2022/07/23(土) 21:02:27.65ID:FAO+OpS7
組み込みやったことないのか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況