没有合适的资源?快使用搜索试试~ 我知道了~
首页RTEMS实时操作系统指南:关键概念与API
RTEMS实时操作系统指南:关键概念与API
需积分: 9 3 下载量 36 浏览量
更新于2024-07-17
收藏 2.48MB PDF 举报
"RTEMS Classic API Guide, Release 5.9868f93 (10th April 2019), 是一个详细介绍了RTEMS实时操作系统经典API的指南,涵盖了从基础概念到高级特性的内容,旨在帮助开发者理解和使用RTEMS进行嵌入式实时应用开发。"
RTEMS(Real-Time Executive for Multiprocessor Systems)是一个专为嵌入式军事应用设计的高性能实时操作系统内核。它提供了多任务处理、同构和异构多处理器系统支持、事件驱动、优先级调度、可选的速率单调调度、任务间通信与同步、优先级继承、响应式中断管理、动态内存分配以及高度的用户可配置性。
本指南的概述部分介绍了RTEMS的基本概念,包括实时应用系统、实时执行体的定义,以及RTEMS的应用架构和内部结构。RTEMS的用户可以对其进行定制和扩展,以适应各种应用场景。此外,指南还讨论了系统的移植性、内存需求、目标读者群体以及文档的组织结构。
关键概念章节深入解析了RTEMS中的核心思想,如对象的概念,包括对象名、对象ID及其格式和描述。通信与同步是RTEMS中的重要组成部分,涉及锁协议,如优先级反转、立即天花板优先级协议(ICPP)、优先级继承协议、多处理器资源共享协议(MrsP)以及O(m)独立性保持协议(OMIP)。这些协议确保在并发环境下正确地管理和保护资源。
时间管理在实时系统中至关重要,RTEMS提供对时间的精确控制,包括定时器和超时功能。此外,内存管理是RTEMS的另一个关键特性,它支持动态内存分配,这对于内存受限的嵌入式环境尤为重要。
RTEMS数据类型章节则详细阐述了RTEMS中使用的各种数据类型,这些类型对于理解API和编写安全、高效的代码至关重要。这部分内容通常会包括基本类型定义、特定于平台的类型和用于内存管理和通信的特殊数据结构。
"RTEMS Classic API Guide" 是一个全面的资源,涵盖了从RTEMS的基础到高级特性的各个方面,是开发人员深入理解和使用RTEMS的宝贵参考资料。
24.27.1 CONFIGURE_RECORD_PER_PROCESSOR_ITEMS . . . . . . . . . . . . . 439
24.27.2 CONFIGURE_RECORD_EXTENSIONS_ENABLED . . . . . . . . . . . . . 439
24.28Obsolete Configuration Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
24.28.1 CONFIGURE_BDBUF_BUFFER_COUNT . . . . . . . . . . . . . . . . . . . 440
24.28.2 CONFIGURE_BDBUF_BUFFER_SIZE . . . . . . . . . . . . . . . . . . . . 440
24.28.3 CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS . . . . . . . . . . . . . 440
24.28.4 CONFIGURE_ENABLE_GO . . . . . . . . . . . . . . . . . . . . . . . . . . 440
24.28.5 CONFIGURE_HAS_OWN_CONFIGURATION_TABLE . . . . . . . . . . . . 440
24.28.6 CONFIGURE_HAS_OWN_BDBUF_TABLE . . . . . . . . . . . . . . . . . . 440
24.28.7 CONFIGURE_HAS_OWN_MOUNT_TABLE . . . . . . . . . . . . . . . . . 440
24.28.8 CONFIGURE_NUMBER_OF_TERMIOS_PORTS . . . . . . . . . . . . . . . 440
24.28.9 CONFIGURE_MAXIMUM_GO_CHANNELS . . . . . . . . . . . . . . . . . 440
24.28.10CONFIGURE_MAXIMUM_GOROUTINES . . . . . . . . . . . . . . . . . . 440
24.28.11CONFIGURE_MAXIMUM_POSIX_BARRIERS . . . . . . . . . . . . . . . . 441
24.28.12CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES . . . . . . . . 441
24.28.13CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS . . 441
24.28.14CONFIGURE_MAXIMUM_POSIX_MUTEXES . . . . . . . . . . . . . . . . 441
24.28.15CONFIGURE_MAXIMUM_POSIX_RWLOCKS . . . . . . . . . . . . . . . . 441
24.28.16CONFIGURE_MAXIMUM_POSIX_SPINLOCKS . . . . . . . . . . . . . . . 441
24.28.17CONFIGURE_TERMIOS_DISABLED . . . . . . . . . . . . . . . . . . . . . 441
24.28.18CONFIGURE_SMP_APPLICATION . . . . . . . . . . . . . . . . . . . . . . 441
24.28.19CONFIGURE_SMP_MAXIMUM_PROCESSORS . . . . . . . . . . . . . . . 441
25 Self-Contained Objects 443
25.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
25.2 RTEMS Thread API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
25.3 Mutual Exclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
25.3.1 Static mutex initialization . . . . . . . . . . . . . . . . . . . . . . . . . . 448
25.3.2 Run-time mutex initialization . . . . . . . . . . . . . . . . . . . . . . . . 449
25.3.3 Lock the mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
25.3.4 Unlock the mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
25.3.5 Set mutex name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
25.3.6 Get mutex name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
25.3.7 Mutex destruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
25.4 Condition Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
25.4.1 Static condition variable initialization . . . . . . . . . . . . . . . . . . . . 455
25.4.2 Run-time condition variable initialization . . . . . . . . . . . . . . . . . . 456
25.4.3 Wait for condition signal . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
25.4.4 Signals a condition change . . . . . . . . . . . . . . . . . . . . . . . . . . 458
25.4.5 Broadcasts a condition change . . . . . . . . . . . . . . . . . . . . . . . . 459
25.4.6 Set condition variable name . . . . . . . . . . . . . . . . . . . . . . . . . 460
25.4.7 Get condition variable name . . . . . . . . . . . . . . . . . . . . . . . . . 461
25.4.8 Condition variable destruction . . . . . . . . . . . . . . . . . . . . . . . . 461
25.5 Counting Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
25.5.1 Static counting semaphore initialization . . . . . . . . . . . . . . . . . . 463
25.5.2 Run-time counting semaphore initialization . . . . . . . . . . . . . . . . 464
25.5.3 Wait for a counting semaphore . . . . . . . . . . . . . . . . . . . . . . . 465
25.5.4 Post a counting semaphore . . . . . . . . . . . . . . . . . . . . . . . . . . 466
25.5.5 Set counting semaphore name . . . . . . . . . . . . . . . . . . . . . . . . 467
25.5.6 Get counting semaphore name . . . . . . . . . . . . . . . . . . . . . . . . 468
25.5.7 Counting semaphore destruction . . . . . . . . . . . . . . . . . . . . . . 468
xiv
25.6 Binary Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
25.6.1 Static binary semaphore initialization . . . . . . . . . . . . . . . . . . . . 470
25.6.2 Run-time binary semaphore initialization . . . . . . . . . . . . . . . . . . 471
25.6.3 Wait for a binary semaphore . . . . . . . . . . . . . . . . . . . . . . . . . 472
25.6.4 Wait for a binary semaphore with timeout in ticks . . . . . . . . . . . . . 473
25.6.5 Tries to wait for a binary semaphore . . . . . . . . . . . . . . . . . . . . 474
25.6.6 Post a binary semaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
25.6.7 Set binary semaphore name . . . . . . . . . . . . . . . . . . . . . . . . . 476
25.6.8 Get binary semaphore name . . . . . . . . . . . . . . . . . . . . . . . . . 477
25.6.9 Binary semaphore destruction . . . . . . . . . . . . . . . . . . . . . . . . 477
25.7 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
26 Multiprocessing Manager 481
26.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
26.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.1 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.2 Global Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.3 Global Object Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
26.2.4 Remote Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
26.2.5 Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
26.2.6 Multiprocessor Configuration Table . . . . . . . . . . . . . . . . . . . . . 485
26.3 Multiprocessor Communications Interface Layer . . . . . . . . . . . . . . . . . . 486
26.3.1 INITIALIZATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
26.3.2 GET_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
26.3.3 RETURN_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
26.3.4 RECEIVE_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
26.3.5 SEND_PACKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
26.3.6 Supporting Heterogeneous Environments . . . . . . . . . . . . . . . . . . 488
26.4 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
26.4.1 Announcing a Packet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
26.5 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
26.5.1 MULTIPROCESSING_ANNOUNCE - Announce the arrival of a packet . . 492
27 Symmetric Multiprocessing (SMP) 493
27.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
27.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
27.2.1 Application Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 495
27.2.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
27.2.3 Uniprocessor versus SMP Parallelism . . . . . . . . . . . . . . . . . . . . 495
27.2.4 Task Affinity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
27.2.5 Task Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
27.2.6 Clustered Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
27.2.7 OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
27.2.8 Atomic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
27.3 Application Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
27.3.1 Task variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
27.3.2 Highest Priority Thread Never Walks Alone . . . . . . . . . . . . . . . . . 499
27.3.3 Disabling of Thread Preemption . . . . . . . . . . . . . . . . . . . . . . . 499
27.3.4 Disabling of Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
27.3.5 Interrupt Service Routines Execute in Parallel With Threads . . . . . . . 501
27.3.6 Timers Do Not Stop Immediately . . . . . . . . . . . . . . . . . . . . . . 501
27.3.7 False Sharing of Cache Lines Due to Objects Table . . . . . . . . . . . . . 501
xv
27.4 Implementation Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
27.4.1 Low-Level Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . 502
27.4.2 Internal Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
27.4.3 Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
27.4.4 Scheduler Helping Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 504
27.4.5 Thread Dispatch Details . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
27.4.6 Per-Processor Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
27.4.7 Thread Pinning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
28 PCI Library 507
28.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
28.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
28.2.1 Software Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
28.2.2 PCI Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
28.2.2.1 RTEMS Configuration selection . . . . . . . . . . . . . . . . . . . 510
28.2.2.2 Auto Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 511
28.2.2.3 Read Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 511
28.2.2.4 Static Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 512
28.2.2.5 Peripheral Configuration . . . . . . . . . . . . . . . . . . . . . . 512
28.2.3 PCI Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
28.2.3.1 Configuration space . . . . . . . . . . . . . . . . . . . . . . . . . 512
28.2.3.2 I/O space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
28.2.3.3 Registers over Memory space . . . . . . . . . . . . . . . . . . . . 513
28.2.3.4 Access functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
28.2.3.5 PCI address translation . . . . . . . . . . . . . . . . . . . . . . . 514
28.2.4 PCI Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
28.2.5 PCI Shell command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
29 Stack Bounds Checker 517
29.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
29.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
29.2.1 Task Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
29.2.2 Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
29.3 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
29.3.1 Initializing the Stack Bounds Checker . . . . . . . . . . . . . . . . . . . . 520
29.3.2 Checking for Blown Task Stack . . . . . . . . . . . . . . . . . . . . . . . 520
29.3.3 Reporting Task Stack Usage . . . . . . . . . . . . . . . . . . . . . . . . . 520
29.3.4 When a Task Overflows the Stack . . . . . . . . . . . . . . . . . . . . . . 520
29.4 Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
29.4.1 STACK_CHECKER_IS_BLOWN - Has Current Task Blown Its Stack . . . . 522
29.4.2 STACK_CHECKER_REPORT_USAGE - Report Task Stack Usage . . . . . . 522
30 CPU Usage Statistics 523
30.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
30.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
30.3 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
30.3.1 Report CPU Usage Statistics . . . . . . . . . . . . . . . . . . . . . . . . . 526
30.3.2 Reset CPU Usage Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . 526
30.4 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
30.4.1 cpu_usage_report - Report CPU Usage Statistics . . . . . . . . . . . . . . 528
30.4.2 cpu_usage_reset - Reset CPU Usage Statistics . . . . . . . . . . . . . . . . 529
xvi
31 Object Services 531
31.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
31.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
31.2.1 APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
31.2.2 Object Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
31.2.3 Object Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
31.3 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
31.3.1 Decomposing and Recomposing an Object Id . . . . . . . . . . . . . . . . 534
31.3.2 Printing an Object Id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
31.4 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
31.4.1 BUILD_NAME - Build object name from characters . . . . . . . . . . . . 537
31.4.2 OBJECT_GET_CLASSIC_NAME - Lookup name from id . . . . . . . . . . 538
31.4.3 OBJECT_GET_NAME - Obtain object name as string . . . . . . . . . . . . 539
31.4.4 OBJECT_SET_NAME - Set object name . . . . . . . . . . . . . . . . . . . 540
31.4.5 OBJECT_ID_GET_API - Obtain API from Id . . . . . . . . . . . . . . . . . 541
31.4.6 OBJECT_ID_GET_CLASS - Obtain Class from Id . . . . . . . . . . . . . . 542
31.4.7 OBJECT_ID_GET_NODE - Obtain Node from Id . . . . . . . . . . . . . . 543
31.4.8 OBJECT_ID_GET_INDEX - Obtain Index from Id . . . . . . . . . . . . . . 544
31.4.9 BUILD_ID - Build Object Id From Components . . . . . . . . . . . . . . . 545
31.4.10 OBJECT_ID_API_MINIMUM - Obtain Minimum API Value . . . . . . . . 546
31.4.11 OBJECT_ID_API_MAXIMUM - Obtain Maximum API Value . . . . . . . . 547
31.4.12 OBJECT_API_MINIMUM_CLASS - Obtain Minimum Class Value . . . . . 548
31.4.13 OBJECT_API_MAXIMUM_CLASS - Obtain Maximum Class Value . . . . . 549
31.4.14 OBJECT_ID_API_MINIMUM_CLASS - Obtain Minimum Class Value for
an API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
31.4.15 OBJECT_ID_API_MAXIMUM_CLASS - Obtain Maximum Class Value for
an API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
31.4.16 OBJECT_GET_API_NAME - Obtain API Name . . . . . . . . . . . . . . . 552
31.4.17 OBJECT_GET_API_CLASS_NAME - Obtain Class Name . . . . . . . . . . 553
31.4.18 OBJECT_GET_CLASS_INFORMATION - Obtain Class Information . . . . 554
32 Chains 555
32.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
32.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
32.2.1 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
32.2.2 Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
32.3 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
32.3.1 Multi-threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
32.3.2 Creating a Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
32.3.3 Iterating a Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
32.4 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
32.4.1 Initialize Chain With Nodes . . . . . . . . . . . . . . . . . . . . . . . . . 561
32.4.2 Initialize Empty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
32.4.3 Is Null Node ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
32.4.4 Head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
32.4.5 Tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
32.4.6 Are Two Nodes Equal ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
32.4.7 Is the Chain Empty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
32.4.8 Is this the First Node on the Chain ? . . . . . . . . . . . . . . . . . . . . . 568
32.4.9 Is this the Last Node on the Chain ? . . . . . . . . . . . . . . . . . . . . . 569
32.4.10 Does this Chain have only One Node ? . . . . . . . . . . . . . . . . . . . 570
xvii
32.4.11 Returns the node count of the chain (unprotected) . . . . . . . . . . . . 571
32.4.12 Is this Node the Chain Head ? . . . . . . . . . . . . . . . . . . . . . . . . 572
32.4.13 Is this Node the Chain Tail ? . . . . . . . . . . . . . . . . . . . . . . . . . 573
32.4.14 Extract a Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
32.4.15 Extract a Node (unprotected) . . . . . . . . . . . . . . . . . . . . . . . . 575
32.4.16 Get the First Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
32.4.17 Get the First Node (unprotected) . . . . . . . . . . . . . . . . . . . . . . 577
32.4.18 Insert a Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
32.4.19 Insert a Node (unprotected) . . . . . . . . . . . . . . . . . . . . . . . . . 579
32.4.20 Append a Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
32.4.21 Append a Node (unprotected) . . . . . . . . . . . . . . . . . . . . . . . . 581
32.4.22 Prepend a Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
32.4.23 Prepend a Node (unprotected) . . . . . . . . . . . . . . . . . . . . . . . . 583
33 Red-Black Trees 585
33.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
33.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
33.2.1 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
33.2.2 Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
33.3 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
33.4 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
33.4.1 Documentation for the Red-Black Tree Directives . . . . . . . . . . . . . 589
34 Timespec Helpers 591
34.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
34.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
34.2.1 Time Storage Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . 593
34.3 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
34.3.1 Set and Obtain Timespec Value . . . . . . . . . . . . . . . . . . . . . . . 594
34.3.2 Timespec Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
34.3.3 Comparing struct timespec Instances . . . . . . . . . . . . . . . . . . . . 594
34.3.4 Conversions and Validity Check . . . . . . . . . . . . . . . . . . . . . . . 594
34.4 Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
34.4.1 TIMESPEC_SET - Set struct timespec Instance . . . . . . . . . . . . . . . 596
34.4.2 TIMESPEC_ZERO - Zero struct timespec Instance . . . . . . . . . . . . . 597
34.4.3 TIMESPEC_IS_VALID - Check validity of a struct timespec instance . . . 598
34.4.4 TIMESPEC_ADD_TO - Add Two struct timespec Instances . . . . . . . . . 599
34.4.5 TIMESPEC_SUBTRACT - Subtract Two struct timespec Instances . . . . . 600
34.4.6 TIMESPEC_DIVIDE - Divide Two struct timespec Instances . . . . . . . . 601
34.4.7 TIMESPEC_DIVIDE_BY_INTEGER - Divide a struct timespec Instance by
an Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
34.4.8 TIMESPEC_LESS_THAN - Less than operator . . . . . . . . . . . . . . . . 603
34.4.9 TIMESPEC_GREATER_THAN - Greater than operator . . . . . . . . . . . 604
34.4.10 TIMESPEC_EQUAL_TO - Check equality of timespecs . . . . . . . . . . . 605
34.4.11 TIMESPEC_GET_SECONDS - Get Seconds Portion of struct timespec In-
stance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
34.4.12 TIMESPEC_GET_NANOSECONDS - Get Nanoseconds Portion of the
struct timespec Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
34.4.13 TIMESPEC_TO_TICKS - Convert struct timespec Instance to Ticks . . . . 608
34.4.14 TIMESPEC_FROM_TICKS - Convert Ticks to struct timespec Representa-
tion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
xviii
剩余713页未读,继续阅读
2018-08-24 上传
2011-11-28 上传
2011-11-28 上传
2012-09-18 上传
160 浏览量
2022-09-24 上传
2021-05-16 上传
yxj3179
- 粉丝: 5
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功