• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
59
0
0

読み込み中.... (全文を見る)

全文

(1)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域、

フラッシュ領域の

分割方法

RL78ファミリ用Cコンパイラ CC-RL

2016年10月5日 Rev.2.00 ソフトウエア事業部 ソフトウエア技術部 ルネサス システムデザイン株式会社

R20UT3475JJ0200

(2)

アジェンダ

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

(3)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

はじめに

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

(4)

概要

ブート領域、フラッシュ領域の分割について

ブート領域、フラッシュ領域の配置

ブート領域、フラッシュ領域の分割をするために

(5)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域、フラッシュ領域の分割について(1/4)

ページ 5  システム上でのイメージ

ブート領域

(HEX固定)

フラッシュ領域

(アプリケーション1)

フラッシュ領域

(アプリケーション2) マイコンのフラッシュメモリセルフプログラミング機能を 使用して、アプリケーション部分を更新

(6)

ブート領域、フラッシュ領域の分割について(2/4)

 ブート領域とフラッシュ領域とは  ブート領域:システム上、書き換えが不可能な領域  フラッシュ領域:システム上、書き換え/取り換えが可能な領域  ブート領域とフラッシュ領域の分割の目的  ブート領域上のプログラムの再構築を行わず、フラッシュ領域上のプログラムのみを変更する

(7)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域、フラッシュ領域の分割について(3/4)

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

(8)

ブート領域、フラッシュ領域の分割について(4/4)

 ブート領域、フラッシュ領域間の変数、関数の参照

ブート領域

フラッシュ領域

RAM領域

ブート用RAM

フラッシュ用RAM

分岐テーブル領域

ROM領域

参照できない。 実アドレスを 管理する (関数コール) 外部定義シンボ ル出力機能 -FSymbolを 利用 (変数参照) 参照できない 外部定義シンボ ル出力機能 -FSymbolを 利用 (関数コール)

0000H

(9)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域、フラッシュ領域の配置

ページ 9  (例)次のようにブート領域とフラッシュ領域に配置 ページ 9

ブート領域

フラッシュ領域

RAM領域

ブート用RAM

フラッシュ用RAM

分岐テーブル領域

ROM領域

0000H

2000H

2200H

FE900H

FEA00H

(10)

ブート領域、フラッシュ領域の分割をするために

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

(11)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域、フラッシュ領域のビルドイメージ

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

(12)

ブート領域、フラッシュ領域共通

プロジェクトの作成

e

2

studio

CS+

ブート領域、フラッシュ領域共通プログラムの作成

分岐テーブルのアドレス定義ファイル(アセンブラ)

ブート領域用とフラッシュ領域用のヘキサファイル

初期化フロー

(13)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

プロジェクトの作成(e

2

studio)

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

(14)

プロジェクトの作成(CS+)

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

(15)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域、フラッシュ領域共通プログラムの作成

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

(16)

ブート領域用とフラッシュ領域用のヘキサファイル

 本資料で設定するファイル名(出力方法は後述) 0000H 2000H

ブート領域用ヘキサファイル

(boot0000_1fff.mot)

フラッシュ領域用

ヘキサファイル

(flash2000_ffff.mot)

結合したヘキサファイル

(boot_flash.mot)

補足: ロードモジュールファイル(*.abs)は、 ブート領域、フラッシュ領域のそれぞれに生成されます。

ブート領域

フラッシュ領域

RAM領域

(17)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

初期化フロー(1/2)

ページ 17

0000H

ブート領域(ROM)

_start:

ベクタ領域

… VECT02 VECT01 RESET

boot_main()

2

1

.data

.sdata

.dataR

.sdataR

RAM領域

フラッシュ用領域

ブート用領域

_startの中で初期値のコピーを行う

_startの最後で フラッシュの スタートアップに飛ぶ

3

(18)

初期化フロー(2/2)

_start

main()

分岐テーブル領域

BR !func … BR !! VECT02 BR !! VECT01 BR !! _start

_startの中で

初期値のコピーを行う

.data

.sbata

3

4

5

割込み用 関数用

func()

RAM領域

.dataR

.sdataR

フラッシュ用領域

ブート用領域

