[Armadillo:06859] Re: Armadillo-300 拡張バスについて

Takenoshita Koyo email@hidden
2011年 3月 7日 (月) 15:03:42 JST


竹之下です。

> -march=armv4オプションをつけたところ、
> リード及び、ライトとも希望通りの1回出力にすることが出来ました。

> しかし、makeでコンパイルを行うと2回でてしまいました。
> なにか、間違いがあるでしょうか?
> 
> <コンパイル lftpで転送すると希望通りの動きになる>
> arm-linux-gcc MacProgram.c command.c sub.c App.c -lm -lrt -march=armv4 -o
> App
> 
> <Makefile Flashに焼いて動作させると以前のままでNG>
> LDFLAGS = -lm -lrt -march=armv4
> EXEC = App
> OBJS = sub.o command.o MacProgram.o App.o
> all: $(EXEC)
> $(EXEC): $(OBJS)
> 	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
> clean:
> 	-rm -f $(EXEC) *.elf *.gdb *.o
> romfs:
> 	$(ROMFSINST) /bin/$(EXEC)
> %.o: %.c
> 	$(CC) -c $(CFLAGS) -o $@ $<
これは、Armadillo開発者ガイドに載っている、Out of Treeでアプリをビルドする方法でしょうか?
http://manual.atmark-techno.com/dist/atmark-dist_developers_guide_ja-1.0.7/ch10#sec-10-1

やり方が色々ありますので、どこどこのドキュメントを参照している、ということを
教えていただけると、問題点の絞り込みが容易になります。

今回の場合の問題点は、"-march=armv4"はコンパイル時のオプション(CFLAGS)に指定
しなければならない、という点だと思います。

> LDFLAGS = -lm -lrt -march=armv4
とすると、"-march=armv4"の指定は
> $(EXEC): $(OBJS)
> 	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
でしか効きません。この行はオブジェクトファイルをリンクしているだけですので、
ハーフワードインストラクションを使う/使わないとは関係ありません。

ハーフワードインストラクションを使うように指定するのは、コンパイル時であるべき
なので、
> %.o: %.c
> 	$(CC) -c $(CFLAGS) -o $@ $<
ここで効くように、CFLAGSに"-march=armv4"を追加指定します。

具体的には、以下のようになるでしょう。

LDFLAGS = -lm -lrt
EXEC = App
OBJS = sub.o command.o MacProgram.o App.o
CFLAGS += -march=armv4

all: $(EXEC)

$(EXEC): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)

clean:
	-rm -f $(EXEC) *.elf *.gdb *.o

romfs:
	$(ROMFSINST) /bin/$(EXEC)

%.o: %.c
	$(CC) -c $(CFLAGS) -o $@ $<

-- 
Koyo Takenoshita




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