ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

Similar documents
RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

スライド 1

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL)

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

CS+ 統合開発環境 ユーザーズマニュアル CC-RL ビルド・ツール操作編

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

アプリケーションノート MT-R300 割り込みプログラムのデバッグ方法

RX開発環境移行ガイド V850からRXへの移行(コンパイラ編)(CA850/CX→CC-RX)

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RL78ファミリ用Cコンパイラ CA78K0R スタートアップルーチンの変更について(RL78/G10用)

講習No.12

Microsoft PowerPoint - 計算機言語 第7回.ppt

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

Microsoft Word - プログラムをRAM.doc

目次 コード生成概要ページ 03 汎用アンプを使ったデモ概要ページ 05 CS+ でプロジェクト作成ページ 07 コード生成で周辺機能設定ページ 09 ソースコードを自動生成ページ 19 プログラム編集ページ 20 デバッグツールの設定ページ 26 プログラムの実行ページ 28 e 2 studio

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

KPIT 社 GNU Tool のダウンロード 使い方 インドの KPIT 社のサイトでは H8 SH 等の GNU カを無償ダウンロードできるようになっています C コンパイラ アセンブラ デバッ 日

プログラミング及び演習 第1回 講義概容・実行制御

Cコンパイラパッケージお知らせ

ex05_2012.pptx

MMUなしプロセッサ用Linuxの共有ライブラリ機構

スライド 1

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

目次 目次... 1 はじめに... 3 マイコンシミュレータのデバッグ機能... 3 スタートアップコマンドファイル... 5 シミュレータコマンド ( マクロ ) 例... 6 I/O 制御等で外的要因待ちをしている場合 ( その1)... 6 I/O 制御等で外的要因待ちをしている場合 ( そ

memo

マクロ(シミュレータコマンド)の使い方

動機 もう6学期だし真面目に勉強しようと思った 真面目に授業聞いてみたけどよくわからなかった Amazonみてたら OS自作 という文字列を発見 話し聞いてもよくわからないしもはや自分で作っちゃえばいいんじゃない 駒場祭付近暇だしそこで 一気に作っちゃおう

プログラミング実習I

Microsoft Word - Training10_プリプロセッサ.docx

RX210 グループ MTU2 を用いた相補 PWM モードの波形出力 要旨 本サンプルコードでは MTU2 を用いて相補 PWM モードの波形を出力する方法について説 明します 対象デバイス RX210 1 / 41

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 ( テクニック編 ) Rev: PIC Trout 今回は 下記の2 件について説明します 1) CCSv5 を使用して MSP430 の Flash Memory 内容を

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint pptx[読み取り専用]

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

Microsoft PowerPoint - CproNt02.ppt [互換モード]

ex04_2012.ppt

CS+ V 統合開発環境 ユーザーズマニュアル RL78 デバッグ・ツール編

Microsoft PowerPoint - 09.pptx

kiso2-03.key

02: 変数と標準入出力

内容 1 はじめに 本ガイドの目的 本ガイドの対象者 対象製品 表記について リンカ設定ファイル例 ソースファイル例 名前の付け方 リンカオプションとリンカ設定ファ

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

アプリケーションノート AS-E402サンプルプログラム

CS+ V 統合開発環境 ユーザーズマニュアル プロジェクト操作編

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

AN1526 RX開発環境の使用方法(CS+、Renesas Flash Programmer)

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

PowerPoint Presentation

GR-SAKURA-SAのサンプルソフト説明

Fortran 勉強会 第 5 回 辻野智紀

02: 変数と標準入出力

PowerPoint プレゼンテーション

gengo1-11

file:///D|/C言語の擬似クラス.txt

Page 2 ワークスペースはプロジェクト管理の最上位であり IAR Embedded Workbench を起動すると自動的にオープンします ワークスペースには複数のプロジェクトを登録することができるので ここではメインのアプリケーションとブートローダのプロジェクトを登録します このワークスペース

