Mini210S 開発キットOSなしのプログラム開発手順連載(27)

Mini210S/Tiny210等開発ボード関連のフォラーム

Mini210S 開発キットOSなしのプログラム開発手順連載(27)

投稿記事by dwtechadm » 金 5 10, 2013 6:33 pm

Mini210S 開発キット詳細URL


第XXI章 コマンド機能追加

第一節 コマンド機能について
ここでのコマンド機能はlinuxの shellと類似で、コマンドを入力して、プログラムが解析し、実行します。ここでは簡単な例を挙げます::
1) help:ヘルプ情報
2) md: memory display メモリ表示
3) mw: memory write メモリ書き込み
4) loadb: シリアルポートでbinファイルをメモリにダウンロード
5) go: メモリ内のbinファイルを実行

第二節 プログラム説明
完全なコードは、ディレクトリ21.shellご参照ください。
1. main.c
main 関数コード:
while (1)
{
printf("Mini210S: ");
gets(buf); // コマンド入力待ち
argc = shell_parse(buf、 argv); // 解析コマンド
command_do(argc、 argv); // 実行コマンド
}
注釈でわかります。関数 shell_parse()は/BL2/shell.cに定義されます、command_do()は/BL2/command.c に定義されます。

2. shell.c
shell_parse コアコード:
while (*buf) // 逐語読み取り
{
if (*buf != ' ' && state == 0) // 文字' 'を読み取り
{
argv[argc++] = buf;
state = 1;
}
if (*buf == ' ' && state == 1) //スキップスペース
{
*buf = '\0';
state = 0;
}
buf++;
}
buf 内の文字を逐語読み取り、解析します。結果はargcと argvに保存しまう。例:コマンドgo 0x21000000を入力して、最終解析結果は argc = 2、argv[0] = “go”、argv[1] = “0x21000000”。

3. command.c
command_do()を説明します、コード:
// コマンドに基づきコードを実行します
int command_do(int argc、 char * argv[])
{
if (argc == 0)
return -1;

if (strcmp(argv[0]、 "help") == 0) // help実行
help(argc、 argv);
… // コード省略

if 2(strcmp(argv[0]、 "loadb") == 0) // loadbコマンド実行
loadb(argc、 argv);
… // コード省略
}
異なるコマンドにより、異なる実行関数を呼び出します。例えば helpは関数help()を呼び出します。
各コマンドの実行関数を説明します:
int help(int argc、 char * argv[]) :ヘルプ情報をプリントアウト。
int md(int argc、 char * argv[]) :メモリを読み取り、メモリ読み取り/書き込みは全部ポインタ操作。
int mw(int argc、 char * argv[]) :メモリ書き込み
int loadb(int argc、 char * argv[]) :シリアルポートでbinファイルをメモリにダウンロードし、ファイルサイズとダウンロード先を取得します。最後に、getc()関数でbinファイルを逐語受け取ります。
int go(int argc、 char * argv[]) :メモリ内のbinファイルを実行、 ポインタを定義し、値を与え、呼び出します。


第三節 コードコンパイルとプログラミングの実行
コードをコンパイルし、Fedora端末で下記のコマンドを実行します:
# cd 21.shell
# make
21.shellのディレクトリ下にshell.binを生成し、それを開発ボードにプログラムします。

第四節 実験現象
シリアルポートで゛Mini210S:゛をプリントアウト、そしてhelpを入力し、ヘルプ情報をプリントアウトします:
画像
本章でloadb と go コマンド機能を実現できます、次の章ではコマンドでオーディオチップwm8960のベアメタル•プログラムをダウンロード・実行します。



---続く
dwtechadm
 
記事: 60
登録日時: 月 2 25, 2013 1:35 pm

Return to Cortex-A8関連

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[0人]