/* * FatFs用SDCARDIO制御関数 */ DRESULT disk_ioctl(BYTE Drive, BYTE Func, void* Buffer) { StorageDevice_t *psdev = SDMGetStorageDevice(Drive); DRESULT result; if(psdev == NULL) return RES_ERROR; if((psdev->_sdev_attribute & (SDEV_EMPLOY|SDEV_NOTUSE)) != SDEV_EMPLOY) return RES_ERROR; switch(Func){ case CTRL_SYNC: result = RES_OK; /* no action */ break; case GET_SECTOR_COUNT: *((DWORD *)Buffer) = psdev->_sdev_maxsec; syslog_2(LOG_NOTICE, "ioctl notuse (%d)(%d) ", (int)Func, psdev->_sdev_maxsec); result = RES_OK; break; case GET_BLOCK_SIZE: *((DWORD *)Buffer) = 135; /* ERASE_BLK */ syslog_1(LOG_NOTICE, "call disk_ioctl(GET_BLOCK_SIZE, %08x)", (int)(*((DWORD *)Buffer))); result = RES_OK; break; default: syslog_2(LOG_NOTICE, "call disk_ioctl(%d, %08x)", (int)psdev->_sdev_devno, (int)Buffer); slp_tsk(); result = RES_PARERR; break; } return result; }
void check_point(uint_t count) { bool_t errorflag = false; ER rercd; ID prcid; SIL_PRE_LOC; /* * 割込みロック状態に */ SIL_LOC_INT(); /* * PRCID取得 */ sil_get_pid(&prcid); /* * シーケンスチェック */ if (++check_count[prcid-1] == count) { syslog_2(LOG_NOTICE, "PE %d : Check point %d passed.", prcid, count); } else { syslog_2(LOG_ERROR, "## PE %d : Unexpected check point %d.", prcid, count); errorflag = true; } /* * カーネルの内部状態の検査 */ if (check_bit_func != NULL) { rercd = (*check_bit_func)(); if (rercd < 0) { syslog_2(LOG_ERROR, "## Internal inconsistency detected (%s, %d).", itron_strerror(rercd), SERCD(rercd)); errorflag = true; } } /* * エラーが検出された場合は,テストプログラムを終了する. */ if (errorflag) { test_finish(); } /* * 割込みロック状態を解除 */ SIL_UNL_INT(); }
/* * 実行時間分布計測の表示(受け口関数) */ ER eHistogram_print(CELLIDX idx) { CELLCB *p_cellcb = GET_CELLCB(idx); uint_t i; for (i = 0; i <= ATTR_maxTime; i++) { if (VAR_histarea[i] > 0) { syslog_2(LOG_NOTICE, "%d : %d", i, VAR_histarea[i]); } } if (VAR_over > 0) { syslog_2(LOG_NOTICE, "> %d : %d", ATTR_maxTime, VAR_over); } if (VAR_under > 0) { syslog_1(LOG_NOTICE, "> INT_MAX : %d", VAR_under); } return(E_OK); }
/* * 実行時間分布計測の表示 */ void print_hist(ID histid) { HISTCB *p_histcb; uint_t i; assert(TMIN_HISTID <= histid && histid <= TMAX_HISTID); p_histcb = &(histcb_table[histid - TMIN_HISTID]); for (i = 0; i <= p_histcb->maxval; i++) { if (p_histcb->histarea[i] > 0) { syslog_2(LOG_NOTICE, "%d : %d", i, p_histcb->histarea[i]); syslog_flush(); } } if (p_histcb->over > 0) { syslog_2(LOG_NOTICE, "> %d : %d", p_histcb->maxval, p_histcb->over); } if (p_histcb->under > 0) { syslog_1(LOG_NOTICE, "> INT_MAX : %d", p_histcb->under); } syslog_flush(); }
void tex_task3(TEXPTN texptn, intptr_t exinf) { ER ercd; /* * システムスタック領域に余裕があることを,拡張サービスコールを使っ * て確認する. * * ユーザタスクにおいて,システムスタック領域が減ることはないはず * だが,カーネルのバグにより増減する可能性はあるため,念のため確 * 認している.ただし,システムスタック領域が増えてしまうバグは, * これでは検出できない(不可解な動作をする). */ ercd = cal_svc(TFN_EXTSVC, 0, 0, 0, 0, 0); check_ercd(ercd, E_OK); #ifdef DEBUG_LOG if (tex_start_count % 50 == 0) { syslog_2(LOG_NOTICE, "%d: sp = %x", tex_start_count, &ercd); } #endif /* DEBUG_LOG */ tex_start_count += 1; if (tex_start_count < UTASK_TEX_COUNT) { switch (texptn) { case 0x0001: ercd = ras_tex(TASK3, 0x0001); check_ercd(ercd, E_OK); break; case 0x0002: ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = ena_tex(); check_ercd(ercd, E_OK); ercd = act_tsk(TASK4); check_ercd(ercd, E_OK); break; } } }
void tex_task1(TEXPTN texptn, intptr_t exinf) { ER ercd; /* * スタック領域に余裕があることを,拡張サービスコールを使って確認 * する. */ ercd = cal_svc(TFN_EXTSVC, 0, 0, 0, 0, 0); check_ercd(ercd, E_OK); #ifdef DEBUG_LOG if (tex_start_count % 50 == 0) { syslog_2(LOG_NOTICE, "%d: sp = %x", tex_start_count, &ercd); } #endif /* DEBUG_LOG */ tex_start_count += 1; if (tex_start_count < STASK_TEX_COUNT) { switch (texptn) { case 0x0001: ercd = ras_tex(TASK1, 0x0001); check_ercd(ercd, E_OK); break; case 0x0002: ercd = dis_dsp(); check_ercd(ercd, E_OK); ercd = ena_tex(); check_ercd(ercd, E_OK); ercd = act_tsk(TASK2); check_ercd(ercd, E_OK); break; } } }