📄 jsp_check.cpp
字号:
return old_error_count == error_count;}bool ConfigurationChecker::check_mailboxblock(Directory & parameter, filecontainer * container){ unsigned int id; unsigned int num; unsigned int work; unsigned int old_error_count = error_count; struct variable_information inib; Message object("Mailbox","メ〖ルボックス"); Load(num, "_kernel_tmax_mbxid"); if(num <= 1) return true; inib = container->get_variable_information("_kernel_mbxinib_table"); VerboseMessage("%s object : %d items\n","%sオブジェクト : %d 改\n").format((const char *)object, num); for(id = 1; id <= num; id++) { set_banner(parameter, object, MAILBOX, id); //attribute validation check LoadVal(work, inib.address, "mailbox_initialization_block::mbxatr"); if((work & ~0x3) != 0) notify(Message("Illegal attribute value [0x%x]","おかしな掳拉猛 [0x%x]").format(work & ~0x3)); //mailbox message priority check LoadVal(work, inib.address, "mailbox_initialization_block::maxmpri"); if( container->get_variable_information("mailbox_initialization_block::maxmpri").size == 2) work <<= 16; if((signed)work < 0) notify(Message("Priority must not be a negative number.","庭黎刨が砷猛").format(work & ~0x1)); inib.address += inib.size; } return old_error_count == error_count;}bool ConfigurationChecker::check_fixed_memorypoolblock(Directory & parameter, filecontainer * container){ unsigned int id; unsigned int num; unsigned int work; unsigned int old_error_count = error_count; struct variable_information inib; Message object("Fixed size memory pool","盖年墓メモリプ〖ル"); Load(num, "_kernel_tmax_mpfid"); if(num <= 1) return true; inib = container->get_variable_information("_kernel_mpfinib_table"); VerboseMessage("%s object : %d items","%sオブジェクト : %d 改").format((const char *)object, num); for(id = 1; id <= num; id++) { set_banner(parameter, object, FIXEDSIZEMEMORYPOOL, id); //attribute validation check LoadVal(work, inib.address, "fixed_memorypool_initialization_block::mpfatr"); if((work & ~0x1) != 0) notify(Message("Illegal attribute value [0x%x]","おかしな掳拉猛 [0x%x]").format(work & ~0x1)); inib.address += inib.size; } return old_error_count == error_count;}bool ConfigurationChecker::check_cyclic_handlerblock(Directory & parameter, filecontainer * container){ unsigned int id; unsigned int num; unsigned int work; unsigned int old_error_count = error_count; struct variable_information inib; Message object("Cyclic handler","件袋ハンドラ"); Load(num, "_kernel_tmax_cycid"); if(num <= 1) return true; inib = container->get_variable_information("_kernel_cycinib_table"); VerboseMessage("%s object : %d items","%sオブジェクト : %d 改").format((const char *)object, num); for(id = 1; id <= num; id++) { set_banner(parameter, object, CYCLICHANDLER, id); //attribute validation check LoadVal(work, inib.address, "cyclic_handler_initialization_block::cycatr"); if((work & ~0x7) != 0) notify(Message("Illegal attribute value [0x%x]","おかしな掳拉猛 [0x%x]").format(work & ~0x1)); if( (work & 0x1) != 0 || (work & 0x4) != 0) notify(Message("TA_ASM and TA_PHS are not supported in this kernel.","TA_ASMとTA_PHSはサポ〖ト嘲")); inib.address += inib.size; } return old_error_count == error_count;}bool ConfigurationChecker::check_interrupt_handlerblock(Directory & parameter, filecontainer * container){ unsigned int id; unsigned int num; unsigned int work; unsigned int old_error_count = error_count; struct variable_information inib; Message object("Interrupt handler","充哈みハンドラ"); Load(num, "_kernel_tnum_inhno"); if(num == 0) return true; inib = container->get_variable_information("_kernel_inhinib_table"); VerboseMessage("%s object : %d items\n","%sオブジェクト : %d 改\n").format((const char *)object, num); for(id = 0; id < num; id++) { set_banner(parameter, object, INTERRUPTHANDLER, id); //attribute validation check LoadVal(work, inib.address, "interrupt_handler_initialization_block::inhatr"); if(work != 0) notify(Message("The attribute can take only TA_HLNG","TA_HNLG笆嘲の掳拉は肋年できません")); inib.address += inib.size; } return old_error_count == error_count;}bool ConfigurationChecker::check_exception_handlerblock(Directory & parameter, filecontainer * container){ unsigned int id; unsigned int num; unsigned int work; unsigned int old_error_count = error_count; struct variable_information inib; Message object("Exception handler","毋嘲ハンドラ"); Load(num, "_kernel_tnum_excno"); if(num == 0) return true; inib = container->get_variable_information("_kernel_excinib_table"); VerboseMessage("%s object : %d items\n","%sオブジェクト : %d 改\n").format((const char *)object, num); for(id = 0; id < num; id++) { set_banner(parameter, object, EXCEPTIONHANDLER, id); //attribute validation check LoadVal(work, inib.address, "exception_handler_initialization_block::excatr"); if(work != 0) notify(Message("The attribute can take only TA_HLNG","TA_HNLG笆嘲の掳拉は肋年できません")); inib.address += inib.size; } return old_error_count == error_count;}//------------------------------------------------------#undef LoadVal#undef Loadvoid ConfigurationChecker::parseOption(Directory & parameter){ string loadmodule; string work; if(findOption(parameter,"h","help")) { cout << endl << Message( "Configuration checker - option\n" " -m, --module=filename : Specify the load module (essential option)\n" " -cs, --script=filename : Specify the checker script file\n", "コンフィギュレ〖ションチェッカ - オプション\n" " -m, --module=ファイル叹 : ロ〖ドモジュ〖ル叹を回年します (涩寇灌誊)\n" " -cs, --script=ファイル叹 : チェッカスクリプトを回年します\n"); return; } if(findOption(parameter,"m","module",&loadmodule) || findOption(parameter,DEFAULT_PARAMETER,NULL,&loadmodule)) { if(findOption(parameter,"s","source")) Exception("Configuration checker can not execute while Configurator executes","コンフィギュレ〖タとチェッカは票箕に弹瓢できません"); parameter["/file/loadmodule"] = loadmodule; activateComponent(false); } if(!findOption(parameter,"cs","script",&work)) work = loadmodule.substr(0,loadmodule.find_last_of('.')) + ".chk"; parameter["/file/checkerscript"] = work; if(findOption(parameter,"obj","load-object",&work)) { if(work.empty()) work.assign("kernel_obj.dat"); fstream f(work.c_str(), ios::in|ios::binary); if(f.is_open()) { parameter["/object"].Load(&f); f.close(); }else Exception(" Failed to open the file %s for storing object definitions"," オブジェクト攫鼠を呈羌するためのファイル(%s)が倡けません").format(work.c_str()); }}void ConfigurationChecker::body(Directory & parameter){ filecontainer * container; bool result = true; container = filecontainer::get_instance(); container->attach_module(parameter["/file/loadmodule"].toString().c_str()); container->attach_infofile(parameter["/file/checkerscript"].toString().c_str()); cout << Message(" Target architecture : "," タ〖ゲットア〖キテクチャ : ") << container->get_architecture() << endl; error_count = 0; result &= check_taskblock(parameter,container); result &= check_semaphoreblock(parameter,container); result &= check_eventflagblock(parameter,container); result &= check_dataqueueblock(parameter,container); result &= check_mailboxblock(parameter,container); result &= check_fixed_memorypoolblock(parameter,container); result &= check_cyclic_handlerblock(parameter,container); result &= check_interrupt_handlerblock(parameter,container); result &= check_exception_handlerblock(parameter,container); if(!result) Exception("Total %d errors found in current configuration.\n","链婶で%d改のエラ〖が浮叫されました\n").format(error_count); cout << Message("No error found in current configuration\n","菇喇に佰撅はありませんでした\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -