[Armadillo:05017] Re: CON16 (シリアルインターフェース1)のリブート時のメッセージ抑制

Masahiro Hanada email@hidden
2010年 3月 12日 (金) 01:38:28 JST


花田です。

> 元ソースの
>   char console[] = { "console=ttyAM0,115200" };
> この文字列初期化の書式(構文)が気になっています。
> 
> 普通は
>   char console[] = "console=ttyAM0,115200";
> こう書きますよね?

ここでのconsoleは配列型であって、代入される初期化要素は
集成体型(= { 1, 2, 3 } のような書き方)であってよい、
ということがポイントと思います。

いい加減に探した中でGoogleキャッシュしか見つからなくて恐縮ですが…
↓の表6-6参照。
http://74.125.153.132/search?q=cache:ZOrNzBKf5lcJ:www.imit.chiba-u.ac.jp/new-system/sr/man_hitachi_c/MAN/3000/03C3100D/C310095.HTM

  { 'a', 'b', 'c', '\0' }      // '\0'は省略もできます
の省略形が
  { "abc" }
であって、
  "abc"
と書いて構わないと許した…結果的にどの書き方も正しい、ということだった筈。


"Yasuhisa Nakamura" <email@hidden> wrote:

> 中村です。
> 
> totoさんの質問とも、Armadilloとも関係がないのですが・・・
> 
> 元ソースの
>   char console[] = { "console=ttyAM0,115200" };
> この文字列初期化の書式(構文)が気になっています。
> 
> 普通は
>   char console[] = "console=ttyAM0,115200";
> こう書きますよね?
> 
> 中カッコは
>   char *str[]= { "abc", "xyz" };
> のようなときに使うかと。。。
> 
> (要素1つの配列は意味がなさそうですが)上のconsoleだと
>   char *console[] = { "console=ttyAM0,115200" };
> が言語仕様的には正しいと思うのですが、元ソースの
> ままでgccに"-W"や"-Wall"をつけても警告は出ません。
> 
> 簡単なテストコードを書いてgccで試してみたところ、
> どちらでもconsoleには同じ値が入るようです。
> 
> どなたか、根拠(Cの言語仕様)がわかる方がいましたら
> 教えてください。
> 
> よろしくお願いします。
> 
> -- 
> なかむら
> 
> 
> 2010年 3月 12日(金)00:26 に Yasuhisa Nakamura さんは書きました:
> > totoさん、こんばんは。
> > 中村です。
> >
> > 2010年 3月 11日(木)21:41 に email@hidden さんは書きました:
> >>> は、ソースの次の部分です。
> >>>   char console[] = { "console=ttyAM0,115200" };
> >>>
> >> ということは
> >>  char console[] = { "console=ttyAM1,115200" };
> >>  した、Hermitを作成すれば、
> >> setenvをしなくても、コンソールをttyAM1にすることが出来るのでしょうか?
> >
> > はい、そうです。
> >
> > 私は次のような修正をして、ttyAM1用とnotty用でconsole[]の
> > デフォルトが異なるhermitを作って使っています。
> >
> > (最新のhermitのソースでは異なるかもしれません)
> >
> > --- src/target/armadillo2x0/linux.c-orig	2008-08-18 11:45:47.000000000 +0900
> > +++ src/target/armadillo2x0/linux.c	2008-10-01 21:53:45.000000000 +0900
> > @@ -134,7 +134,17 @@
> >
> >  char mtdparts210[] = { MTDPARTS210 };
> >  char mtdparts2x0[] = { MTDPARTS2X0 };
> > +#if defined(CONSOLE)
> > +#  if CONSOLE == 0
> >  char console[] = { "console=ttyAM0,115200" };
> > +#  elif CONSOLE == 1
> > +char console[] = { "console=ttyAM1,115200" };
> > +#  else
> > +#    error "unknown CONSOLE value"
> > +#  endif
> > +#else
> > +char console[] = { "console=null" };
> > +#endif
> >
> >  static int boot_cmdfunc(int argc, char *argv[])
> >  {
> > @@ -171,7 +181,9 @@
> >  	case BOARD_ID_A210:
> >  	case BOARD_ID_A210C:
> >  	  argv[argc++] = mtdparts210;
> > +#if defined(CONSOLE)
> >  	  console[13] = '1';
> > +#endif
> >  	  break;
> >  	case BOARD_ID_A220:
> >  	case BOARD_ID_A230:
> >
> > --
> > なかむら
> >
> > _______________________________________________
> > armadillo mailing list
> > email@hidden
> > http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> >
> >
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo




armadillo メーリングリストの案内