のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,898人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレGCCについて part9

    gcc覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    451 = :

    4.5.0 ということは ports ? 野良ビルド?

    452 = :

    うん

    453 = :

    結局どっちなんだよと思ったのは私だけじゃないはず

    454 = :

    結局どっちなんだよ!

    455 = :

    >>451
    http://ftp.riken.go.jp/の.tbzと野良の両方で再現した。

    ただ、OSXからのFreeBSDクロスコンパイル→転送して実行、ではAdaのほうでも再現したのに、
    FreeBSD上のセルフコンパイルでは野良ではAdaでは再現しない(C++では再現、gcjはビルドできなかった……)と
    結構ばらつく。よくわからん。

    456 = :

    うーむ

    457 = :

    gccデベロッパーライトで、プログラミングを勉強・作成しています。
    cとc++は少々経験あります。

    ロボットを動かすために、マイコンボードのレジスタに書き込むのですが、
    サンプルにDDRx |= (1 << PC0)という部分があり、こちらはDDRx(8bit)の0000 0000に書き込むということだと思います。
    0000 0001みたいな感じに

    次のPORTx &= ~(1 << PC0)が良く分からないのですが、
    こちらは初回は動作させないために0にして動かないようにしておくだと思うのですが、その場合
    PORTx &= (0 << PC0)ではないのでしょうか?
    ~をつけてNOTにしてしまうと ↑の例だと1111 1110になってしまうと思います。
    どうしてここはNOTになっているのでしょうか?

    それとも初期値のレジスタは1111 1111(FullBit)と決まっているのでしょうか?

    ちなみにPC0にはサーボモーターが接続されています。

    458 = :

    0 << PC0 ってなんなんでしょうか?
    0 はシフトしても 0 でしょう?
    おかしいと思いませんか?

    459 = :

    >>458確かに0をシフトしても0ですね。
    んー…となると動きとしてはどうなってるんでしょう?

    0000 0001に対して 左シフトで 0000 0010にして、それをPORTx 0000 0000だとした場合
    1111 1101にするってことですよね
    ん…違うのか、 PC0の場所が最初、 PC1が次だと仮定して
    0000 0001を左シフト 0000 0010 PC1が0000 0010左シフトで 0000 0100
    で、現在のPORTx が0000 0110になっているからこれをNOTしてあげれば
    1111 1001で、使用するPC0とPC1は停止状態になりますよってことか

    でもその場合残りの部分がビット立っている状態になってますが、問題ないのですか?
    使わないのであれば全てビットをlowにしておかないと何かもやっとするのですが

    460 = :

    書いてきて混乱してきた
    PORTxっていうのは、常時フルビット0xFFになっていて
    例えばPORTAであれば、対応するのはPA0~7になり
    0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…?

    シフトする理由が分からない…シフトする場合↑の通りであるのならば
    PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら
    シフトしてけばしていくほどおかしくなるような…

    461 = :

    &= ってなんの記号? わかってる?

    それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。
    運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。

    462 = :

    >>461
    フルビットって使わないの?すまん、知らなかった

    &=ってANDって意味じゃないの?
    cで言えば、 a = a & b;といった形だと思ってたんだけど
    PORTx = PORTx & ~(1 << PCx);
    今回チルダが付いているから、NOTANDだと思うけど

    463 = :

    トリップ付けておきます
    基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに
    フルビットって使ってたんで一般的だと思ってました。

    464 = :

    >PORTx = PORTx & ~(1 << PCx);
    ここまで解ってて何故わからないのかがわからない
    そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ

    465 = :

    >>464
    うーん…
    何となくこのやり取りをしている間に、考えてたら分かってきたような
    気もするのだけれども、

    NOTANDがかかるのはPORTx全体ではなくて、 & ~(1 << PCx)と書かれているPCxの場所
    だけをNOTANDするってことで大丈夫? PORTxに対して行っているからPORTx全体にNOTANDがかかってると思ってた。

    後は、シフトする部分がいまいち…
    これは、0001を0010にするとかではなくて、ビットをずらすのではなく
    0000を0001にしますよ、的な感じでいいです?(1を立てる

    466 = :

    軽く自分なりにまとめると、
    &~がかかる部分は、PCxの場所だけで
    シフトするというのは倍々にしていくシフトと違い
    1であれば、その場所に1ビットを立てるということで問題ないでしょうか?

    467 = :

    連投ごめん
    ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、
    へし折るという意味で(0 << PCx)でもいけるような…orz

    テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して
    作れってことでしょうか?orz

    468 = :

    gcc全く関係ない

    470 = :

    なんていうか…もうノートにビットパターン書きながらひとつづつ考えてください。
    8ビットで PORTx : 0x0f, PCx : 3 と仮定するね。
    「(1 << PCx)」 ってのは (1 << 3)だから 00000100 になるよね?すると
    「~(1 << PCx)」 は 11111011 と 3ビット目だけが0の値になる。
    「PORTx & ~(1 << PCx)」 は 00001111 & 11111011 だから 00001011 でこれをPORTxに代入する。
    PORTx の値は 00001111 だったものが 00001011 になってる。つまり3ビット目が0になった。
    あとはPORTxやPCxの値をいろいろ変えながらノートに書いて考えてくれ…
    # これでわからないなら適当な初心者スレでたのむ

    471 = :

    Cとかの質問スレだな

    473 = :

    こいつの制御するロボットには絶対に近づきたくないなw

    474 = :

    >>470
    やっと理解した、ありがとう
    シフト演算激しく勘違いしてたわ (1 << PCx)の1は1ビットずらすのではなく
    1をPCx分ずらすでしたね。過去ログ見てると恥ずかしい

    >>470見て、テストケースで100を2ビットシフトして400作って見てやっと分かった
    NANDに関しても、0シフトすればいいんじゃね?って思ってたのが非常に恥ずかしい
    0した後に残った結果は0じゃないか…0x0F & 0x00 = 0
    もやもや解消されました。頑張る
    id出てないから分からないけど答えてくれた人たちthx

    >>473
    ロボに罪ハナイ…

    475 = :

    >>474
    がんがれ。ロボがコサックダンス踊れるようになるくらいまで。

    476 = :

    GCC使ってりゃこのスレってことなら
    PS3やWii、Androidの開発もこのスレになるな

    477 = :

    携帯じゃなくても良いからMIDIのシーケンサーつくってみろ。
    ずれるかずれないかわかる。

    479 = :

    >>478
    __asm の内側はアセンブラの世界。
    gas の擬似命令を含むことも出来る。
    C/C++ では隣接する文字列リテラルは連結される。

    480 = :

    >>478
    http://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html
    この辺りの「文字列化」を参照してください。
    gcc の -E オプションもマクロの理解を助けてくれると思う。

    481 = :

    ここで聞くよりTOPPERSのメイリングリストで聞いたほうがいいような気がするんだけど。

    482 = :

    どうだろう。
    あくまでも gcc 側の機能についての質問だからこっちでいいような気もする。

    483 = :

    >>479
    文字の連結は理解しているつもりですが、IA-32の命令や疑似命令のようにも思えない。
    と言う訳で手元のMacOSXでTOPPERSをコンパイルしてそのマクロを使うkernel_chk.cを
    生成しようと思ったけど、LINUXではないのでやはりできず。
    来週、会社へ行くまでkernel_chk.cを生成できそうにありません

    >>481
    TOPPERSの機能に関する質問ではないのでそれはできません

    484 = :

    TOPPERSってそもそもIA-32をサポートしているのでしょうか。
    インテルのCPUで組み込みってあまり聞かない気がします。
    私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。
    コンパイルに使用したコンパイラは、もちろんSH用のgccです。

    485 = :

    ていうか、どんなasm命令に展開されるかは
    単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して
    それをcppかければ良いだけでは。

    486 = :

    >>483
    評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。

    487 = :

    >>484
    Linuxのシミュレーション環境に対応しています。
    このパッチをあてて
    http://www.northern-cross.info/download.html

    $ perl ../jsp/configure -C linux
    $ make depend
    $ make

    これで動かせます。

    488 = :

    >>485
    それやりたいけどLINUXないお

    >>486
    面倒ぽ・・・

    489 = :

    マクロ名からしてラベル作ってるんじゃね?

    490 = :

    >>488
    いやLinuxでなくてもGCCは使える

    っていうか、プリプロセッサの出力、というだけなら
    機能を持たないC/C++コンパイラは皆無だろ。
    cppを別途持っているかは別として

    491 = :

    Linux固有のヘッダファイルが1つでもインクルードされてたらアウトですよ。

    492 = :

    >>490
    というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。

    cfg,chkというTOPPERS独自のバイナリプログラムがアプリケーションの設定ファイル*.cfgを参照して
    kernel_cfg.cとkernel_chk.cを生成するんです。
    kernel_chk.cが実際の使用例になるのですが、これを生成するにはLINUXが必要なんです。

    手元のMacOSX(FreeBSDベース)だと生成できなくて・・・

    493 = :

    というわけで、来週会社に行ってkernel_chk.cを入手するまでこの件は保留させて下さい
    みなさんお騒がせしました

    494 = :

    >>492
    そういう状況では、さすがにスレ違いですね。
    空きマシンにUbuntuなどをインストールして
    Linux環境を構築する以外に、抜け道はないと思います。

    498 = :

    質問の意図はasm自体がよく分かっていないってことでは?

    499 = :

    >>498
    >>479に書いてあるし、>>483を見る限り理解してるでしょ。

    500 = :

    つーかメーリングリストが嫌ならOS板にスレがあるからそっちで聞け


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について