=====================================================================
                        AT91SKYEYEターゲット依存部
                                  Last Modified: 2013 Feb 05 23:41:12
=====================================================================

○概要

AT91SKYEYEターゲット依存部は，オープンソースのプロセッサシミュレータで
ある，Skyeye上の ARM7TDMI をベースとした AT91 システムをサポートしてい
る．

○SkyEye

本カーネルを動作させるためには，TOPPERSプロジェクトから公開されている，
SkyEye -V1.2 DeviceManager Extension 2.2.0 以降 が必要となる．

○カーネルの使用リソース

カーネルは以下のリソースを使用する．

  ・RAM
     コードとデータを配置する．
     使用量はオブジェクト数に依存する．
  
  ・TC1
     カーネル内部のティックの生成に用いる．
     
  ・USART0
     コンソールの出力に使用．


○実行環境

動作確認を行った実行環境は，Widnows 7 上の Cygwin である．

○デバッグ環境

デバッグ環境としては，skyeyeのサポートする方法を用いることができる．
arm-elf-gdb によるデバッグの動作確認を行った．

○コンパイラ

動作確認した GCC は，以下のサイトからWindows版のバイナリをダウンロードして使用し
た以下のバージョンである．

  http://www.codesourcery.com/
   4.4.1 (Sourcery G++ Lite 2010q1-188)
   4.5.1 (Sourcery G++ Lite 2010.09-51)

上記コンパイラをインストールする際には，空白が含まれるディレクトリにイ
ンストールしないこと（インストーラが作成するインストールディレクトリ自
体に空白が含まれるため注意すること）．

○カーネル終了時の処理

ext_ker が呼び出されカーネル終了時には，at91skyeye.h にある 
at91skyeye_exit() が実行される．ディフォルトでは，特に処理は記述されて
いない．独自の処理処理を追加したい場合は，at91skyeye_exit() の内容を書
き換えること．

○ gcovによるカバレッジ取得

gcovによるカバレッジを取得したい場合には，Makefileで ENABLE_GCOV を以
下の値のいずれかに定義すること．

    full              : 全体取得
    part              : 一部取得
    only_kernel_full  : 全体取得(カーネルコードのみ)
    only_kernel_part  : 一部取得(カーネルコードのみ)

full と only_kernel_full は，プログラム実行全体のカバレッジを取得する． 
only_kernel_full はカーネルコードのみのカバレッジを取得する．これらの
カバレッジ結果は，ext_ker()を呼び出してカーネル終了することにより，
*.gcda に出力される．

part と only_kernel_part 指定した区間（時間）のカバレッジを取得する． 
only_kernel_part はカーネルコードのみのカバレッジを取得する．区間（時
間）を指定やカバレッジの出力のために以下の関数を提供する．

void gcov_init(void);
 GCOV初期化関数．呼び出した時点以降のカバレッジを取得する．

void gcov_pause(void);
 GCOV中断関数．カバレッジの取得を中断する．
 
void gcov_resume(void);
GCOV再開関数．カバレッジの取得を再開する．

void gcov_dump(void);
 GCOV出力関数．カバレッジを.gcda に出力する．

カーネル実行後にカーネルがあるディレクトリで以下のコマンドを実行すると，
カバレッジの結果が xxx.c.gcov に出力される．

 $arm-none-eabi-gcov.exe *.gcda

カバレッジの結果をhtml化するlcovを使うことも可能である．

 http://ltp.sourceforge.net/coverage/lcov.php
 
動作確認を行ったバージョンは 1.9 であるが，日本語を出力するためと，
Windwosネイティブアプリである Sourcery G++ を Cygwin環境上で使用してい
る場合には，以下のパッチが必要である．

--------------------------------------------------------------------------
--- lcov-1.9_org/bin/genhtml	2010-08-06 20:05:17.000000000 +0900
+++ lcov-1.9/bin/genhtml	2010-11-24 11:29:58.075739700 +0900
@@ -4007,10 +4007,10 @@
 	write_html($_[0], <<END_OF_HTML)
 	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
 
-	<html lang="en">
+	<html lang="ja">
 
 	<head>
-	  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+	  <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
 	  <title>$_[3]</title>
 	  <link rel="stylesheet" type="text/css" href="$_[1]gcov.css">
 	</head>
@@ -4069,11 +4069,11 @@
 	write_html($_[0], <<END_OF_HTML)
 	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 
-	<html lang="en">
+	<html lang="ja">
 
 	<head>
 	  <title>$_[3]</title>
-	  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+	  <meta http-equiv="Content-Type" content="text/html; charset=ECU-JP">
 	  <link rel="stylesheet" type="text/css" href="$_[1]gcov.css">
 	</head>
 
@@ -5578,10 +5578,10 @@
 		$result = <<END_OF_HTML
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 
-<html lang="en">
+<html lang="ja">
 
 <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <meta http-equiv="Content-Type" content="text/html; charset=ECU-JP">
   <title>\@pagetitle\@</title>
   <link rel="stylesheet" type="text/css" href="\@basedir\@gcov.css">
 </head>
