HEW4のウィザードで作成したプロジェクトで生成されるセグメント anchor.png

C/C++ Compilerが生成するもの(C/C++)と,HEWウィザードが生成するもの(HEW)がある。

RO/RAMセグメント名説明
ROMPResetPRG(HEW) resetprg.c にて #pragma sectionで生成されるプログラムコード
PIntPRG(HEW) intprg.c にて #pragma sectionで生成されるプログラムコード
P(C/C++) : プログラムコード
C(C/C++) : 定数
C$DSEG(HEW) dbsct.c の #pragma $DSECにて生成される定数
C$BSEG(HEW) dbsct.c の #pragma $BSECにて生成される定数
D(C/C++) 初期化データ
RAMB(C/C++) 未初期化データ
R(C/C++) ROM 化支援で多重化された初期化データ
S(HEW) stacksct.h の #pragma stacksize にて生成されるスタック領域
  • HEWウィザードが生成するセグメントは,HEWのフレームワークに沿って生成,利用されるもの。
  • HEWは,割り込みハンドラのダミー関数作成,ベクタテーブルの生成と登録をintprg.cで行っている。これらを自分で行う場合は,intprg.cを削除し,xIntPRGセクションも削除する。(intprg.cにある__interrupt(vect=N)の記述は,ベクタテーブル生成とベクタテーブルへの登録をLOCATEによるROMアドレス直接指定を使って生成する)。
  • HEWは,リセット起動した後のセクションの初期化は,resetprg.cのPowerON_Reset()関数の中で_INITSCT()関数を呼び出して実行する。_INITSCT()関数にセクション情報を与えるデータベースがdbsct.c。C$DSEGとC$BSEGセクションは,dbsct.cで作成される定数セクション。セクションの初期化を自分で行う場合は,dbsct.c,C$DSEGとC$BSEGセクション,resetprg.cのPowerON_Reset()関数の_INITSCT()関数呼び出しは不要になる。
  • resetprg.cのPowerON_Reset()関数は,__entry(vect=0)によりROMの000000H番地にPowerON_Reset()関数のアドレスを配置するコードが生成される。これはセクションではなくLOCATE命令で直接的に行われるため,配置を変更することはできない。(モニタを使って仮想ベクタテーブルを用いる場合は,__entry(vect=n)の記述は使用しない。
Page Top

デフォルトで設定される主なセクション anchor.png

セクション名説明配置する場所
Pプログラムのコードフラッシュメモリ
C定数値。const int x = 10;と書いたときのxなど。フラッシュメモリ
D変数の初期値。int y = 30;と書いたときの30など。なお,yは別途RAMに置かれる。フラッシュメモリ
B初期値の設定がないグローバル変数の領域。int z;と書いたときのzなど。RAM
R初期値の設定があるグローバル変数のRAM領域。int y=30;と書いたときのyなど。なお,30はDセクションに記録。RAM
Sスタック領域。ローカル変数や,関数の呼び出し履歴などを記録するRAM上のエリア。RAM
Page Top

RESET時に呼ばれる関数 anchor.png

void PowerON_Reset_PC(void)
{
   int *p,*x;
   set_vbr((void *)((_UBYTE *)&INT_Vectors - INT_OFFSET));
   _INITSCT();  ROMからRAMにコピーするところ
   // 中略
   main();
   sleep();
}

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1335, today: 1, yesterday: 0
最終更新: 2020-12-26 (土) 16:07:34 (JST) (1210d) by yuji