Microsoft Word - tool01.doc

スライド 1

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

Prog1_10th

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

AquesTalk プログラミングガイド

02: 変数と標準入出力

プログラミングI第10回

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

講習No.1

プログラミング基礎

第3回 配列とリスト

PowerPoint Presentation

スライド 1

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

インテル(R) Visual Fortran コンパイラ 10.0

AquesTalk Win Manual

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

スライド 1

High-performance Embedded Workshop V.4.09 リリースノート

02: 変数と標準入出力

Microsoft Word - 03

CS+ RL78コンパイラ CC-RL V リリースノート

AquesTalk for WinCE プログラミングガイド

Prog1_6th

CubeSuite+版RXシリアルデバッガ取扱説明書

単体テスト設計のコツ

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

スライド 1

評価ボード キット 開発ツールご使用上の注意事項 1. 本評価ボード キット 開発ツールは お客様での技術的評価 動作の確認および開発のみに用いられることを想定し設計されています それらの技術評価 開発等の目的以外には使用しないで下さい 本品は 完成品に対する設計品質に適合していません 2. 本評価

Slide 1

RX210 グループ FIT を用いたフラッシュメモリの書き換え 要旨 本サンプルコードでは FIT を用いて 特定の内蔵フラッシュメモリ (ROM および E2 デ ータフラッシュ ) のアドレスに特定の値を書き込む方法について説明します 対象デバイス RX210 1 / 50

Microsoft PowerPoint L07-Imperative Programming Languages-4-students ( )

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

CASL入門

Microsoft PowerPoint - Kozos12step_07_

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Transcription:

ブート領域 フラッシュ領域の分割方法 RL78 ファミリ用 C コンパイラ CC-RL 2016 年 10 月 5 日 Rev.2.00 ソフトウエア事業部 ソフトウエア技術部 ルネサスシステムデザイン株式会社 R20UT3475JJ0200

アジェンダ はじめにページ 3 概要ページ 4 ブート領域 フラッシュ領域共通ページ 12 ブート領域ページ 19 フラッシュ領域ページ 38 デバッグツールページ 50 サンプルプログラムページ 53 改版履歴ページ 58 ページ 2

はじめに 本資料は RL78 ファミリ用 C コンパイラ CC-RL を使用して プログラムをブート領域 フラッ シュ領域に分割する際に 必要な処理について説明しています 本資料は 次のツール バージョンで説明をしています RL78ファミリ用 Cコンパイラ CC-RL V1.03.00 統合開発環境 e 2 studio V5.2.0.020 統合開発環境 CS+ for CC V4.01.00 ページ 3

概要 ブート領域 フラッシュ領域の分割について ブート領域 フラッシュ領域の配置 ブート領域 フラッシュ領域の分割をするために ブート領域 フラッシュ領域のビルドイメージ

ブート領域 フラッシュ領域の分割について (1/4) システム上でのイメージ フラッシュ領域 ( アプリケーション 1) フラッシュ領域 ( アプリケーション 2) ブート領域 (HEX 固定 ) マイコンのフラッシュメモリセルフプログラミング機能を使用して アプリケーション部分を更新 ページ 5

ブート領域 フラッシュ領域の分割について (2/4) ブート領域とフラッシュ領域とは ブート領域 : システム上 書き換えが不可能な領域 フラッシュ領域 : システム上 書き換え / 取り換えが可能な領域 ブート領域とフラッシュ領域の分割の目的 ブート領域上のプログラムの再構築を行わず フラッシュ領域上のプログラムのみを変更する ページ 6

