FreeRTOS on LPC2388 + 若松LANカード

インタフェース5月号の付録についてましたLPC2388基板の続きです。

先週、若松通商にてインターフェース NXP ARM/EX LAN&SDカード拡張子基板 (以下、若松LANカード)を購入しました。

LAN機能の動作確認のため今回もFreeRTOSのLPC2368のデモプログラムを流用しました。当初コードを改変しなくても動くだろうと思いましたがつまずいた箇所がありました。それは、デモプログラムで使用しているPHY(DP83848)と今回購入した若松LANカードで使用しているPHY(LAN8187)が異なることによるものでした。
以下のようにサンプルコードを修正したところウェブサーバが動くようになりました。

1)PHYアドレス
サンプルコードは、0x1でしたが、LANカードは、0x6です。
2)Link, speed, duplex, product id
サンプルコードはProduct IDのチェックをし、Link, Speed, duplexは、アドレス0x10というベンダー独自アドレスを使用しています。
Product IDのチェックするコードはコメントアウトし、リンクなどのチェックは、IEEE802.3で規定されているアドレス0x1で行うようにしました。

以下、実行画面です。










Interface (インターフェース) 2009年 07月号 [雑誌]
Interface (インターフェース) 2009年 07月号 [雑誌]
CQ出版

Interface (インターフェース) 2009年 06月号 [雑誌]
Interface (インターフェース) 2009年 06月号 [雑誌]
CQ出版

Interface (インターフェース) 2009年 05月号 [雑誌]
Interface (インターフェース) 2009年 05月号 [雑誌]
CQ出版





FreeRTOS on LPC2388基板

LPC2388基板でFreeRTOSが動きました。
なおFreeRTOSは、後閑さんの電子工作室をきっかけにLPC2368に移植済みでありuIPにも対応したデモプログラムが公開されていることを知りました。

以下作業手順です。

1)FreeRTOS5.2.0をダウンロード&解凍
2)FreeRTOSV5.2.0¥FreeRTOSV5.2.0¥Demo¥ARM7_LPC2368_Eclipse¥RTOSDemoをworkspaceに指定して開く
3)ビルドするとリンクエラー発生。
ここによるとyagartoのgccを使うと問題が解決すると知る。
4)YagartoからGCC環境をダウンロード、インストール。
ちなみにgccのバージョンは、4.3.2から4.3.3になりました。
5)リビルドするとundefined errorが発生する。
Yagartoのnewlibライブラリに関するNOTEによると以下の関数が実装されていないことを知る。
_sbrk_r, _fstat_r, _isatty_r, _close_r, _lseek_r, _write_r, _read_r
暫定対策としてyagartoのサイトからsyscall.cをダウンロードしプロジェクトに組み込む。
4)リビルドするとelfファイルが生成できた!
5)CPUクロックの変更、uartドライバの組み込み、Makefile,
リンクスクリプトファイルを修正。
6)後閑さんの解説ページを参考にテストプログラムを作成。
(LCD,ethernet機能を削り、3つのタスクを生成し、それぞれ一定の間隔にてuartにメッセージを出力するプログラム。)
7)リビルド&書き込み&テスト
8)正しく動作しました!

Interface (インターフェース) 2009年 07月号 [雑誌]
Interface (インターフェース) 2009年 07月号 [雑誌]
CQ出版

Interface (インターフェース) 2009年 06月号 [雑誌]
Interface (インターフェース) 2009年 06月号 [雑誌]
CQ出版

Interface (インターフェース) 2009年 05月号 [雑誌]
Interface (インターフェース) 2009年 05月号 [雑誌]
CQ出版





Interface 2009/05 LPC2388基板 gcc開発環境構築 (2)

zusさんコメントをいただいた!

早速自分の環境でも試してみる。

cs-makeの場合
===================================
C:¥user¥workspace¥sample>cs-make clean

Cleaning project:
rm -f main.hex
rm -f main.bin
rm -f main.obj
rm -f main.elf
rm -f main.map
rm -f main.obj
rm -f main.a90
rm -f main.sym
rm -f main.lnk
rm -f main.lst
rm -f main.o
rm -f
rm -f
rm -f asmfunc.o
rm -f main.lst asmfunc.lst main.lst
rm -f main.s
rm -f

C:¥user¥workspace¥sample>cs-make all
arm-none-eabi-gcc (Sourcery G++ Lite 2008q3-66) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Assembling (ARM-only): asmfunc.S
arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -I. -x assembler-with-cpp -DROM_RUN -D__W
inARM__ -D__WINARMSUBMDL_LPC2388__ -Wa,-gdwarf-2 asmfunc.S -o asmfunc.o

Compiling C: main.c
arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -I. -gdwarf-2 -DROM_RUN -D__WinARM__ -D_
_WINARMSUBMDL_LPC2388__ -Os -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wswi
tch -ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wshadow
-Wunused -Wcast-qual -Wnested-externs -std=gnu89 -Wstrict-prototypes main.c
-o main.o

