私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレGCCについて part9
gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
>>451
http://ftp.riken.go.jp/の.tbzと野良の両方で再現した。
ただ、OSXからのFreeBSDクロスコンパイル→転送して実行、ではAdaのほうでも再現したのに、
FreeBSD上のセルフコンパイルでは野良ではAdaでは再現しない(C++では再現、gcjはビルドできなかった……)と
結構ばらつく。よくわからん。
http://ftp.riken.go.jp/の.tbzと野良の両方で再現した。
ただ、OSXからのFreeBSDクロスコンパイル→転送して実行、ではAdaのほうでも再現したのに、
FreeBSD上のセルフコンパイルでは野良ではAdaでは再現しない(C++では再現、gcjはビルドできなかった……)と
結構ばらつく。よくわからん。
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にはサーボモーターが接続されています。
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にはサーボモーターが接続されています。
0 << PC0 ってなんなんでしょうか?
0 はシフトしても 0 でしょう?
おかしいと思いませんか?
0 はシフトしても 0 でしょう?
おかしいと思いませんか?
>>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にしておかないと何かもやっとするのですが
んー…となると動きとしてはどうなってるんでしょう?
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にしておかないと何かもやっとするのですが
書いてきて混乱してきた
PORTxっていうのは、常時フルビット0xFFになっていて
例えばPORTAであれば、対応するのはPA0~7になり
0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…?
シフトする理由が分からない…シフトする場合↑の通りであるのならば
PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら
シフトしてけばしていくほどおかしくなるような…
PORTxっていうのは、常時フルビット0xFFになっていて
例えばPORTAであれば、対応するのはPA0~7になり
0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…?
シフトする理由が分からない…シフトする場合↑の通りであるのならば
PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら
シフトしてけばしていくほどおかしくなるような…
&= ってなんの記号? わかってる?
それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。
運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。
それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。
運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。
>>461
フルビットって使わないの?すまん、知らなかった
&=ってANDって意味じゃないの?
cで言えば、 a = a & b;といった形だと思ってたんだけど
PORTx = PORTx & ~(1 << PCx);
今回チルダが付いているから、NOTANDだと思うけど
フルビットって使わないの?すまん、知らなかった
&=ってANDって意味じゃないの?
cで言えば、 a = a & b;といった形だと思ってたんだけど
PORTx = PORTx & ~(1 << PCx);
今回チルダが付いているから、NOTANDだと思うけど
トリップ付けておきます
基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに
フルビットって使ってたんで一般的だと思ってました。
基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに
フルビットって使ってたんで一般的だと思ってました。
>PORTx = PORTx & ~(1 << PCx);
ここまで解ってて何故わからないのかがわからない
そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ
ここまで解ってて何故わからないのかがわからない
そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ
>>464
うーん…
何となくこのやり取りをしている間に、考えてたら分かってきたような
気もするのだけれども、
NOTANDがかかるのはPORTx全体ではなくて、 & ~(1 << PCx)と書かれているPCxの場所
だけをNOTANDするってことで大丈夫? PORTxに対して行っているからPORTx全体にNOTANDがかかってると思ってた。
後は、シフトする部分がいまいち…
これは、0001を0010にするとかではなくて、ビットをずらすのではなく
0000を0001にしますよ、的な感じでいいです?(1を立てる
うーん…
何となくこのやり取りをしている間に、考えてたら分かってきたような
気もするのだけれども、
NOTANDがかかるのはPORTx全体ではなくて、 & ~(1 << PCx)と書かれているPCxの場所
だけをNOTANDするってことで大丈夫? PORTxに対して行っているからPORTx全体にNOTANDがかかってると思ってた。
後は、シフトする部分がいまいち…
これは、0001を0010にするとかではなくて、ビットをずらすのではなく
0000を0001にしますよ、的な感じでいいです?(1を立てる
軽く自分なりにまとめると、
&~がかかる部分は、PCxの場所だけで
シフトするというのは倍々にしていくシフトと違い
1であれば、その場所に1ビットを立てるということで問題ないでしょうか?
&~がかかる部分は、PCxの場所だけで
シフトするというのは倍々にしていくシフトと違い
1であれば、その場所に1ビットを立てるということで問題ないでしょうか?
連投ごめん
ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、
へし折るという意味で(0 << PCx)でもいけるような…orz
テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して
作れってことでしょうか?orz
ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、
へし折るという意味で(0 << PCx)でもいけるような…orz
テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して
作れってことでしょうか?orz
>>
gccでのプログラミングでしたので、ここで質問したのですが、
c / c++の方でしたでしょうか?
それとも、また別な場所です?
gccでのプログラミングでしたので、ここで質問したのですが、
c / c++の方でしたでしょうか?
それとも、また別な場所です?
なんていうか…もうノートにビットパターン書きながらひとつづつ考えてください。
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の値をいろいろ変えながらノートに書いて考えてくれ…
# これでわからないなら適当な初心者スレでたのむ
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の値をいろいろ変えながらノートに書いて考えてくれ…
# これでわからないなら適当な初心者スレでたのむ
ごめん。書いてあるのは PCx : 2 の場合だった><
>>474
がんがれ。ロボがコサックダンス踊れるようになるくらいまで。
がんがれ。ロボがコサックダンス踊れるようになるくらいまで。
質問です。
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));
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));
>>478
http://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html
この辺りの「文字列化」を参照してください。
gcc の -E オプションもマクロの理解を助けてくれると思う。
http://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html
この辺りの「文字列化」を参照してください。
gcc の -E オプションもマクロの理解を助けてくれると思う。
TOPPERSってそもそもIA-32をサポートしているのでしょうか。
インテルのCPUで組み込みってあまり聞かない気がします。
私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。
コンパイルに使用したコンパイラは、もちろんSH用のgccです。
インテルのCPUで組み込みってあまり聞かない気がします。
私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。
コンパイルに使用したコンパイラは、もちろんSH用のgccです。
ていうか、どんなasm命令に展開されるかは
単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して
それをcppかければ良いだけでは。
単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して
それをcppかければ良いだけでは。
>>483
評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。
評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。
>>484
Linuxのシミュレーション環境に対応しています。
このパッチをあてて
http://www.northern-cross.info/download.html
$ perl ../jsp/configure -C linux
$ make depend
$ make
これで動かせます。
Linuxのシミュレーション環境に対応しています。
このパッチをあてて
http://www.northern-cross.info/download.html
$ perl ../jsp/configure -C linux
$ make depend
$ make
これで動かせます。
>>490
というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。
cfg,chkというTOPPERS独自のバイナリプログラムがアプリケーションの設定ファイル*.cfgを参照して
kernel_cfg.cとkernel_chk.cを生成するんです。
kernel_chk.cが実際の使用例になるのですが、これを生成するにはLINUXが必要なんです。
手元のMacOSX(FreeBSDベース)だと生成できなくて・・・
というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。
cfg,chkというTOPPERS独自のバイナリプログラムがアプリケーションの設定ファイル*.cfgを参照して
kernel_cfg.cとkernel_chk.cを生成するんです。
kernel_chk.cが実際の使用例になるのですが、これを生成するにはLINUXが必要なんです。
手元のMacOSX(FreeBSDベース)だと生成できなくて・・・
というわけで、来週会社に行ってkernel_chk.cを入手するまでこの件は保留させて下さい
みなさんお騒がせしました
みなさんお騒がせしました
TOPPERS固有の、コンフィギュレータまわりかメタデータか何かを生成するためのコードでしょ。
TOPPERSのソースコードの質問をTOPPERSのメーリングリストでしてはいけない理由がわからん。
TOPPERSのソースコードの質問をTOPPERSのメーリングリストでしてはいけない理由がわからん。
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
みんなの評価 : ○類似してるかもしれないスレッド
- GCCについて part8 (763) - [95%] - 2009/3/11 8:47 ☆
- GCCについて part10 (538) - [90%] - 2018/7/5 20:30
- 【激遅】AppleGCC【絶望】 (111) - [18446744073709551607%] - 2010/1/15 10:31
トップメニューへ / →のくす牧場書庫について