ブート領域 フラッシュ領域の分割について (3/4) ブート領域とフラッシュ領域間で実現すること フラッシュ領域からブート領域の変数 関数をアクセスできるようにする ブート領域プロジェクトで外部定義シンボル出力機能 -FSymbolを利用 フラッシュ領域プロジェクトでそのファイルをビルド対象にする ブート領域から フラッシュ領域の関数を関数テーブル経由で呼び出せるようにする ブート領域プロジェクトで フラッシュ領域の関数を呼び出す関数テーブルの関数の各分岐命令のアドレスを呼び出すようにする フラッシュ領域プロジェクトで ブート領域プロジェクトから呼び出される関数の分岐命令のテーブルを作成し 各関数への分岐命令を記述する ページ 7

ブート領域 フラッシュ領域の分割について (4/4) ブート領域 フラッシュ領域間の変数 関数の参照 外部定義シンボル出力機能 -FSymbol を利用 ( 変数参照 ) フラッシュ用 RAM ブート用 RAM 参照できない RAM 領域 外部定義シンボル出力機能 -FSymbol を利用 ( 関数コール ) フラッシュ領域 分岐テーブル領域 ブート領域 参照できない 実アドレスを管理する ( 関数コール ) ROM 領域 0000H ページ 8

ブート領域 フラッシュ領域の配置 ( 例 ) 次のようにブート領域とフラッシュ領域に配置 FEA00H FE900H フラッシュ用 RAM ブート用 RAM RAM 領域 2200H 2000H フラッシュ領域 分岐テーブル領域 ROM 領域 0000H ブート領域 ページ 9

ブート領域 フラッシュ領域の分割をするために ブート領域用のプロジェクトの作成 ソースファイルにブート領域のためのプログラムを作成 リンカのオプション設定 フラッシュ領域のプロジェクトをビルドする際に必要なため フラッシュ領域用プロジェクトよりも前にビルドが必要 フラッシュ領域用のプロジェクトの作成 ソースファイルにフラッシュ領域のためのプログラムを作成 リンカのオプション設定 ページ 10

ブート領域 フラッシュ領域のビルドイメージ ブート領域 フラッシュ領域 boot.c flash.c コンパイル コンパイル boot.asm 関数の分岐命令のテーブル解決.asm 変数 関数.fsy 関数テーブル.asm flash.asm アセンブル アセンブル boot.obj 関数の分岐命令のテーブル解決.obj -fsymbol= 外部変数 関数セクション 変数 関数.obj 関数テーブル.obj flash.obj リンク リンク boot.abs 変数 関数.fsy flash.abs ブート領域用ロードモジュール 外部変数 関数のシンボル情報 フラッシュ領域用ロードモジュール ページ 11

ブート領域 フラッシュ領域共通 プロジェクトの作成 e 2 studio CS+ ブート領域 フラッシュ領域共通プログラムの作成 分岐テーブルのアドレス定義ファイル ( アセンブラ ) ブート領域用とフラッシュ領域用のヘキサファイル 初期化フロー

プロジェクトの作成 (e 2 studio) プロジェクトの作成 フラッシュ領域のプロジェクト ブート領域のプロジェクト ビルド対象ファイルの追加 補足 1. フラッシュ領域のプロジェクトに ブート領域のプロジェクトのプロジェクトを参照するように設定することにより フラッシュ領域のプロジェクトビルド時に ブート領域のプロジェクトを参照します 2. *.fsy ファイルをアセンブルすることができないので 拡張子を *.asm に変更して登録してください ページ 13

プロジェクトの作成 (CS+) プロジェクトの作成 メインプロジェクト フラッシュ領域のプロジェクト サブプロジェクト ブート領域のプロジェクト 自動生成ファイルのビルド対象外への変更 ビルド対象ファイルの追加 補足 1. CS+ のビルド順は サブプロジェクト メインプロジェクト 2. ブート領域のプログラムは 1 度作成したら変更しないため フラッシュ領域の 2 世代目以降の作成時には サブプロジェクトを削除することが可能 ページ 14

