Changes between Version 13 and Version 14 of spec/Os
- Timestamp:
- Nov 10, 2014, 2:52:28 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
spec/Os
v13 v14 26 26 * 基本セット + タイミング保護 + メモリ保護 27 27 * すべてのSCをマルチコアに拡張可能である 28 * 用語一覧 29 * C1ISR:カテゴリ1ISR 30 * C2ISR:カテゴリ2ISR 31 * OSAP:OSアプリケーション 32 28 33 * API一覧 29 34 * "--"はOSEKのため未規定 … … 241 246 StatusType ActivateTask(TaskType TaskID) 242 247 }}} 248 * TaskIDで指定したタスクを起動する 243 249 * 多重に起動要求を行った場合、要求した順序で起動される 244 250 * 拡張タスクが、多重起動要求できないのは、待ち状態に入ってしまうと次の起動要求を要求した順序で処理できないからと考えられる 251 * TOPPERS/ATK2では、必要性が低いことから、要求した順序を保持しない実装としている 252 * タスクの実行順序の優先順位は、本来タスク優先度で指定するものであり、同一優先度タスクが実行される順序が処理に依存するべきではない、という考え方である 245 253 * 到着時間監視において、!ActivateTaskを発行した側と、発行された側のどちらのタイミング保護違反となるかは規定されていない 246 254 * マルチコアでは、どちらのコアでプロテクションフックを起動するか等の問題がある … … 250 258 StatusType TerminateTask(void) 251 259 }}} 260 * 呼び出したタスクを終了する 261 * 多重起動要求されているタスクが、!TerminateTaskを実行した場合、再度実行可能状態となるが、!TerminateTaskを呼ばずに終了(returnを呼ぶ等)した場合に、再度実行可能状態となるかは規定されていない 262 * TOPPERS/ATK2では、以下のような実装としている 263 * タスクが不正終了(returnを呼ぶ)した場合:多重起動は有効 264 * タスクが強制終了(保護違反発生)した場合:多重起動は有効 265 * 所属するOSAPが強制終了した場合:多重起動はリセット 252 266 253 267 == !ChainTask == … … 255 269 StatusType ChainTask(TaskType TaskID) 256 270 }}} 271 * 呼び出したタスクの終了と、TaskIDで指定したタスクの起動を行う(!TerminateTask+!ActivateTask) 257 272 258 273 == Schedule == … … 260 275 StatusType Schedule(void) 261 276 }}} 277 * 呼び出した時点での、すべての実行可能状態のタスクの優先度に従って、再スケジューリングを行う 278 * つまり、呼び出し元タスクが、ノンプリエンプティブタスクでなければ、呼び出す意味がない 262 279 263 280 == GetTaskID == … … 265 282 StatusType GetTaskID(TaskRefType TaskID) 266 283 }}} 284 * 実行状態のタスクIDを取得する 285 * 複数タスクから呼び出される共用関数や、C2ISR、各フックルーチンから使用される 267 286 * 本APIは、エラーフックでのデバッグにおける使用が考えられるが、割込み禁止時のAPI呼出し違反[OS093]により起動したエラーフックでは、割込み禁止状態のため、GetTaskIDが使用できないという不整合がある 287 * TOPPERS/ATK2では、実害がないため、割込み禁止状態であっても、GetTaskIDを呼び出せるように実装している 268 288 269 289 == !GetTaskState == … … 271 291 StatusType GetTaskState(TaskType TaskID, TaskStateRefType State) 272 292 }}} 293 * TaskIDで指定したタスクの状態を取得する 273 294 * 本APIは、エラーフックでのデバッグにおける使用が考えられるが、割込み禁止時のAPI呼出し違反[OS093]により起動したエラーフックでは、割込み禁止状態のため、!GetTaskStateが使用できないという不整合がある 295 * TOPPERS/ATK2では、実害がないため、割込み禁止状態であっても、!GetTaskStateを呼び出せるように実装している 274 296 275 297 == !EnableAllInterrupts == … … 277 299 void EnableAllInterrupts(void) 278 300 }}} 301 * C1ISR、C2ISRに対する割込みを許可状態にする 302 * EI命令のような高速な処理を想定している 279 303 280 304 == !DisableAllInterrupts == … … 282 306 void DisableAllInterrupts(void) 283 307 }}} 308 * C1ISR、C2ISRに対する割込みを禁止状態にする 309 * ネスト発行は不可で、DI命令のような高速な処理を想定している 284 310 285 311 == !ResumeAllInterrupts == … … 287 313 void ResumeAllInterrupts(void) 288 314 }}} 315 * C1ISR、C2ISRに対する割込みを許可状態にする 316 * !SuspendAllInterruptsが呼ばれた回数だけ、発行しないと許可状態にならない 289 317 290 318 == !SuspendAllInterrupts == … … 292 320 void SuspendAllInterrupts(void) 293 321 }}} 322 * C1ISR、C2ISRに対する割込みを禁止状態にする 294 323 * ネストして発行できるが、ネスト上限回数に関する規定がない 324 * TOPPERS/ATK2では、ネスト回数の上限値を255としている 295 325 296 326 == ResumeOSInterrupts == … … 298 328 void ResumeOSInterrupts(void) 299 329 }}} 330 * C2ISRに対する割込みを許可状態にする 331 * !SuspendOSInterruptsが呼ばれた回数だけ、発行しないと許可状態にならない 300 332 301 333 == SuspendOSInterrupts == … … 303 335 void SuspendOSInterrupts(void) 304 336 }}} 337 * C2ISRに対する割込みを禁止状態にする 305 338 * ネストして発行できるが、ネスト上限回数に関する規定がない 339 * TOPPERS/ATK2では、ネスト回数の上限値を255としている 306 340 307 341 == !GetResource == … … 309 343 StatusType GetResource(ResourceType ResID) 310 344 }}} 345 * ResIDで指定したリソースを獲得する 311 346 312 347 == !ReleaseResource == … … 314 349 StatusType ReleaseResource(ResourceType ResID) 315 350 }}} 351 * ResIDで指定したリソースを開放する 316 352 * 上限優先度が初期優先度より低いリソースを開放しようとするとE_OS_ACCESSが返ると規定されているが、そもそもそのようなリソースを獲得できないので、E_OS_ACCESSが返ることはありえない 317 353 … … 320 356 StatusType SetEvent(TaskType TaskID, EventMaskType Mask) 321 357 }}} 358 * TaskIDで指定したタスクに対するイベントMaskをセットする 322 359 323 360 == !ClearEvent == … … 325 362 StatusType ClearEvent(EventMaskType Mask) 326 363 }}} 364 * 呼び出したタスクのすべてのイベントをクリアする 327 365 328 366 == !GetEvent == … … 330 368 StatusType GetEvent(TaskType TaskID, EventMaskRefType Event) 331 369 }}} 370 * TaskIDで指定したタスクにセットされたイベントを取得する 371 * マルチコア拡張仕様において、!SetEventはコアを跨げるように拡張されているが、!GetEventが拡張されていない 372 * 拡張できない理由が無いため、誤記と思われる 373 * TOPPERS/ATK2では、!GetEventもコアを跨いで呼び出すことができるように実装している 332 374 333 375 == !WaitEvent == … … 335 377 StatusType WaitEvent(EventMaskType Mask) 336 378 }}} 379 * Maskで指定したイベントがセットされるのを待つ 380 * 既にイベントがセットされていた場合は、タスクは実行状態を継続する 337 381 338 382 == !GetAlarmBase == … … 340 384 StatusType GetAlarmBase(AlarmType AlarmID, AlarmBaseRefType Info) 341 385 }}} 386 * AlarmIDで指定したアラームの情報を取得する 387 * 取得する情報はコンフィギュレーション時に静的に設定したパラメータのみである 342 388 343 389 == !GetAlarm == … … 345 391 StatusType GetAlarm(AlarmType AlarmID, TickRefType Tick) 346 392 }}} 393 * AlarmIDで指定したアラームが、満了するまでのティックを取得する 347 394 348 395 == !SetRelAlarm == … … 350 397 StatusType SetRelAlarm(AlarmType AlarmID, TickType increment, TickType cycle) 351 398 }}} 399 * AlarmIDで指定したアラームを、相対時間指定でセットする 352 400 * AUTOSAR仕様で、incrementで指定された値が0であった場合にE_OS_VALUEを返す標準エラーで返すと規定されている[OS304]が、OSEK仕様では、E_OS_VALUEは拡張エラーと規定されているという矛盾がある 401 * TOPPERS/ATK2では、どちらのE_OS_VALUEも、拡張エラーとしている 353 402 354 403 == !SetAbsAlarm == … … 356 405 StatusType SetAbsAlarm(AlarmType AlarmID, TickType start, TickType cycle) 357 406 }}} 407 * AlarmIDで指定したアラームを、絶対時間指定でセットする 358 408 359 409 == !CancelAlarm == … … 361 411 StatusType CancelAlarm(AlarmType AlarmID) 362 412 }}} 413 * AlarmIDで指定したセット済みのアラームを、キャンセルする 363 414 364 415 == !GetActiveApplicationMode == … … 366 417 AppModeType GetActiveApplicationMode(void) 367 418 }}} 419 * OS起動時、StartOSで引数に指定されたアプリケーションモードを取得する 368 420 369 421 == StartOS == … … 371 423 void StartOS(AppModeType Mode) 372 424 }}} 425 * OSを起動する 426 * [wiki:spec_ECUStateManager ECU State Manager]から呼び出される 373 427 374 428 == ShutdownOS == … … 376 430 void ShutdownOS(StatusType Error) 377 431 }}} 432 * OSをシャットダウンする 378 433 379 434 ---- … … 385 440 ApplicationType GetApplicationID(void) 386 441 }}} 442 * 実行状態のOSAP IDを取得する 387 443 388 444 == GetISRID == … … 390 446 ISRType GetISRID(void) 391 447 }}} 448 * 実行状態のISR IDを取得する 392 449 * OSEK仕様のGetTaskIDは、返り値がStatusTypeであるのに対し、対称的なAPIであるGetISRIDの戻り値はISRTypeとなっている 393 450 * 結果として、エラーの発生有無は分からず、返り値がStatusTypeでないのでエラーフックも起動しない[OS093] 451 * TOPPERS/ATK2では、返り値のデータ型に関わらず、異常発生時はエラーフックを起動するように実装している 394 452 395 453 == !CallTrustedFunction == … … 397 455 StatusType CallTrustedFunction(TrustedFunctionIndexType FunctionIndex, TrustedFunctionParameterRefType FunctionParams) 398 456 }}} 457 * !FunctionIndexで指定した信頼関数を実行する 399 458 400 459 == CheckISRMemoryAccess == … … 402 461 AccessType CheckISRMemoryAccess(ISRType ISRID, MemoryStartAddressType Address, MemorySizeType Size) 403 462 }}} 463 * ISRIDで指定したC2ISRの、AddressとSizeで指定したメモリ領域に対するアクセス可否を取得する 404 464 * 引数で指定したメモリ領域が複数のメモリ保護属性の領域を跨いでいた場合の振る舞いが規定されていない 465 * TOPPERS/ATK2では、アクセス不可能を返すように実装している 405 466 406 467 == !CheckTaskMemoryAccess == … … 408 469 AccessType CheckTaskMemoryAccess(TaskType TaskID, MemoryStartAddressType Address, MemorySizeType Size) 409 470 }}} 471 * TaskIDで指定したタスクの、AddressとSizeで指定したメモリ領域に対するアクセス可否を取得する 410 472 * 引数で指定したメモリ領域が複数のメモリ保護属性の領域を跨いでいた場合の振る舞いが規定されていない 473 * TOPPERS/ATK2では、アクセス不可能を返すように実装している 411 474 412 475 == !CheckObjectAccess == … … 414 477 ObjectAccessType CheckObjectAccess(ApplicationType ApplID, ObjectTypeType ObjectType, void ...) 415 478 }}} 479 * 可変長引数"..."で指定したオブジェクトの、ApplIDで指定されたOSAPに対するアクセス可否を取得する 416 480 417 481 == !CheckObjectOwnership == … … 419 483 ApplicationType CheckObjectOwnership(ObjectTypeType ObjectType, void ...) 420 484 }}} 485 * 可変長引数"..."で指定したオブジェクトが所属するOSAP IDを取得する 421 486 422 487 == !StartScheduleTableRel == … … 424 489 StatusType StartScheduleTableRel(ScheduleTableType ScheduleTableID, TickType Offset) 425 490 }}} 491 * ScheduleTableIDで指定したスケジュールテーブルを、相対時間指定でセットする 426 492 427 493 == !StartScheduleTableAbs == … … 429 495 StatusType StartScheduleTableAbs(ScheduleTableType ScheduleTableID, TickType Start) 430 496 }}} 497 * ScheduleTableIDで指定したスケジュールテーブルを、絶対時間指定でセットする 431 498 432 499 == !StopScheduleTable == … … 434 501 StatusType StopScheduleTable(ScheduleTableType ScheduleTableID) 435 502 }}} 503 * ScheduleTableIDで指定したセット済みのスケジュールテーブルを、停止する 436 504 437 505 == !NextScheduleTable == … … 439 507 StatusType NextScheduleTable(ScheduleTableType ScheduleTableID_From, ScheduleTableType ScheduleTableID_To) 440 508 }}} 509 * ScheduleTableID_Fromで指定したスケジュールテーブルの1周期が終了後、ScheduleTableID_Toで指定したスケジュールテーブルを開始する 441 510 * ScheduleTableID_Fromに指定されたスケジュールテーブルが周期動作だった場合に、ScheduleTableID_Toのスケジュールテーブルに切り替わった後も周期動作を続けるかどうかが規定されていない 511 * TOPPERS/ATK2では、ScheduleTableID_Fromに指定されたスケジュールテーブルが周期動作の場合も、切り替え時に停止するように実装している 512 * マルチコア拡張仕様において、!StartScheduleTableRelや!StartScheduleTableAbsはコアを跨げるように拡張されているが、!NextScheduleTableが拡張されていない 513 * 拡張できない理由が無いため、誤記と思われる 514 * TOPPERS/ATK2では、!NextScheduleTableもコアを跨いで呼び出すことができるように実装している 442 515 443 516 == !StartScheduleTableSynchron == … … 445 518 StatusType StartScheduleTableSynchron(ScheduleTableType ScheduleTableID) 446 519 }}} 520 * ScheduleTableIDで指定した明示同期スケジュールテーブルの同期を開始する 447 521 448 522 == !SyncScheduleTable == … … 450 524 StatusType SyncScheduleTable(ScheduleTableType ScheduleTableID, TickType Value) 451 525 }}} 526 * ScheduleTableIDで指定した明示同期スケジュールテーブルを、Valueで指定したティックで同期する 452 527 453 528 == !SetScheduletableAsync == … … 455 530 StatusType SetScheduletableAsync(ScheduleTableType ScheduleTableID) 456 531 }}} 532 * ScheduleTableIDで指定した明示同期スケジュールテーブルの同期を終了する 457 533 458 534 == !GetScheduleTableStatus == … … 460 536 StatusType GetScheduleTableStatus(ScheduleTableType ScheduleTableID, ScheduleTableStatusRefType ScheduleStatus) 461 537 }}} 538 * ScheduleTableIDで指定したスケジュールテーブルの状態を取得する 462 539 463 540 == !IncrementCounter == … … 465 542 StatusType IncrementCounter(CounterType CounterID) 466 543 }}} 544 * CounterIDで指定したソフトウェアカウンタをインクリメントする 467 545 * 同時に複数のアラーム・スケジュールテーブルが満了する場合、各満了処理が終了するごとに、再スケジューリングを行うかどうかが規定されていない 546 * TOPPERS/ATK2では、再スケジューリングを行う実装としている 468 547 469 548 == !GetCounterValue == … … 471 550 StatusType GetCounterValue(CounterType CounterID, TickRefType Value) 472 551 }}} 552 * CounterIDで指定したカウンタの現在ティックを取得する 473 553 474 554 == !GetElapsedValue == … … 476 556 StatusType GetElapsedValue(CounterType CounterID, TickRefType Value, TickRefType ElapsedValue) 477 557 }}} 558 * CounterIDで指定したカウンタが、Valueで指定したティックから、現在何ティック経過しているかを取得する 559 * 第2引数で、経過時間の基準とするティックを指定するが、同時に現在のティックによって上書きされるので注意が必要 478 560 479 561 == !TerminateApplication == … … 481 563 StatusType TerminateApplication(ApplicationType Application, RestartType RestartOption) 482 564 }}} 565 * Applicationで指定したOSAPを強制終了する 483 566 484 567 == !AllowAccess == … … 486 569 StatusType AllowAccess(void) 487 570 }}} 571 * 呼び出したタスクが所属するOSAPを利用可能状態にする 572 * C2ISRからも呼び出し可能と規定されているが、ユースケースは不明 573 * 再起動状態のOSAPに所属するリスタートタスクから呼び出される 488 574 489 575 == !GetApplicationState == … … 491 577 StatusType GetApplicationState(ApplicationType Application, ApplicationStateRefType Value) 492 578 }}} 579 * Applicationで指定したOSAPの状態を取得する 493 580 494 581 == !GetNumberOfActivatedCores == … … 496 583 uint32 GetNumberOfActivatedCores(void) 497 584 }}} 585 * AUTOSAR OSが起動しているコアの数を取得する 498 586 499 587 == GetCoreID == … … 501 589 CoreIdType GetCoreID(void) 502 590 }}} 591 * 呼び出した処理が実行されているコアIDを取得する 503 592 504 593 == !StartCore == … … 506 595 void StartCore(CoreIdType CoreID, StatusType* Status) 507 596 }}} 597 * CoreIDで指定したコアを、AUTOSAR OS管理のコアとして起動する 598 * OSは起動しない 508 599 509 600 == !StartNonAutosarCore == … … 511 602 void StartNonAutosarCore(CoreIdType CoreID, StatusType* Status) 512 603 }}} 604 * CoreIDで指定したコアを、AUTOSAR OS管理外のコアとして起動する 513 605 514 606 == !GetSpinlock == … … 516 608 StatusType GetSpinlock(SpinlockIdType SpinlockId) 517 609 }}} 610 * SpinlockIdで指定したスピンロックを獲得する 611 * 取得できない場合、獲得できるまでスピンする 518 612 519 613 == !ReleaseSpinlock == … … 521 615 StatusType ReleaseSpinlock(SpinlockIdType SpinlockId) 522 616 }}} 617 * SpinlockIdで指定したスピンロックを開放する 618 * スピンロックとリソースの獲得、解放はLIFOで実行しなければならないと規定されている[OS702]が、スピンロックとリソースは独立したオブジェクトであり、独立してLIFOであれば問題ないため、本要求の意味は不明である 523 619 524 620 == !TryToGetSpinlock == … … 526 622 StatusType TryToGetSpinlock(SpinlockIdType SpinlockId, TryToGetSpinlockType* Success) 527 623 }}} 624 * SpinlockIdで指定したスピンロックを獲得する 625 * 取得できない場合、エラー終了する 528 626 529 627 == !ShutdownAllCores == … … 531 629 void ShutdownAllCores(StatusType Error) 532 630 }}} 631 * OS実行中のすべてのコアでOSシャットダウンを行う 533 632 * !ShutdownAllCoresを呼び出していないコアのシャットダウンフックに、何のエラーコードが渡されるかは規定されていない 633 * TOPPERS/ATK2では、!ShutdownAllCoresを呼び出していないコアでは,シャットダウンフックにE_OS_SHUTDOWN_OTHER_COREが渡される実装としている 534 634 535 635 == !IocSend == … … 537 637 Std_ReturnType IocSend_<IocId>[_<SenderId>](<Data> IN) 538 638 }}} 639 * !IocIdに対して単一のデータを送信する(キューあり) 539 640 540 641 == !IocWrite == … … 542 643 Std_ReturnType IocWrite_<IocId>[_<SenderId>](<Data> IN) 543 644 }}} 645 * !IocIdに対して単一のデータを送信する(キューなし) 544 646 545 647 == !IocSendGroup == … … 547 649 Std_ReturnType IocSendGroup_<IocId>(<Data1> IN1, <Data2> IN2, ...) 548 650 }}} 651 * !IocIdに対して複数のデータを送信する(キューあり) 549 652 550 653 == !IocWriteGroup == … … 552 655 Std_ReturnType IocWriteGroup_<IocId>(<Data1> IN1, <Data2> IN2, ...) 553 656 }}} 657 * !IocIdに対して複数のデータを送信する(キューなし) 554 658 555 659 == !IocReceive == … … 557 661 Std_ReturnType IocReceive_<IocId>(<Data> OUT) 558 662 }}} 663 * !IocIdから単一のデータを受信する(キューあり) 559 664 560 665 == !IocRead == … … 562 667 Std_ReturnType IocRead_<IocId>(<Data> OUT) 563 668 }}} 669 * !IocIdから単一のデータを受信する(キューなし) 564 670 565 671 == !IocReceiveGroup == … … 567 673 Std_ReturnType IocReceiveGroup_<IocId>(<Data1> OUT1, <Data2> OUT2, ...) 568 674 }}} 675 * !IocIdから複数のデータを受信する(キューあり) 569 676 570 677 == !IocReadGroup == … … 572 679 Std_ReturnType IocReadGroup_<IocId>(<Data1> OUT1, <Data2> OUT2, ...) 573 680 }}} 681 * !IocIdから複数のデータを受信する(キューなし) 574 682 575 683 == !IocEmptyQueue == … … 577 685 Std_ReturnType IocEmptyQueue_<IocId>(void) 578 686 }}} 687 * !IocIdのキューを空にする 579 688 580 689 ---- … … 884 993 * 多重度:0..1 885 994 * !OsDriverコンテナの節がないため、削除漏れと思われる 995 * TOPPERS/ATK2では削除している 886 996 887 997 == !OsGptChannelRef == … … 892 1002 * 多重度:0..1 893 1003 * !OsDriverコンテナの節がないため、削除漏れと思われる 1004 * TOPPERS/ATK2では削除している 894 1005 895 1006 == !OsTimeConstant == … … 901 1012 * OSがこの値をどのように使用するか不明 902 1013 * !OsSecondsPerTickで同様の値を設定しているように思われる 1014 * TOPPERS/ATK2では削除している 903 1015 904 1016 == !OsTimeValue == … … 910 1022 * OSがこの値をどのように使用するか不明 911 1023 * !OsSecondsPerTickで同様の値を設定しているように思われる 1024 * TOPPERS/ATK2では削除している 912 1025 913 1026 == !OsEvent == … … 1017 1130 * 複数のコアの中で、どのコアがマスタコアかを指定するコンテナが存在しない 1018 1131 * ComなどのBSWはマスタコアでしか使用できないため、RTEジェネレータがマスタコア/スレーブコアの判別ができない問題がある 1132 * TOPPERS/ATK2では、{{{/AUTOSAR/EcucDefs/Os/OsOS/OsMasterCoreId}}}を新設している 1019 1133 1020 1134 == !OsScalabilityClass ==