フラッシュ領域(ROM)

(19)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域

ブート領域用プログラムの作成

• スタートアップルーチン(cstart.asm)の変更 • hdwinit.asm と stkinit.asm の変更 • オンチップデバッグ用領域の確保プログラムの作成 • 分岐テーブルの関数アドレス解決用のファイルの作成

ブート領域のオプションの設定

• 外部定義シンボルのファイルの出力 • セクションの配置指定 • フラッシュ領域の割り込み関数に分岐させるためのベクタの設定 • オンチップデバッグを使用するための設定 • ブート領域のアドレスのみのヘキサファイルを出力する設定

(20)

ブート領域用プログラムの作成(1/9)

 スタートアップルーチン(cstart.asm)の変更(1/6)  分岐テーブルのアドレス定義のインクルードの追加  例 $IFNDEF __RENESAS_VERSION__ __RENESAS_VERSION__ .EQU 0x01000000 $ENDIF $INCLUDE "ftable.inc"

(21)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域用プログラムの作成(2/9)

ページ 21  スタートアップルーチン(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:

(22)

ブート領域用プログラムの作成(3/9)

 スタートアップルーチン(cstart.asm)の変更(3/6)  セクション名の変更 − 外部定義シンボル出力機能-Fsymbolの対象外にするために、セクション名を変更する。  例 ;---; startup ;---.SECTION .btext, TEXT

(23)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域用プログラムの作成(4/9)

ページ 23  スタートアップルーチン(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

(24)

ブート領域用プログラムの作成(5/9)

 スタートアップルーチン(cstart.asm)の変更(5/6)  ブート領域用のメイン関数の呼び出しへの変更と、フラッシュ領域のスタートアップルーチン への分岐命令の追加  例 ;---; call main function

;---CALL !!_boot_main ; main();

(25)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域用プログラムの作成(6/9)

ページ 25  スタートアップルーチン(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:

(26)

ブート領域用プログラムの作成(7/9)

 hdwinit.asm と stkinit.asm の変更

 セクション名の変更

外部定義シンボル出力機能-Fsymbolの対象外にするために、セクション名を変更する。

 例

(27)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域用プログラムの作成(8/9)

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

MON_CE .CSEG AT 0x00ce .DB8 0xffffffffffffffff

(28)

ブート領域用プログラムの作成(9/9)

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

_f1 .equ (FLASH_TABLE + INTERRUPT_OFFSET + (0 * 4)) .public _f2

(29)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域のオプションの設定(1/9)

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

(30)

ブート領域のオプションの設定(2/9)

(31)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域のオプションの設定(3/9)

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

(32)

ブート領域のオプションの設定(4/9)

 フラッシュ領域の割り込み関数に分岐させるためのベクタの設定

 リンカの-VECTNオプションで分岐テーブルの該当アドレスを指定してください。

(33)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域のオプションの設定(5/9)

ページ 33

(34)

ブート領域のオプションの設定(6/9)

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

(35)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域のオプションの設定(7/9)

ページ 35

(36)

ブート領域のオプションの設定(8/9)

 ブート領域のアドレスのみのヘキサファイルを出力する設定

 出力するファイル名と、出力するアドレスを設定してください。

(37)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域のオプションの設定(9/9)

ページ 37

(38)

フラッシュ領域

フラッシュ領域用プログラムの作成

• スタートアップルーチン(cstart.asm)の変更 • 分岐テーブルプログラムの作成 • 割り込み関数の定義

フラッシュ領域のオプションの設定

• 外部定義シンボルファイルのプロジェクト登録 • セクションの配置指定 • フラッシュ領域のアドレスのみのヘキサファイルを出力する設定 • ブート領域とフラッシュ領域のヘキサファイルの結合

(39)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域用プログラムの作成(1/3)

ページ 39  スタートアップルーチン(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

(40)

フラッシュ領域用プログラムの作成(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

割り込み用

(41)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域用プログラムの作成(3/3)

ページ 41  割り込み関数の定義  割り込みベクタはブート領域のプロジェクトで定義の必要があります。  フラッシュ領域では、#pragma interruptでベクタのアドレス(vect)は指定しないでください。  例 #include "iodefine.h"

#pragma interrupt int_INTP0

volatile char f;

void int_INTP0(void) {

f = 1; }

(42)

フラッシュ領域のオプションの設定(1/8)

 外部定義シンボルファイルのプロジェクト登録  ブート領域の変数、関数をアクセスできるように、ブート領域で作成した外部定義シンボル ファイルをプロジェクトに登録してください。  例 e2 studio 例 CS+ ※補足 e2 studio *.fsy ファイルをアセンブルすることが できないので、拡張子を*.asmに変更して 登録してください。

(43)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域のオプションの設定(2/8)

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

(44)

フラッシュ領域のオプションの設定(3/8)

 フラッシュ領域のアドレスのみのヘキサファイルを出力する設定

 出力するファイル名と、出力するアドレスを設定してください。

(45)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域のオプションの設定(4/8)

ページ 45

(46)

フラッシュ領域のオプションの設定(5/8)

 ブート領域とフラッシュ領域のヘキサファイルの結合

 ブート領域とフラッシュ領域のヘキサファイルを結合して1つにする場合には、ビルド後の処

理にリンカの実行を追加してください。

(47)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域のオプションの設定(6/8)

ページ 47

(48)

フラッシュ領域のオプションの設定(7/8)

 ブート領域とフラッシュ領域のヘキサファイルの結合

 リンカに入力するサブコマンドファイルで、入力するヘキサファイルと、ヘキサファイルの形

式、出力するファイル名を指定してください。

 例 sub_mot.txt (e2 studio

-input=..¥..¥boot¥HardwareDebug¥boot0000_1fff.mot -input=flash2000_ffff.mot

-form=stype

(49)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域のオプションの設定(8/8)

ページ 49  例 sub_mot.txt (CS+) -input=..¥boot¥DefaultBuild¥boot0000_1fff.mot -input=.¥DefaultBuild¥flash2000_ffff.mot -form=stype -output=.¥DefaultBuild¥boot_flash.mot

(50)
(51)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

デバッグツールへのダウンロード(1/2)

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

(52)

デバッグツールへのダウンロード(2/2)

 例 フラッシュ領域のプロジェクトにブート領域のロードモジュールファイルを追加

(53)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

(54)

サンプルプログラム

 今まで作成してきたプログラムを使用するための、ブート領域のプログラム、フラッシュ領域の

(55)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

ブート領域のサンプルプログラム

ページ 55

#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; }

(56)

フラッシュ領域のサンプルプログラム(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(); /* ブート領域の関数のアクセス*/ }

(57)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

フラッシュ領域のサンプルプログラム(2/2)

ページ 57

#include "iodefine.h" /* SFRの定義ファイル */

#pragma interrupt int_INTP0 /* フラッシュ領域の割り込み定義 */ volatile char f;

void int_INTP0(void) /* フラッシュ領域の割り込み処理 */ {

f = 1; }

(58)

改版履歴

版数

内容

適用箇所

Rev.1.00

初版

Rev.2.00

テンプレートの変更

全般

対象ツールのバージョン変更

P3, P29, P32, P47

-VECTN

オプションの指定値修正

P32, P33

_int_INTP0

への分岐命令の修正

P40

(59)

© 2016 Renesas System Design Co., Ltd. All rights reserved.

参照

関連したドキュメント

劣モジュラ解析 (Submodular Analysis) 劣モジュラ関数は,凸関数か? 凹関数か?... LP ニュートン法 ( の変種

当第1四半期において、フードソリューション、ヘルスサポート、スペシャリティーズの各領域にて、顧客

節点領域辺連結度 (node-to-area edge-connectivity), 領域間辺連結度 (area-to-area edge-connectivity) の問題. ・優モジュラ関数

本装置は OS のブート方法として、Secure Boot をサポートしています。 Secure Boot とは、UEFI Boot

ある周波数帯域を時間軸方向で複数に分割し,各時分割された周波数帯域をタイムスロット

板岡優里  芸術学部アート・デザイン表現学科ヒーリング表現領域

各テーマ領域ではすべての変数につきできるだけ連続変量に表現してある。そのため

非政治的領域で大いに活躍の場を見つける,など,回帰係数を弱める要因