ブート領域 フラッシュ領域共通プログラムの作成 分岐テーブルのアドレス定義ファイル ( アセンブラ ) ブート領域 フラッシュ領域のアセンブラソースアイルにインクルードします FLASH_TABLE : 分岐テーブルの先頭アドレス INTERRUPT_OFFSET : 分岐テーブルの割り込み領域分のサイズ 例 ftable.inc FLASH_TABLE.EQU 0x2000 INTERRUPT_OFFSET.EQU 0x100 ページ 15

ブート領域用とフラッシュ領域用のヘキサファイル 本資料で設定するファイル名 ( 出力方法は後述 ) 結合したヘキサファイル (boot_flash.mot) RAM 領域 フラッシュ領域 フラッシュ領域用ヘキサファイル (flash2000_ffff.mot) 2000H ブート領域用ヘキサファイル (boot0000_1fff.mot) 0000H ブート領域 補足 : ロードモジュールファイル (*.abs) は ブート領域 フラッシュ領域のそれぞれに生成されます ページ 16

初期化フロー (1/2) _start の最後でフラッシュのスタートアップに飛ぶ ブート領域 (ROM).data.sdata RAM 領域 フラッシュ用領域 3 1 0000H boot_main() _start: ベクタ領域 VECT02 VECT01 RESET 2 ブート用領域.dataR.sdataR _start の中で初期値のコピーを行う ページ 17

初期化フロー (2/2) フラッシュ領域 (ROM) RAM 領域.data.sbata フラッシュ用領域 5 func() main().datar.sdatar _start の中で初期値のコピーを行う _start ブート用領域 3 4 BR BR BR BR 分岐テーブル領域!func!! VECT02!! VECT01!! _start 関数用 割込み用 ページ 18

ブート領域 ブート領域用プログラムの作成 スタートアップルーチン (cstart.asm) の変更 hdwinit.asm と stkinit.asm の変更 オンチップデバッグ用領域の確保プログラムの作成 分岐テーブルの関数アドレス解決用のファイルの作成 ブート領域のオプションの設定 外部定義シンボルのファイルの出力 セクションの配置指定 フラッシュ領域の割り込み関数に分岐させるためのベクタの設定 オンチップデバッグを使用するための設定 ブート領域のアドレスのみのヘキサファイルを出力する設定

ブート領域用プログラムの作成 (1/9) スタートアップルーチン (cstart.asm) の変更 (1/6) 分岐テーブルのアドレス定義のインクルードの追加 例 $IFNDEF RENESAS_VERSION RENESAS_VERSION.EQU $ENDIF 0x01000000 $INCLUDE "ftable.inc" ページ 20

ブート領域用プログラムの作成 (2/9) スタートアップルーチン (cstart.asm) の変更 (2/6) スタック領域の明示的な確保 条件アセンブル命令をコメントアウトし.stack_bss セクションの定義を有効にする 例 ;$IF ( RENESAS_VERSION < 0x01010000) ; for CC-RL V1.00 ;------------------------------------------------------------------- ; stack area ;------------------------------------------------------------------- ;!!! [CAUTION]!!! ; Set up stack size suitable for a project..section.stack_bss, BSS _stackend:.ds 0x200 _stacktop: ;$ENDIF ページ 21

ブート領域用プログラムの作成 (3/9) スタートアップルーチン (cstart.asm) の変更 (3/6) セクション名の変更 外部定義シンボル出力機能 -Fsymbol の対象外にするために セクション名を変更する 例 ;----------------------------------------------------------------------------- ; startup ;-----------------------------------------------------------------------------.SECTION.btext, TEXT _start: ページ 22

ブート領域用プログラムの作成 (4/9) スタートアップルーチン (cstart.asm) の変更 (4/6) スタックポインタの設定 条件アセンブル命令等をコメントアウトし 明示的に確保した.stack_bssセクションをスタックポインタに設定する 例 ;$IF ( RENESAS_VERSION >= 0x01010000) ; MOVW SP,#LOWW( STACK_ADDR_START) ;$ELSE ; for CC-RL V1.00 MOVW SP,#LOWW(_stacktop) ;$ENDIF ページ 23