Linking: main.elf
arm-none-eabi-gcc -mcpu=arm7tdmi-s -I. -gdwarf-2 -DROM_RUN -D__WinARM__ -D__WI
NARMSUBMDL_LPC2388__ -Os -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wswitch
-ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -W
unused -Wcast-qual asmfunc.o main.o --output main.elf -nostartfiles -Wl,-Ma
p=main.map,--cref,--gc-sections -lc -lm -lc -lgcc -TLPC2388-ROM.ld
cp main.elf ./jtag

Creating load file for Flash: main.hex
arm-none-eabi-objcopy -O ihex main.elf main.hex

Creating Extended Listing: main.lst
arm-none-eabi-objdump -h -S -C main.elf > main.lst

Creating Symbol Table: main.sym
arm-none-eabi-nm -n main.elf > main.sym
main.elf :
section size addr
.text 1232 0
.bss 12 1073741824
.stack 2560 1073741840
.comment 42 0
.debug_aranges 104 0
.debug_pubnames 75 0
.debug_info 280 0
.debug_abbrev 166 0
.debug_line 462 0
.debug_frame 120 0
.debug_str 106 0
.debug_loc 159 0
.ARM.attributes 46 0
.debug_ranges 88 0
Total 5452



C:¥user¥workspace¥sample>cs-make --version
GNU Make (Sourcery G++ Lite 2008q3-66) 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-mingw32

C:¥user¥workspace¥sample>
========================================================

makeのバージョンもYagartoのmakeと同じ3.81でした。

Yagartoのmakeを使ったときのログは以下の通りです。
========================================================
C:¥user¥workspace¥sample>make clean

Cleaning project:
rm -f main.hex
rm -f main.bin
rm -f main.obj
rm -f main.elf
rm -f main.map
rm -f main.obj
rm -f main.a90
rm -f main.sym
rm -f main.lnk
rm -f main.lst
rm -f main.o
rm -f
rm -f
rm -f asmfunc.o
rm -f main.lst asmfunc.lst main.lst
rm -f main.s
rm -f

C:¥user¥workspace¥sample>make all
arm-none-eabi-gcc (Sourcery G++ Lite 2008q3-66) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Assembling (ARM-only): asmfunc.S
arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -I. -x assembler-with-cpp -DROM_RUN -
inARM__ -D__WINARMSUBMDL_LPC2388__ -Wa,-gdwarf-2 asmfunc.S -o asmfunc.o

Compiling C: main.c
arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -I. -gdwarf-2 -DROM_RUN -D__WinARM__
_WINARMSUBMDL_LPC2388__ -Os -Wall -Wcast-align -Wimplicit -Wpointer-arith -
tch -ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wsh
-Wunused -Wcast-qual -Wnested-externs -std=gnu89 -Wstrict-prototypes mai
-o main.o

Linking: main.elf
arm-none-eabi-gcc -mcpu=arm7tdmi-s -I. -gdwarf-2 -DROM_RUN -D__WinARM__ -D
NARMSUBMDL_LPC2388__ -Os -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wsw
-ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wshado
unused -Wcast-qual asmfunc.o main.o --output main.elf -nostartfiles -Wl
p=main.map,--cref,--gc-sections -lc -lm -lc -lgcc -TLPC2388-ROM.ld
cp main.elf ./jtag

Creating load file for Flash: main.hex
arm-none-eabi-objcopy -O ihex main.elf main.hex

Creating Extended Listing: main.lst
arm-none-eabi-objdump -h -S -C main.elf > main.lst

Creating Symbol Table: main.sym
arm-none-eabi-nm -n main.elf > main.sym
main.elf :
section size addr
.text 1232 0
.bss 12 1073741824
.stack 2560 1073741840
.comment 42 0
.debug_aranges 104 0
.debug_pubnames 75 0
.debug_info 280 0
.debug_abbrev 166 0
.debug_line 462 0
.debug_frame 120 0
.debug_str 106 0
.debug_loc 159 0
.ARM.attributes 46 0
.debug_ranges 88 0
Total 5452



C:¥user¥workspace¥sample>make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-mingw32

C:¥user¥workspace¥sample>
====================================================

Interface 2009/05 LPC2388基板 gcc開発環境構築 (1)

LPC2388基板のgccの開発環境がようやく整いました。

基本的には、ZUSさんのページ通りにやりましたが、躓いたところがありました。

3.5 6)でBuild Allをしてみると"make: *** [version] Error 2"というエラーがでてしまいビルドができませんでした。ためしにコマンドプロンプトからmake allをしてみるとやはり以下のエラーが発生します。
=============
C:¥user¥workspace¥sample>make all
process_begin: CreateProcess((null), arm-none-eabi-gcc --version, ...) failed.
make (e=2): 指定されたファイルが見つかりません。
c:¥utils¥bin¥make: *** [version] Error 2
=============


googleで検索しても決め手となるものはありませんでしたが、makeのバージョンになにか関係がありそうです。エラーのログでもversionと書いてありますし。
ちなみに使っていたmakeのバージョンは、3.78.1でした。
Yagartoからutilityツールをダウンロード、インストール、PATHの設定、ビルドをするとエラーもなくmain.elfが生成されました。デバッガも無事に動いてます。ちなみにmakeのバージョンは、3.81です。

解説ページを公開していただいたZUSさんに深く感謝いたします。
1