8
jiC/OS The Real-Time Kernel Jean J. Labrosse R & D Publications Lawrence, Kansas 66046

jiC/OS - GBV

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: jiC/OS - GBV

jiC/OS

The Real-Time Kernel

Jean J. Labrosse

R & D Publications Lawrence, Kansas 66046

Page 2: jiC/OS - GBV

Table of Contents

Preface

List of Figures

Table of Code Listings

Introduction

Chapter 1

Real-Time Kernel Concepts Critical Section of Code . . 7

Resource 7

Shared Resource 7

Multitasking 7

Task 7

Context Switch or Task Switch 8

Kernel 8

Scheduler 8 Non-Preemptive Kernel 8

Preemptive Kernel . • . 10

Preemptive vs Non-Preemptive 10

Reentrancy 11

Round Robin Scheduling 12

Page 3: jiC/OS - GBV

TaskPriority 12 Static Priorities 12

Dynamic Priorities 12 Priority Inversions 14

Semaphores 14 Mutual Exclusion 15 Deadlock (or Deadly Embrace) 19 Synchronization 21 Event Flags . . 23 Intertask Communication 23 Message Mailboxes 26 Message Queues 27 Interrupts 29

Interrupt Latency, Response and Recovery . . 29

ISR Processing Time 30

Non-Maskable Interrupts (NMIs) . . . . 30

ClockTick 34

Performance 35

Chapter 2

Kernel Structure Critical Sections 39 Tasks 40 Task States 40 Task Control Blocks . . . . . . 42 Creating a Task 44 Deleting a Task 48

Page 4: jiC/OS - GBV

Task Scheduling 50

LOCK/UNLOCK 56

Changing a Task's Priority 57

Delaying a Task 58

Chapter 3

Interrupt Processing 61 Interrupt Latency, Response and Recovery 64

ClockTick 65

Chapter 4

Communication, Synchronization & Coordination 71 Event Control Blocks 71

SEMAPHORES 74 MAILBOXES 78

QUEUES 81

Chapter 5

Initialization & Configuration 87 Initialization 87

Configuration 88

Chapter 6

Reference Manual and Timing Reference 93 Introduction 93

vii

Page 5: jiC/OS - GBV

Memory Usage 95 Program Memory . . . . 95

Data Memory 95

Kernel Services 97 OSInit() 98

OSIntEnter() 99

OSIntExit() 100

OSMboxCreate() 101

OSMboxPend() . . . . . . . . .102

OSMboxPost() . . . 104

OSQCreate() 106

OSQPend() 108

OSQPost() 110

OSSchedLock() . . . . . . . . .112

OSSchedUnlock() . .114

OSSemCreate() . . . . . . . . ' ' . 1 1 6

OSSemPend() . . .118

OSSemPost() . . . . . . . . . .120

OSStart() 122

OSTaskChangePrio() 124

OSTaskCreate() 126

OSTaskDel() 128

OSTimeDly() . . . . .130

OSTimeGet() 132

OSTimeSet() 133

OSTimeTick() 134

MACROs 136 OS_ENTER_CRITICAL() 136

OS_EXIT_CRITICAL() .136

viii

Page 6: jiC/OS - GBV

#DEFINEs 137 OS_MAX_TASKS 137

OS_MAX_EVENTS . . . . . . . 1 3 7

OS_MAX_QS 137

OS_IDLE_TASK_STK_SIZE 137

uCOS 137

Execution Time Summary 138

Chapter 7

Examples 145 Example #1 145

Example#2 152

Appendix A

uC/OS Microprocessor Independent Source Code 163

Appendix B

80186/80188 Microprocessor Specific Source Code 185

Appendix C

Software Development Conventions 189 Directory Structure 189

C Programming Style 190 Overview .';•''. 190

Header 191

Revision History 192

ix

Page 7: jiC/OS - GBV

Include Files 192

Naming Identifiers 192

Acronyms, Abbreviations & Mnemonics . . .194

Comments 197

#DEFINES •. . 198

DataTypes 198

Local Variables 199

Function Prototypes 199

Function Declarations . . . . . . . . 199

Indentation 201

Statements & Expressions 203

Structures and Unions 204

Reserved Keywords 205

Appendix D

LISTC & HPLISTC 207

Appendix E

TO 223

Appendix F

Real-Time Kernel Manufacturers 233 Buying a Kernel 233

Writing Your Own Kernel 234

Real-time Kernel Survey 234

X

Page 8: jiC/OS - GBV

Appendix G Bibliography 251

Appendix H

Companion Disk 255 Licensing . . 255

Hardware/Software Requirements . . . . . . . . . 256 Installation . 256

Directory Structure . 257

Index 259

xi