ブート領域用プログラムの作成 (5/9) スタートアップルーチン (cstart.asm) の変更 (5/6) ブート領域用のメイン関数の呼び出しへの変更と フラッシュ領域のスタートアップルーチンへの分岐命令の追加 例 ;-------------------------------------------------- ; call main function ;-------------------------------------------------- CALL!!_boot_main ; main(); BR!!FLASH_TABLE ページ 24

ブート領域用プログラムの作成 (6/9) スタートアップルーチン (cstart.asm) の変更 (6/6) ブート領域にミラー元領域が含まれない場合には.constセクションの定義をコメントアウトしてください 例 ; section ;----------------------------------------------------------------------------- $IF ( RENESAS_VERSION >= 0x01010000).SECTION.RLIB, TEXTF.L_section_RLIB:.SECTION.SLIB, TEXTF.L_section_SLIB: $ENDIF.SECTION.textf, TEXTF.L_section_textf: ;.SECTION.const, CONST ;.L_section_const: ページ 25

ブート領域用プログラムの作成 (7/9) hdwinit.asm と stkinit.asm の変更 セクション名の変更 外部定義シンボル出力機能 -Fsymbolの対象外にするために セクション名を変更する 例.btextf.CSEG TEXTF ページ 26

ブート領域用プログラムの作成 (8/9) オンチップデバッグ用領域の確保プログラムの作成 オンチップデバッグを使用する場合には 特定のメモリを開ける (0xffで埋める) 必要があります 0x0002~0x0003 番地 リンカの -VECTN オプションで 0xffff を設定 0x00ce~0x00d7 番地 アセンブラソースで定義 ( 下記プログラム参照 ) ROM の最後の 512 バイト 例 フラッシュ領域で確保 ocdrom_ce.asm MON_CE.CSEG AT 0x00ce.DB8 0xffffffffffffffff.DB2 0xffff ページ 27

ブート領域用プログラムの作成 (9/9) 分岐テーブルの関数アドレス解決用のファイルの作成 ( アセンブラ ) Cソース上から フラッシュ領域の関数コールをするための 分岐テーブルのアドレスを解決するためのシンボルを定義してください このファイルを プロジェクトに登録してください 例 extern_ftable.asm $INCLUDE "ftable.inc".public _f1 _f1.equ (FLASH_TABLE + INTERRUPT_OFFSET + (0 * 4)).public _f2 _f2.equ (FLASH_TABLE + INTERRUPT_OFFSET + (1 * 4)) ページ 28

ブート領域のオプションの設定 (1/9) フラッシュ領域のプロジェクトでブート領域の変数 関数をアクセスできるように外部定義シンボルのファイルの出力 対象とするセクションを -Fsymbol オプションにすべて登録してください 例 e 2 studio ページ 29

ブート領域のオプションの設定 (2/9) 例 CS+ ページ 30

ブート領域のオプションの設定 (3/9) セクションの配置指定 リンカの-startオプションで ブート領域のセクションの配置を指定してください フラッシュ領域の配置と重ならない様に考慮してください スタック領域のセクションの指定も追加してください 例 e 2 studio 例 CS+ ページ 31

ブート領域のオプションの設定 (4/9) フラッシュ領域の割り込み関数に分岐させるためのベクタの設定 リンカの -VECTN オプションで分岐テーブルの該当アドレスを指定してください 例 e 2 studio 8 番地に 0x2010 を設定する ページ 32

ブート領域のオプションの設定 (5/9) 例 CS+ 8 番地に 0x2010 を設定する ページ 33

ブート領域のオプションの設定 (6/9) オンチップデバッグを使用するための設定 リンカの-VECTNオプションで0x0002~0x0003 番地の領域を確保してください ( e 2 studio では 自動で設定されています ) リンカの-OCDBGオプションを有効にし オンチップデバッグオプションバイトの値を設定をしてください 例 e 2 studio ページ 34