diff -urN lcov-1.9_org/bin/geninfo lcov-1.9/bin/geninfo
--- lcov-1.9_org/bin/geninfo	2010-08-06 20:05:17.000000000 +0900
+++ lcov-1.9/bin/geninfo	2010-11-24 11:31:26.481094900 +0900
@@ -862,7 +862,7 @@
 
 	# Execute gcov command and suppress standard output
 	$gcov_error = system_no_output(1, $gcov_tool, $da_filename,
-				       "-o", $object_dir, @gcov_options);
+				       @gcov_options);
 
 	if ($da_renamed)
 	{
@@ -929,7 +929,7 @@
 		my $num;
 
 		($source, $object) = read_gcov_header($gcov_file);
-
+		$source =~ s/(.*)\r$/$1/;
 		if (defined($source))
 		{
 			$source = solve_relative_path($base_dir, $source);
--------------------------------------------------------------------------

カバレッジの取得後，以下のコマンドを実行すると，coverage_html 以下にカ
バレッジ結果のhtmlが生成される．

   $make lcov

○トレースログのファイル出力

トレースログをファイルへ出力するための文字出力関数を用意している．

 void target_fput_log_file(char c);
 
この関数を trace_dump の引数とすることにより，トレースログは，
kernel_trace.log というファイルに出力される．

○各種設定の変更

幾つかのパラメータは変更可能になっている．設定ファイル毎に設定可能項目
は次のようになっている．

●Makefile.target の設定項目

・GCC_TARGET
  GCCの suffix を定義

・INCLUDES
  インクルード指定

・COPTS
  Cコンパイラへのオプション

・LDFLAGS
  リンカへのオプション

●target_config.h の設定項目

・DEFAULT_ISTKSZ
  ディフォルトの非タスクコンテキスト用のスタックサイズ

・SIL_DLY_TIM1/2
  微少時間待ちのための定義


○変更履歴
2013/02/05
・1.8.0対応のため，char_t の箇所を他の型に変更．

2012/11/17
・2012/11/09の修正に間違いがあったため修正．

2012/11/09
・有効な割込み番号を(1〜18)に修正．

2011/11/22
・ARMCC対応に伴う変更
  ・at91skyeye.ld(変更)
    ・ベクターのセクション名を".vector"から"vector"に変更．
  ・target_asm.inc(追加)
  ・target_cfg1_out.h(変更)
    ・core_cfg1_out.hのインクルード方法を""から<>に変更して，コンパイラの
      引数で指定された順でインクルードファイルをサーチするよう変更．
  ・target_config.h(変更)
    ・core_config.hのインクルード方法を""から<>に変更して，コンパイラの
      引数で指定された順でインクルードファイルをサーチするよう変更．
  ・target_sil.h(変更)
    ・core_sil.hのインクルード方法を""から<>に変更して，コンパイラの
      引数で指定された順でインクルードファイルをサーチするよう変更．
  ・target_support.S(変更)
    ・ARMCCとファイルを共有するため，ディレクティブをマクロに書き換え．    
・CPSRの操作にcxsfを付加
  ・start.S
    
2011/05/09
・ASP 1.7.0 への追従．
  ・オフセットファイルの生成方法をコンフィギュレータを用いる方法に変更．
  
2011/03/10
・ASP 1.7.0 への追従．

2011/03/04
・トレースログをファイルに出力する機能を追加．

2011/01/31
・SkyEyeのバージョンがサポートしているバージョンと異なった場合に，
  SkyEyeのバージョンと，カーネルがサポートしているバージョンを表示する
  ように変更．

2010/11/30
・全ての割込みをマスクしてARM依存の終了処理を呼び出すように変更．

2010/11/28
・software_init_hook が定義されていない場合に呼び出さないように
  一旦volatile指定のあるfpに代入するように変更

2010/11/24
・lcov 1.9 への対応．

2010/11/01
・4種類のカバレッジ取得方法をサポート．

2010/09/10
・GCOVを有効時にマクロ TOPPERS_ENABLE_GCOV を有効にするよう変更．
・CPU例外を未定義命令に変更．

2010/07/26
・アセンブラファイル中の分岐命令を AAPCS推奨に変更．

2010/07/10
・ASP 1.5.0 への追従．

2010/06/23
・ena_int()で，割込みマスクの状態を考慮せずにハードウェアを更新してい
  た問題を修正．

2010/05/19
・割込み受け付け時に，システムの割込み優先度マスクを受け付けた割込みの
  割込み優先度に設定していなかった問題を修正．

2010/04/21
・SkyEye DeviceManager Extension 2.1.0 に対応．
・起動時にSkyEyeのバージョンを確認するように変更．

2009/12/19
・起動時に software_init_hook() を呼び出すように変更．

2009/11/30
・リンカスクリプトを generic-hosted.ld ベースから，
  armulator-ram-hosted.ld ベースに変更．
  コード・データサイズを大きくすると，標準関数やgcovが正しく動作しない
  問題を解決．同時に skyeye.conf のメモリの設定をリンカスクリプトの内
  容と統一．

2009/11/13
・スタックを kernel_cfg.c で確保するように変更．

2009/10/18
・TLV 1.1rc対応．
  ・サイクルカウンタの有効化．
  ・TRACE_GET_TIM()を定義．
  
2009/08/02
・lcovのサポート．

2009/08/01
・newlibのサポート．サポートに伴い，SkyEyeはTOPPERSプロジェクトから公
  開している SkyEye -V1.2 DeviceManager Extension 2.0.3 以降 が必要と
  なる．
・gcovのサポート．

2009/07/09
・target_timer_initialize()でタイマ周期にTIMER_CLOCKの値を反映するよう
  に修正．

2009/05/18
・共通部 1.4.0 追従．
・コンパイラを Sourcery G++ Lite に変更．

2009/01/29
・サイクルカウンタのサポート
  ・トレースログ機能で用いる
  ・使用するためには，TOPPERSで拡張済みのskyeyeが必要となる

2008/11/4
・Skyeye-1.2.6に対応
  ・Skyeye-1.2.6で追加されたUART受信割り込み許可・禁止レジスタに対応
