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

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレGCCについて part9

    gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    451 : デフォルトの名無 - 2010/06/30(水) 08:36:05 (+4,-29,-9)
    4.5.0 ということは ports ? 野良ビルド?
    452 : デフォルトの名無 - 2010/06/30(水) 10:26:36 (+43,+25,+0)
    うん
    453 : デフォルトの名無 - 2010/06/30(水) 10:40:31 (+57,+29,-3)
    結局どっちなんだよと思ったのは私だけじゃないはず
    454 : デフォルトの名無 - 2010/06/30(水) 11:36:41 (+51,+28,-2)
    結局どっちなんだよ!
    455 : デフォルトの名無 - 2010/06/30(水) 16:40:24 (+3,-30,-45)
    >>451
    http://ftp.riken.go.jp/の.tbzと野良の両方で再現した。

    ただ、OSXからのFreeBSDクロスコンパイル→転送して実行、ではAdaのほうでも再現したのに、
    FreeBSD上のセルフコンパイルでは野良ではAdaでは再現しない(C++では再現、gcjはビルドできなかった……)と
    結構ばらつく。よくわからん。
    456 : デフォルトの名無 - 2010/07/02(金) 17:51:11 (+43,+25,+0)
    うーむ
    457 : デフォルトの名無 - 2010/07/21(水) 08:25:11 (+3,-30,-197)
    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 : デフォルトの名無 - 2010/07/21(水) 08:52:48 (+4,-29,-12)
    0 << PC0 ってなんなんでしょうか?
    0 はシフトしても 0 でしょう?
    おかしいと思いませんか?
    459 : デフォルトの名無 - 2010/07/21(水) 09:21:16 (+3,-30,-97)
    >>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 : デフォルトの名無 - 2010/07/21(水) 09:27:03 (+3,-30,-68)
    書いてきて混乱してきた
    PORTxっていうのは、常時フルビット0xFFになっていて
    例えばPORTAであれば、対応するのはPA0~7になり
    0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…?

    シフトする理由が分からない…シフトする場合↑の通りであるのならば
    PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら
    シフトしてけばしていくほどおかしくなるような…
    461 : デフォルトの名無 - 2010/07/21(水) 09:34:17 (+64,+29,-55)
    &= ってなんの記号? わかってる?

    それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。
    運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。
    462 : デフォルトの名無 - 2010/07/21(水) 09:47:44 (+11,-30,-47)
    >>461
    フルビットって使わないの?すまん、知らなかった

    &=ってANDって意味じゃないの?
    cで言えば、 a = a & b;といった形だと思ってたんだけど
    PORTx = PORTx & ~(1 << PCx);
    今回チルダが付いているから、NOTANDだと思うけど
    463 : ◆fWZlQq - 2010/07/21(水) 09:52:14 (+57,+29,-44)
    トリップ付けておきます
    基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに
    フルビットって使ってたんで一般的だと思ってました。
    464 : デフォルトの名無 - 2010/07/21(水) 10:01:53 (+9,-30,-30)
    >PORTx = PORTx & ~(1 << PCx);
    ここまで解ってて何故わからないのかがわからない
    そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ
    465 : ◆fWZlQq - 2010/07/21(水) 10:17:32 (+4,-29,-85)
    >>464
    うーん…
    何となくこのやり取りをしている間に、考えてたら分かってきたような
    気もするのだけれども、

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

    後は、シフトする部分がいまいち…
    これは、0001を0010にするとかではなくて、ビットをずらすのではなく
    0000を0001にしますよ、的な感じでいいです?(1を立てる
    466 : ◆fWZlQq - 2010/07/21(水) 10:19:31 (+57,+29,-34)
    軽く自分なりにまとめると、
    &~がかかる部分は、PCxの場所だけで
    シフトするというのは倍々にしていくシフトと違い
    1であれば、その場所に1ビットを立てるということで問題ないでしょうか?
    467 : ◆fWZlQq - 2010/07/21(水) 10:25:17 (+3,-30,-43)
    連投ごめん
    ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、
    へし折るという意味で(0 << PCx)でもいけるような…orz

    テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して
    作れってことでしょうか?orz
    468 : デフォルトの名無 - 2010/07/21(水) 10:43:57 (+16,-6,+1)
    gcc全く関係ない
    469 : ◆fWZlQq - 2010/07/21(水) 10:47:30 (-1,-29,-27)
    >>
    gccでのプログラミングでしたので、ここで質問したのですが、
    c / c++の方でしたでしょうか?
    それとも、また別な場所です?
    470 : デフォルトの名無 - 2010/07/21(水) 10:48:33 (+26,-30,-146)
    なんていうか…もうノートにビットパターン書きながらひとつづつ考えてください。
    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 : デフォルトの名無 - 2010/07/21(水) 10:48:51 (+10,-12,-12)
    Cとかの質問スレだな
    472 : 470 - 2010/07/21(水) 10:51:39 (-1,-29,-2)
    ごめん。書いてあるのは PCx : 2 の場合だった><
    473 : デフォルトの名無 - 2010/07/21(水) 10:52:25 (+65,+29,-8)
    こいつの制御するロボットには絶対に近づきたくないなw
    474 : ◆fWZlQq - 2010/07/21(水) 11:17:12 (+43,-29,-90)
    >>470
    やっと理解した、ありがとう
    シフト演算激しく勘違いしてたわ (1 << PCx)の1は1ビットずらすのではなく
    1をPCx分ずらすでしたね。過去ログ見てると恥ずかしい

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

    >>473
    ロボに罪ハナイ…
    475 : デフォルトの名無 - 2010/07/21(水) 11:53:10 (+63,+29,-2)
    >>474
    がんがれ。ロボがコサックダンス踊れるようになるくらいまで。
    476 : デフォルトの名無 - 2010/07/21(水) 18:42:36 (+4,-23,-56)
    GCC使ってりゃこのスレってことなら
    PS3やWii、Androidの開発もこのスレになるな
    477 : デフォルトの名無 - 2010/07/21(水) 19:00:18 (+57,+29,-20)
    携帯じゃなくても良いからMIDIのシーケンサーつくってみろ。
    ずれるかずれないかわかる。
    478 : デフォルトの名無 - 2010/07/30(金) 21:54:57 (+107,-30,+0)
    質問です。
    TOPPERSって言うフリーの組込みOSがあるのですけど、そのソースコードの一部に
    こんなマクロが定義してあってチンプンカンプンです。
    IA-32の命令に"s"とか"d"ってあったっけ?

    #define OBJECT(x,y) __asm("d" #x "," #y "@");
    #define MEMBER(x,y) __asm("s" #x "::" #y ",(%0),(%1)@" ::\
    "i"(sizeof(((struct x *)0)->y)), "i"(&((struct x *)0)->y));
    #define VAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x)));
    #define EVAR(x,y) __asm("s" #y ",(%0),(0)@" :: "i"(sizeof(x)));
    #define SVAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x[0])));
    #define DEFS(x) __asm("s" #x ",(%0),(0)@" :: "i"((unsigned long)x));
    479 : デフォルトの名無 - 2010/07/30(金) 22:17:38 (+41,-29,-14)
    >>478
    __asm の内側はアセンブラの世界。
    gas の擬似命令を含むことも出来る。
    C/C++ では隣接する文字列リテラルは連結される。
    480 : デフォルトの名無 - 2010/07/30(金) 22:18:18 (+62,+29,-41)
    >>478
    http://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html
    この辺りの「文字列化」を参照してください。
    gcc の -E オプションもマクロの理解を助けてくれると思う。
    481 : デフォルトの名無 - 2010/07/30(金) 22:28:39 (+64,+29,-6)
    ここで聞くよりTOPPERSのメイリングリストで聞いたほうがいいような気がするんだけど。
    482 : デフォルトの名無 - 2010/07/30(金) 22:41:17 (+57,+29,-6)
    どうだろう。
    あくまでも gcc 側の機能についての質問だからこっちでいいような気もする。
    483 : 478 - 2010/07/30(金) 23:38:46 (+50,-30,-85)
    >>479
    文字の連結は理解しているつもりですが、IA-32の命令や疑似命令のようにも思えない。
    と言う訳で手元のMacOSXでTOPPERSをコンパイルしてそのマクロを使うkernel_chk.cを
    生成しようと思ったけど、LINUXではないのでやはりできず。
    来週、会社へ行くまでkernel_chk.cを生成できそうにありません

    >>481
    TOPPERSの機能に関する質問ではないのでそれはできません
    484 : デフォルトの名無 - 2010/07/30(金) 23:44:50 (+9,-29,-43)
    TOPPERSってそもそもIA-32をサポートしているのでしょうか。
    インテルのCPUで組み込みってあまり聞かない気がします。
    私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。
    コンパイルに使用したコンパイラは、もちろんSH用のgccです。
    485 : デフォルトの名無 - 2010/07/30(金) 23:49:01 (+91,+29,-45)
    ていうか、どんなasm命令に展開されるかは
    単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して
    それをcppかければ良いだけでは。
    486 : デフォルトの名無 - 2010/07/30(金) 23:49:48 (+36,-29,-47)
    >>483
    評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。
    487 : 478 - 2010/07/30(金) 23:50:04 (+4,-30,-34)
    >>484
    Linuxのシミュレーション環境に対応しています。
    このパッチをあてて
    http://www.northern-cross.info/download.html

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

    これで動かせます。
    488 : 478 - 2010/07/30(金) 23:51:31 (+76,+28,-3)
    >>485
    それやりたいけどLINUXないお

    >>486
    面倒ぽ・・・
    489 : デフォルトの名無 - 2010/07/30(金) 23:52:38 (+56,+28,-16)
    マクロ名からしてラベル作ってるんじゃね?
    490 : デフォルトの名無 - 2010/07/31(土) 00:02:41 (+25,-19,-41)
    >>488
    いやLinuxでなくてもGCCは使える

    っていうか、プリプロセッサの出力、というだけなら
    機能を持たないC/C++コンパイラは皆無だろ。
    cppを別途持っているかは別として
    491 : デフォルトの名無 - 2010/07/31(土) 00:31:27 (+49,+21,-9)
    Linux固有のヘッダファイルが1つでもインクルードされてたらアウトですよ。
    492 : 478 - 2010/07/31(土) 00:32:17 (+40,-30,-95)
    >>490
    というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。

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

    手元のMacOSX(FreeBSDベース)だと生成できなくて・・・
    493 : 478 - 2010/07/31(土) 00:36:13 (+2,-25,-17)
    というわけで、来週会社に行ってkernel_chk.cを入手するまでこの件は保留させて下さい
    みなさんお騒がせしました
    494 : デフォルトの名無 - 2010/07/31(土) 00:39:45 (+63,+29,-63)
    >>492
    そういう状況では、さすがにスレ違いですね。
    空きマシンにUbuntuなどをインストールして
    Linux環境を構築する以外に、抜け道はないと思います。
    495 : デフォルトの名無 - 2010/07/31(土) 01:32:24 (-1,-29,-5)
    JSPならcygwin+gccのクロス環境がある。
    Macは知らんけど。
    496 : デフォルトの名無 - 2010/07/31(土) 07:37:26 (-1,-29,-19)
    VMWARE とかで Linux を導入すると楽かも
    497 : デフォルトの名無 - 2010/07/31(土) 09:49:46 (-1,-29,-39)
    TOPPERS固有の、コンフィギュレータまわりかメタデータか何かを生成するためのコードでしょ。
    TOPPERSのソースコードの質問をTOPPERSのメーリングリストでしてはいけない理由がわからん。
    498 : デフォルトの名無 - 2010/07/31(土) 10:18:06 (+86,+24,-6)
    質問の意図はasm自体がよく分かっていないってことでは?
    499 : デフォルトの名無 - 2010/07/31(土) 10:21:44 (+68,+29,-2)
    >>498
    >>479に書いてあるし、>>483を見る限り理解してるでしょ。
    500 : デフォルトの名無 - 2010/07/31(土) 10:46:48 (+57,+29,-6)
    つーかメーリングリストが嫌なら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 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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