ブート領域のオプションの設定 (7/9) 例 CS+ ページ 35

ブート領域のオプションの設定 (8/9) ブート領域のアドレスのみのヘキサファイルを出力する設定 出力するファイル名と 出力するアドレスを設定してください 例 e 2 studio ページ 36

ブート領域のオプションの設定 (9/9) 例 CS+ ページ 37

フラッシュ領域 フラッシュ領域用プログラムの作成 スタートアップルーチン (cstart.asm) の変更 分岐テーブルプログラムの作成 割り込み関数の定義 フラッシュ領域のオプションの設定 外部定義シンボルファイルのプロジェクト登録 セクションの配置指定 フラッシュ領域のアドレスのみのヘキサファイルを出力する設定 ブート領域とフラッシュ領域のヘキサファイルの結合

フラッシュ領域用プログラムの作成 (1/3) スタートアップルーチン (cstart.asm) の変更 スタックポインタの設定部分のコメントアウト ブート領域のスタートアップルーチンで設定したスタックポインタを使用するため フラッシュ領域では再設定しないでください 例 ;-------------------------------------------------- ; setting the stack pointer ;-------------------------------------------------- ;$IF ( RENESAS_VERSION >= 0x01010000) ; MOVW SP,#LOWW( STACK_ADDR_START) ;$ELSE ; for CC-RL V1.00 ; MOVW SP,#LOWW(_stacktop) ;$ENDIF ページ 39

フラッシュ領域用プログラムの作成 (2/3) 分岐テーブルプログラムの作成 ブート領域から呼び出されるアドレスに フラッシュ領域の関数のアドレスへ分岐するための 分岐命令を記載してください 例 ftable.asm $INCLUDE "ftable.inc".extern _start.extern _f1.extern _f2.jtext.cseg AT FLASH_TABLE br!!_start ; RESET.DB4 0xffffffff ;.DB4 0xffffffff ; INTWDTI.DB4 0xffffffff ; INTLVI br!!_int_intp0 ; INTP0.DB4 0xffffffff ; INTP1.DB4 0xffffffff ; INTP2 ~ 省略 ~.jtext2.cseg AT FLASH_TABLE+INTERRUPT_OFFSET br!!_f1 br!!_f2 割り込み用 関数用 ページ 40

フラッシュ領域用プログラムの作成 (3/3) 割り込み関数の定義 割り込みベクタはブート領域のプロジェクトで定義の必要があります フラッシュ領域では #pragma interrupt でベクタのアドレス (vect) は指定しないでください 例 #include "iodefine.h" #pragma interrupt int_intp0 volatile char f; void int_intp0(void) { f = 1; } ページ 41

フラッシュ領域のオプションの設定 (1/8) 外部定義シンボルファイルのプロジェクト登録 ブート領域の変数 関数をアクセスできるように ブート領域で作成した外部定義シンボルファイルをプロジェクトに登録してください 例 e 2 studio 例 CS+ 補足 e 2 studio *.fsy ファイルをアセンブルすることができないので 拡張子を *.asm に変更して登録してください ページ 42

フラッシュ領域のオプションの設定 (2/8) セクションの配置指定 リンカの-startオプションで フラッシュ領域のセクションの配置を指定してください ブート領域の配置と重ならない様に考慮してください 分岐テーブルの領域を空けるようにしてください 例 e 2 studio 例 CS+ ページ 43

フラッシュ領域のオプションの設定 (3/8) フラッシュ領域のアドレスのみのヘキサファイルを出力する設定 出力するファイル名と 出力するアドレスを設定してください 例 e 2 studio ページ 44

フラッシュ領域のオプションの設定 (4/8) 例 CS+ ページ 45

フラッシュ領域のオプションの設定 (5/8) ブート領域とフラッシュ領域のヘキサファイルの結合 ブート領域とフラッシュ領域のヘキサファイルを結合して1つにする場合には ビルド後の処理にリンカの実行を追加してください 例 e 2 studio ページ 46

