組み込みソフトウェアの開発プロセスを参照してください。ステップ1:プロジェクトの構築と構成。ステップ2:ソースファイルを編集。ステップ3:エンジニアリングのコンパイルとリンク。ステップ4:ソフトウェアのデバッグ。ステップ5:ファイルの硬化を実行。
プロセス全体では、ユーザーはまず、プロセッサーの構成やデバッグデバイスの構成など、プロジェクトを構築し、プロジェクトを初期的に構成する必要があります。自分で作成したアセンブリとC言語ソースプログラム、そしてプロジェクトコンパイル時に作成する必要があります。リンクスクリプトファイル、デバッグ中にストレージイメージファイルとコマンドスクリプトファイル、電源オンリセット時のプログラム実行ポータルの起動プログラムファイルを含むプロジェクトファイルを編集します。
後者の4つの文書の理解は重要であり、その役割は次のように解釈されます。
(1)リンクスクリプトファイル:プログラムコンパイル時に機能します。このファイルはコードリンクの位置付けに関する情報を記述し、コードセグメント、データセグメント、アドレスセグメントなどを含み、リンク器はこのファイルを使用してシステム全体のコードを正確に位置付けしなければなりません。SDRAMでプログラムをデバッグするか、FLASHでデバッグまたは硬化して実行します。リンクスクリプトファイルを区別します。(IDE開発環境での拡張子*.ldの使用)
(2)コマンドスクリプトファイル:SDRAMでプログラムをデバッグするときに役立ちます。統合環境とターゲット接続時、ソフトウェアデバッグ中、ターゲットボードのリセット後、統合環境はターゲットボードのリセット、ウォッチドッグのクリア、割り込みレジスタのシールド、メモリエリアマッピングなど、特定の操作を自動的に完了する必要がある場合があります。これらの操作は、一連のコマンドシーケンスを実行することによって実行でき、一連のコマンドシーケンスを保存するテキストファイルをコマンドスクリプトファイル(IDE開発環境で拡張子*.csを使用)と呼びます。
(3)メモリ領域イメージファイル:SDRAMでプログラムをデバッグするときに機能します。ソフトウェアデバッグ中に不正なストレージ領域にアクセスすると、一部のプロセッサとターゲットボードに異常が発生し、例外が処理されていない場合は、ソフトウェアデバッグプロセスを継続できなくなります。上記の問題を防止し、エミュレータのアクセス速度を適切なレベルに調整するために、各ストレージ領域の性質を記述するファイルをストレージ領域イメージファイルとして提供します(IDE開発環境で拡張子*.mapを使用)。
プログラムのデバッグ中にメモリ領域イメージファイル*.を選択して使用することができます。mapとコマンドスクリプトファイル*.cs協力プログラムのデバッグ。
(4)起動ファイル:主にハードウェア関連の初期化を完了し、アプリケーションの準備をします。一般的に、起動コードのステップは割り込みと異常ベクトルを設定することです。第2ステップは、システム起動に必要なレジスタ構成を完了することです。第3ステップ:番犬及びユーザーが設計した周辺回路の一部を設置します。ステップ4は、システムが使用するストレージ領域を構成してアドレス空間を割り当てることです。ステップ5は変数の初期化です。ステップ6は、プロセッサの動作モードごとにスタックポインタを設定することです。ステップは、言語エントリ関数(Main関数)に入ることです。
インタラプトプログラミング
割込みデバッグにおいては、同様のベクトル割込み動的処理方式を採用し、割込み対応の確定アドレスコードをRAMの固定アドレスに転送させ、関数ポインタがこの固定アドレスを指すことを定義すれば、いつでもRAM固定アドレスのコードを置換することにより、割込み処理関数を動的に変更することができます。
具体的な方法は、
(1)割込み元関数ポインタをRAM中の相対的な固定アドレスに定義し、下記のように割込みベクトルテーブルを作成します。
void SetInterrupt (U32 vector, void (*handler)()){ InterruptHandlers[vector] = handler;}
(2)プログラムにおいて、特定の割込み元の割込み処理関数を呼び出します。
例:SetInterrupt(IIC _ INT、IICWriteIsr)、
/*IIC割込み処理関数を宣言します。IIC _INTはIIC割り込みソース番号、IICWriteIsrはIICの書き込み割り込み処理関数*/。
(3)0 x 18におけるIRQまたは0 x 1 CにおけるFIQ割込みエントリ関数において、割込みソースを取得し、割込み保留フラグをクリアし、定義された割込みソース関数ポインタを介してユーザの特定の割込みハンドラに入ります。
void ISR_IrqHandler(void){ IntOffSet = (unsigned int)INTOFFSET; Clear_PendingBit(IntOffSet>>2) ;
(*InterruptHandlers[IntOffSet>>2])();// 特定の割り込みハンドラを呼び出す}
動的な割り込み処理方法を採用し、割り込みソースが多い場合、割り込み応答時間とプログラム性能が最適化されます。また、デバッグに関しては、この処理方法はデバッグの追跡を容易にする利点があり、必要に応じて割り込み処理関数を容易に変換することができます。
デバッグの中断
ソフトウェアデバッグはSDRAMまたはFLASHで行うことができます。SDRAMでは、読み書きが便利でアクセスが速いです。一般的なソフトウェアデバッグはRAMで完了する必要がありますが、RAM空間がFLASHプログラム空間より小さく、プログラムがFLASHで実行およびデバッグできる場合、またはユーザーがFLASHでプログラムが実際に実行されていることを知りたい場合は、FLASHでプログラムデバッグを行うことができます。
割り込みデバッグを行う際には、割り込みエントリはSDRAM中またはFLASH中の0 x 18または0 x 1 cアドレスにあることに注意してください。リンクスクリプトファイルは、システム全体のコードが0 x 0の開始点にあると判断する必要がありますが、SDRAMまたはFLASHに対応するリンクスクリプトファイルとエンジニアリング構成の注意点が異なります。
(1)SDRAMでプログラムを実行する。
SDRAMでデバッグし、SDRAM対応のリンクスクリプトファイルを使用します。デバッグプロセスには、プロジェクトのコンパイル→リンク→エミュレータ及び回路基板を接続する→プログラム(IDE開発環境で拡張子*.elfを使用)、デバッグという流れです。
プログラムの前にコマンドスクリプトファイルを起動して前述のいくつかの特定の操作を完了しなければなりません。コマンドスクリプトファイルの起動はエミュレータに接続するときに自動的に行われます。ここで、記憶領域マッピングはプログラムがSDRAMで実行されているときと同じであるべきで、システム全体のコードが0 x 0の開始点にあることを保証します。プログラムの開始アドレスも0 x 0で、成功すればデバッグ作業を行うことができます。
(2)プログラムがFLASHで実行される。
FLASHでデバッグし、FLASHに対応するリンクスクリプトファイルを使用します。デバッグプロセスには、プロジェクトのコンパイル→リンク→エミュレータと回路基板を接続する→プログラムフォーマット変換(*.elfを*.binに変換)→硬化*.binプログラムデバッグという流れです。
エミュレータに接続した後はプログラムは必要ありません。ストレージマッピングは、コマンドスクリプトファイルを必要とせずに、自分のプロジェクトで起動されたファイルによって実行されます。この環境デバッグでは、2つのハードウェアブレークポイントを設定できます。
(3)FLASHからSDRAMにプログラムを呼び出して実行する。
アプリケーションの場合によっては、プログラムの実行速度を強調する場合は、プログラムをSDRAMで実行することが望ましいため、FLASHに格納されているプログラムをシステムに電源を入れてからSDRAMのある空間位置に搬送し、自動的に実行する必要があります。このいわゆるBootloader技術は、DSPシステムでよく採用されています。
デバッグプロセスは2つのステップに分けられます。
(a)まずユーザプログラムをSDRAMでデバッグし、それから*.binファイルはFLASHの非0セクタアドレス空間に硬化する。
(b)自分で作成したBootloaderハンドラをデバッグし、Bootloader.binファイルはFLASHの0セクタアドレス空間に硬化し、運搬プログラムはシステムに電源を入れた後、(a)中のFLASHのある0セクタアドレス空間に格納されていないプログラムを、SDRAMデバッグ中の同じ空間位置に運搬し、プログラムがSDRAM中で実行する目的を実現します。
また、ユーザの実際のプログラム割り込みエントリはFLASHの0 x 18または0 x 1 cアドレスに位置しなければならないので、Bootloaderハンドラはまた、PCポインタをSDRAM空間にある割り込みプログラムエントリテーブルに向けます。すなわちユーザプログラム全体がSDRAMに搬送される位置に向ける割り込みエントリのジャンプ機能を持つべきです。
例:LDR PC、=HandleIRQ
//HandleIRQはSDRAM空間割込みプログラムエントリテーブルにあります。
(株)iPCBはPCB&PCBAの設計、製造販売及びこれらの付随業務の電子相関事業を手掛けています。弊社の詳細はリンク:https://www.ipcb.jp/ 或いはhttps://www.ipcb.com/jp をご覧ください。