AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
OSW

OSラッパーモジュール

本モジュールは下記ライブラリから呼び出されるOSのサービスコールを抽象化します。

これらのライブラリを使用する場合は本モジュールのポーティングが必要になります。 

 

ポーティング 

 

本モジュールは、以下の機能を提供します。

  1. メモリの動的確保と返却 メモリプールの生成時にキャッシュの有無の指定が可能です。
  2. 割込みの禁止/許可
  3. 割込みハンドラの登録/削除
  4. 割込みのマスク設定
  5. 割込み優先度の設定

 

<実装仕様> 

OSWで定義されている関数の仕様はμITRON 4.0仕様で解説されているサービスコールに基づいています。 

次の仕様はOSWの実装に利用するOSの仕様に準じます。これらの仕様に依存した実装は行わないで下さい。

  • 割り込みハンドラを呼び出すときのCPUモード、割り込みマスク、退避レジスタ等。
  • メモリプール管理系のサービスコールでのメモリブロックの管理方法。
    • 実際に要求したサイズ以上の領域を消費場合の有無。
    • メモリブロック管理情報の記憶場所。
  • 同一優先度の割り込みを呼び出す順序。

 

1つの割込みに対して複数のサービスルーチンを登録可能です。割込みサービスルーチン生成数の上限はOSに対するコンフィグレーションで決定されます。 

複数回 AG903_OSWprDisInt をコールした場合、割込みを許可する為には同数回の AG903_OSWprEnaInt コールが必要です。 

 

<動作概要>

  • AG903_OSWprDisInt では割込み禁止設定後に内部カウンタをインクリメントします。
  • AG903_OSWprEnaInt では割込み許可設定前に内部カウンタをデクリメントします。(0の場合を除く) この時、デクリメント前またはデクリメント後のカウンタが0であった場合に限り割込み許可設定を行います。

割込み優先度は AG903_OSWprIniIntAG903_OSW_DEFAULT_INTRPRI に設定されます。 

優先度を変更する場合はサービスルーチンを登録する前に AG903_OSWprSetIpri で設定します。設定した優先度が反映されるタイミングはサービスルーチン登録後割込みを許可したタイミングになります。 

OSから返された最後(最新)のエラーコードをstaticグローバル変数 OswLastErr に保持します。

* 本モジュールはライブラリをポーティングするためのものであり、ユーザーアプリケーションからは直接実行しないでください。

  • 本モジュールの管理対象となるメモリはAG903_OSWprInitMemory関数で指定された範囲になります。
  • AG903_OSWprInitMemory関数で指定するアドレスは1MB単位にアラインされたアドレスを指定して下さい。またサイズも1MBの倍数で指定して下さい。
  • 管理対象となるメモリ領域の後は管理領域として使用する為、アプリケーションが実際に使用可能なメモリサイズは指定サイズよりも小さくなります。※管理領域サイズ = 4KB ×((指定サイズ / 4MB)+ 1)
  • AG903_OSWprCreMpl / AG903_OSWprCreMplAuto関数でアドレスを指定する場合は、管理領域内でかつ4KBにアラインされたアドレスを指定して下さい。またサイズも4KBの倍数で指定して下さい。 アドレスを指定せずNULLとした場合は、キャッシュ指定は無効になります。この時の生成アドレス、アラインサイズおよびキャッシュの設定はOS依存になります。
  • AG903_OSWprCreMpf / AG903_OSWprCreMpfAuto関数でアドレスを指定する場合は、管理領域内でかつ4KBにアラインされたアドレスを指定して下さい。またサイズ(=ブロック数×ブロックサイズ)も4KBの倍数になるように指定して下さい。 アドレスを指定せずNULLとした場合は、キャッシュ指定は無効になります。この時の生成アドレス、アラインサイズおよびキャッシュの設定はOS依存になります。
  • AG903_OSWprGetMpl関数、AG903_OSWprGetMplAlign関数でメモリを確保する場合、指定サイズよりも多くのメモリを消費します。(アライン整列および内部情報管理の為)
  • 非タスクコンテキストからの使用については実装されるOSに依存します。
  • MMUによる仮想アドレス変換は考慮されていません。(仮想アドレス=物理アドレスとして下さい。)
  • AG903_OSWprInitMemory実行前にMMUの設定を行って下さい。
  • 本モジュールの管理対象となる割込みは『AX51903仕様書』に記載されているIRQ0~IRQ63です。
  • 本モジュールがラップするOSのシステムコールはメモリプール管理機能と割込み管理機能のみです。
  • オブジェクト番号は1以上の値とし、負の値はエラー、0は予約とします。また上限はOSWのポーティングによります。

割り込み制御 (INT) 

VRAM管理 (VRAM) 

USBホスト (USBH)

割り込み制御のシーケンスは INT を参照してください。 

VRAM管理のシーケンスは VRAM を参照してください。 

 

<OSがuC3の場合のMMU設定> 

uC3ではMMUの初期化関数「_ddr_cortexa_mmu_init」が用意されています。 

本モジュールのAG903_OSWprInitMemory関数を使用する前に_ddr_cortexa_mmu_init関数でMMUの初期化を行って下さい。この時必ず仮想アドレス=物理アドレスとして下さい。 

_ddr_cortexa_mmu_init関数の第二引数で与える変換テーブル「mmu_cfgtbl」の一例を次に記載します。 

mmu_cfgtbl: 

; DCD SIZE, PADDR, VADDR, AP, ATR 

DCD 0x14000000, 0x2C000000, 0x2C000000, AP_RW, ATR_STRG | ATR_NEXC ; Cortex-A5 peripherals 

DCD 0x04000000, 0x60000000, 0x60000000, AP_RW, ATR_NONC | ATR_NEXC ; EQS 

DCD 0x00200000, 0x80000000, 0x80000000, AP_RW, ATR_WBAW ; Program code 

DCD 0x00100000, SFB(TLB_RAMSEC), SFB(TLB_RAMSEC), AP_RW, ATR_WBAW | ATR_NEXC ; TTB (1MB) 

DCD 0x00200000, 0x80300000, 0x80300000, AP_RW, ATR_WBAW | ATR_NEXC ; Program data 

DCD 0x03A00000, 0x80500000, 0x80500000, AP_RW, ATR_NONC | ATR_NEXC ; VRAMManager Management Area 

DCD 0x00100000, 0x83F00000, 0x83F00000, AP_RW, ATR_NONC | ATR_NEXC ; firmware ram for GVD 

DCD 0x1E000000, 0xE0000000, 0xE0000000, AP_RW, ATR_STRG | ATR_NEXC ; AG903 peripherals 

DCD 0x00008000, 0xFE000000, 0xFE000000, AP_RW, ATR_NONC | ATR_NEXC ; workram 

DCD 0x00200000, 0xFFE00000, 0xFFE00000, AP_RO, ATR_SDEV | ATR_NEXC ; BootROM(high) 

DCD 0x00000000, 0x00000000, 0x00000000, 0, 0 

 

上記の例ではアドレス0x80500000からサイズ0x03A00000[Byte]分をVRAM領域としていますので、AG903_OSWprInitMemory に与える引数は次の通りになります。 

AG903_OSWprInitMemory(0x80500000, 0x03A00000); 

※ApplicationはVRAMManagerを使用するので AG903_VRAMMgrInit(0x80500000, 0x03A00000); になります。

名前 
説明 
 
μC3向けOSラッパー 
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.