フラッシュ領域のオプションの設定 (6/8) 例 CS+ ページ 47

フラッシュ領域のオプションの設定 (7/8) ブート領域とフラッシュ領域のヘキサファイルの結合 リンカに入力するサブコマンドファイルで 入力するヘキサファイルと ヘキサファイルの形式 出力するファイル名を指定してください 例 sub_mot.txt (e 2 studio) -input=.... boot HardwareDebug boot0000_1fff.mot -input=flash2000_ffff.mot -form=stype -output=boot_flash.mot ページ 48

フラッシュ領域のオプションの設定 (8/8) 例 sub_mot.txt (CS+) -input=.. boot DefaultBuild boot0000_1fff.mot -input=. DefaultBuild flash2000_ffff.mot -form=stype -output=. DefaultBuild boot_flash.mot ページ 49

デバッグツール

デバッグツールへのダウンロード (1/2) ロードモジュールファイル (*.abs) は ブート領域用 フラッシュ領域用の 2 つのファイルが生 成されるので デバッグツールでは 2 つのロードモジュールファイルをダウンロードしてくだ さい 例 フラッシュ領域のプロジェクトにブート領域のロードモジュールファイルを追加 (e 2 studio) 補足 e 2 studio boot.x は 接続時は No にしてください 接続後に ダウンロードしてください ページ 51

デバッグツールへのダウンロード (2/2) 例 フラッシュ領域のプロジェクトにブート領域のロードモジュールファイルを追加 (CS+) ページ 52

サンプルプログラム

サンプルプログラム 今まで作成してきたプログラムを使用するための ブート領域のプログラム フラッシュ領域のプログラムの例を 次ページ以降に記載します ページ 54

ブート領域のサンプルプログラム #include iodefine.h /* SFR の定義ファイル */ #pragma interrupt int_intp1 (vect=intp1) /* ブート領域の割り込み定義 */ int boot_a = 0x12; int boot_b = 0x34; extern int f1 ( int ) ; /* フラッシュ領域の関数のプロトタイプ宣言 */ extern int f2 ( int ) ; /* フラッシュ領域の関数のプロトタイプ宣言 */ void boot_main (void ) /* ブート領域のメイン関数 */ { /* ブート領域のメインの処理 */ } void boot_func(void) { boot_a = f1 ( boot_a ) ; /* フラッシュ領域の関数コール */ boot_b = f2 ( boot_b ) ; /* フラッシュ領域の関数コール */ } void int_intp1 (void) /* ブート領域の割り込み処理 */ { boot_a = 1; } ページ 55

フラッシュ領域のサンプルプログラム (1/2) #include "iodefine.h" /* SFR の定義ファイル */ int flash_a, b; extern int boot_a, boot_b; /* ブート領域で定義された変数 */ extern void boot_func(void); /* ブート領域で定義された関数 */ int f1 ( int a) { return (++a); } int f2 ( int b) { return (--b); } void main(void) /* フラッシュ領域のメイン関数 */ { boot_a++; /* ブート領域の変数のアクセス */ boot_b++; /* ブート領域の変数のアクセス */ boot_func(); /* ブート領域の関数のアクセス */ } ページ 56

フラッシュ領域のサンプルプログラム (2/2) #include "iodefine.h" /* SFR の定義ファイル */ #pragma interrupt int_intp0 /* フラッシュ領域の割り込み定義 */ volatile char f; void int_intp0(void) /* フラッシュ領域の割り込み処理 */ { f = 1; } ページ 57

改版履歴 版数 内容 適用箇所 Rev.1.00 初版 Rev.2.00 テンプレートの変更 全般 対象ツールのバージョン変更 P3, P29, P32, P47 -VECTNオプションの指定値修正 P32, P33 _int_intp0への分岐命令の修正 P40 ページ 58

ルネサスシステムデザイン株式会社