ホーム › フォーラム › Texas Instruments › マイコン › C2000 › Flash Bootについて
このトピックには13件の返信が含まれ、2人の参加者がいます。5 年、 9 ヶ月前に mickey.mouse さんが最後の更新を行いました。
-
投稿者投稿
-
Flash Bootについて
デバイス型番:TMS320F28075PTPTデバッガを外して、FLASH BOOTを試みましたが、全く動作しませんでした。
開発を始めた時点で、端子処理は確認済みです、
GPIO84 154pin、 GPIO72 139, TMS, TDI, TDO、はプールアップ、
TRSin プールダウンです。
何か、コマンドファイル、で設定する必要があるのか留意点をお知らせください。
ちなみに、シンボルのみダウンロードすればリセット、リスタート、resumeでプログラムは
動作します。
よろしくお願いします。resetからステップで実行したところ以下の部分で止まっていることが判りました。
コマンドファイルの変更の誤りで、配置されるべきデータが格納されていないのでしょうか、
よろしくお願いします。****************************************************************************
* IF cinit IS NOT -1, PROCESS CINIT INITIALIZATION TABLE *
****************************************************************************
MOV AL,#cinit
MOV AH,#hi16(cinit)
ADDB ACC,#1
B DO_BINIT,EQ ; if cinit < 0 (-1) no init tablesmickey.mouseさん
お問い合わせと症状のご確認、ありがとうございます。
プロジェクトのビルド時に使用いただいているリンカコマンドファイル(拡張子: cmd)の詳細をご教示いただけますでしょうか。
・リンカコマンドファイルのファイル名および参照ディレクトリ名
・CCSまたはC2000wareに収録されているリンカコマンドファイルをそのままお使いでしょうか。
・修正頂いている場合、修正内容をご教示いただけますでしょうか。また、ビルド時にワーニングメッセージが出力されておりませんでしょうか。
ご確認のほど、よろしくお願いいたします。
/* Initalized sections go in Flash */
.econst : >> FLASHF | FLASHG PAGE = 0
.switch : > FLASHD PAGE = 0
cmdファイルは、2年前ぐらいに収録されていたものを編集しています。
CLAのコードをゴーストセグメント化することや、CPU、CLAのデータセグメントの
分割、BSS、初期値ありデータを意識して編集していますが、
本来は、オリジナルを使用できれば使いたいとおもいています。
コマンドファイルは添付します。これを評価目的で設計したのが2年以上前ですので、このように配置しないと
上手くいかなかった考えたと思います。
添付は、メモリーマップ表です。現在のコマンドファイルとの相違は、下記セクションの記述がないことでしょうか、
念のためコマンドファイルも添付します。/* Initalized sections go in Flash */
.econst : >> FLASHF | FLASHG PAGE = 0
.switch : > FLASHD PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
Filter_RegsFile : > RAMGS0, PAGE = 1
SHARERAMGS0 : > RAMGS0, PAGE = 1
SHARERAMGS1 : > RAMGS1, PAGE = 1/* Flash Programming Buffer */
BufferDataSection : > RAMD1, PAGE = 1, ALIGN(4)Attachments:
原因は、下記コードの5~7行目(コメント行)当たりと思います。
このコードは、以前 BSSクラスがリセット後に初期値なしグローバル変数が0に初期化されない
問題があって入れたものです。
今回これを外して、スタンドアローンで動作できるようです。ここで確認ですが、
1)BSSの初期値なしデータはリセット後に0に初期化されるように改善されたのでしょうか、
2)これは、判ればの話ですが、私が追加したコードは、以前にお送りしたコマンドファイルの指定で、ロケーション的に
壊していたエリアが有るのでしょうか、よろしくお願いします。
void main( ){
int i;
Uint16 *ebss_Ptr;
Uint16 status;// ebss_Ptr = (Uint16 *)&RamEBssStart;
// i = (int)&RamEBssSize;
// memset(ebss_Ptr, 0, i ); /* WORDでクリアする方法はあるか */
/* memset((Uint32 *)0x9000, 0, 0x1000 ); *//* WORDでクリアする方法はあるか */
bss_init();BSSクラスの初期化ですが、デバッガを繋いでダウンロード、リセットをすると前値が残っている為に、
プログラムが誤動作してしまいます。やはり、初期値なしグローバル変数は0に初期化する必要性があります。よろしくお願いします。
お手数ですが、ご利用中のCCS、コンパイラ、C2000wareのバージョンをご教示いただけますでしょうか。
コンパイラのユーザーズガイド(SPRU514)によりますと、初期値なしグローバル・スタティック変数に対しては、0に初期化は行われません。グローバール・スタティック変数で初期化が必要な変数については、ユーザーで明示的に0初期化が必要になります。
(コンパイラバージョン18.8.0以降でしたら、EABIを使用いただくことで初期値なし変数もBoot時に0初期化されるようです)C2000コンパイラでは、グローバル・スタティック変数については、初期値のあり・なしにかかわらず、.ebssセクションに配置されるのですが、main関数の先頭で.ebssセクションの初期化を実施すると、初期値付き変数も0初期化されると思いますが、どのような対応をされているのでしょうか。
添付いただきましたファイルを確認させていただきましたが、
.ebssセクションに割り当てられているRAMGS4メモリのサイズが0x3800 = 14,336 WORDに対し、PDFのRAM GS4の使用量が21Kとなっています。ここでリンク時にエラーまたはワーニングは発生していないのでしょうか。ご確認のほど、よろしくお願いいたします。
回答有難うございます。
.eBssの初期かについてですが、二度でまになりますが、.eBssを0で埋めてからBoot内のBss_init()モジュールを呼び出して初期値を再転送しています。
多分、.eBssのグローバル変数にテーブール情報がブートより渡されているのと思います。
それで、main冒頭で0値の初期化処理を行うと単体(Flash Boot)で実効できないのだと推測していますが、どうなんでしょうか、EABIについて、オプションについて説明いただけませんか、Allow extern C functions to propagate exceptions (EABI only). 理解できません。
また、指摘のRAM GS4は、コマンドファイルの定義で、GS4(GS5,GS6)を合わせた物として12KWordよって24Kbyteして使用しています。
よろしくお願いします。
コンパイラ 18.1より18.12へ場ジョンアップ後 添付の様に
Output FormatをLegacy(COFF)よりeabi(ELF)に変更したところ
インラインアセンブルで使用しているラベル(変数)が未定義になってしまいます。
実体は、C言語により行っています。対策をご教示ください。
定義部
unsigned short task_chg_no;C言語ソース
task_run_no = task_chg_no;__asm(” MOVL XAR4, #_stack_pointer”);
__asm(” MOVL XAR5, #_task_chg_req”);コンパイルのエラーメッセージ
The following symbols are undefined:
_task_chg_no
_stack_pointer
_task_chg_reqErrors in Source – Assembler Aborted
gmake: *** [Task1(power)/Lib_PWM.obj] Error 1Attachments:
その後 インラインアセンブラにも外部参照である宣言を付け加えることで
この部分のエラーは解決できましたが、
__asm(” MOVL XAR4, #_stack_pointer”);今度は、リンク部分で以下のメッセージが表示されてしまいました。
atal error: object files have incompatible formats
(“C:/ti/ccsv8/tools/compiler/ti-cgt-c2000_18.12.1.LTS/lib/rts2800_fpu32.lib<
boot28.asm.obj>” = TI-COFF, “./F2807x_Adc.obj” = ELF)
gmake: *** [UPS.out] Error 1
gmake: Target ‘all’ not remade because of errors.ブートがリンクできない模様です。
メイン関数の先頭でebss領域の初期化を実施されておりますが、Watchdogタイマーが有効になっているのではないでしょうか。
InitSysCtrl();
を先に実行していただいたあとに初期化処理を実行していただけますでしょうか。
参照しているライブラリがCOFF(古いABI)となっているようです。
EABIのご利用につきましては、コンパイラ・アセンブラのユーザーズガイドを参照の上ご利用のほどお願いいたします。ご確認のほど、よろしくお願いいたします。
ご指摘の通り、初期の問題点は解決できました。
有難うございました。最後に確認ですが、
・リセットスタート時は、ウオッチドッグはスタートしているのでしょうか、
・ライブラリに関して、参照すべきページを具体的に教えて頂けませんか、よろしくお願いします。
・リセットスタート時は、ウオッチドッグはスタートしているのでしょうか、
はい、リセット後はウォッチドッグは有効になっております。
デバッガ(CCS)を接続している場合は、CCSの処理でウォッチドッグを停止しています。・ライブラリに関して、参照すべきページを具体的に教えて頂けませんか、
ライブラリに関しましては、コンパイラのユーザーズガイド(SPRU514)
Chapter 8. Using Run-Time-Support Functions and Building Libraries
に記載されておりますので、ご確認ください。
FPU32用のRTSライブラリは、
ファイル名:rts2800_fpu32_eabi.lib
となります。ご確認のほど、よろしくお願いいたします。
色々と調べていただき感謝します。
有難うございました。 -
投稿者投稿