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

割込みサービスルーチンの生成(ID自動割付け)

  • @param pk_cisr [in] 生成情報
  • @return 割込みサービスルーチンの生成結果
  • @retval サービスルーチンID番号
  • @retval -AG903_EINVAL 引数異常
  • @retval -AG903_EPERM 不正使用(割り込みからのCALLなど)
  • @retval -AG903_EFAULT 処理失敗(メモリ不足)
  • @retval -AG903_ENOID 空ID無し
  • @retval -AG903_ESYS システムエラー(想定外エラー)
  • @description 割込みサービスルーチンの生成(ID自動割付け)をします。
  • (uITRON4.0実装時、acre_isrを使用します。)
  • @note pk_cisr->intnoで指定する割り込み番号は0-63の範囲のIRQ番号です。 

    ポーティングの際にはこのIRQ番号をOSの対応する割り込み番号に変換してサービスコールを呼び出してください。

Syntax
C++
int32_t AG903_OSWprCreIsrAuto(AG903_OSWCIsr* pk_cisr);
1: int32_t AG903_OSWprCreIsrAuto(AG903_OSWCIsr* pk_cisr) 2: { 3: ID isrid; 4: int32_t retval; 5: T_CISR cisr; 6: 7: if(NULL == pk_cisr) { 8: return -AG903_EINVAL; 9: } 10: if( (AG903_OSW_IRQ_NUM_MAX <= pk_cisr->intno) || 11: (AG903_OSW_HLNG != pk_cisr->atr) || 12: (NULL == pk_cisr->func) ) { 13: return -AG903_EINVAL; 14: } 15: 16: cisr.isratr = (ATR)(TA_HLNG|TA_FPU); 17: cisr.exinf = (VP_INT)pk_cisr->exinf; 18: cisr.intno = (INTNO)(AG903_OSW_IRQ_TOPID + pk_cisr->intno); 19: cisr.isr = (FP)pk_cisr->func; 20: cisr.imask = (IMASK)(OswIntPriorityTbl[pk_cisr->intno]<<3); 21: isrid = acre_isr(&cisr); 22: OSW_SetLastErcd(isrid); 23: if(0 > isrid) { 24: retval = OSW_ChgErcd(isrid); 25: } 26: else if(0 == isrid) { 27: retval = -AG903_ESYS; 28: } 29: else { 30: retval = isrid; 31: } 32: 33: return retval; 34: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.