VDK Module Outline
•
•
•
•
•
•
What is the VDK?
Why Do We Need a Kernel?
VDK Concepts and Features
How to Create a Project with VDK support
Debug Capabilities
Summary/Conclusion
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
What is the VDK?
• The Visual DSP Kernel is a pre-emptive
kernel designed to run efficiently on Analog
Devices family processors
• Included with VisualDSP++ development
tools
• No NRE or royalties associated with VDK
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Why do we need a kernel?
• A simple application that does only one task may not need a kernel
– i.e.) Blind processing of a super loop
• If you have more than one task, an application could be structured in a
couple of ways
– Respond to an event
• Events change execution state
– Assign tasks a given priority and execute high priority tasks more
often
• These approaches get difficult when
– You need to preserve the state of a task
– Low priority tasks may steal processing time longer than anticipated
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
What does a kernel give you?
• Automatic preservation of task/system state
• Assign a scheduling method to tasks
• Provides synchronization abilities
• Frees architect from having to design ‘control
code’
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
VDK Domain Concepts
• Application code executes in one of two domains
– 1 Thread Domain
– 2 Interrupt Domain
• Applications and algorithms execute in the thread domain
under control of the VDK Kernel
• Interrupts execute outside this domain and priority is
implemented in hardware
– Thread execution is halted while in the interrupt domain
• Device drivers are a bridge between the two domains
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
More VDK Concepts
•
Threads
– A segment of code and it’s related variables/data
– Each thread has its own stack and executes in supervisor mode
•
Interrupts
– Priority based in hardware
• Strongly recommend writing in assembly but C/C++ is supported
•
Signals
– Semaphores, Events, Device Flags, and Messages
– Used to synchronize activity
•
Device Drivers
– Threads do not communicate with hardware directly
– Hide the details of the hardware
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Domain Model
Thread Domain
•Under control of
scheduler
Device Driver
•Interface bridge
between Thread and ISR
domains
ISR Domain
•Priority set in hardware using
event controller configuration
registers
•Executes outside of schedulers
control
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Threads
• Thread types defined at project creation
• Each thread has a unique ThreadID
• Each thread has its own stack
–Programmers responsibility not to overflow
• The size of heap for stack and thread data
can be specified
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Semaphores
• Signals are used to synchronize thread activity
– A semaphore is a token that threads can post or acquire
– i.e.) relay race – second runner can not run until it has the baton
• Semaphores can be periodic
– allows given tasks to be scheduled on a fixed interval
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Events and Event Bits
• Events are used to synchronize thread
activity to the system
–Used to convey various system states to
threads
• Similar to semaphores but can convey
several combined system states at once
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Messages
• Inter-thread communication
–Transfer information between threads
• i.e.) Thread A sends some data for processing to
Thread B
• Application views single and multiprocessor systems the same
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Interrupts
• Execute using hardware priorities
–Spend as little time as necessary and only do the
minimal processing required in ISR
• Any registers used by an ISR must be saved
and restored
• ISRs can be written in assembly, C or C++
–C/C++ not recommended but included for
flexibility
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Device Drivers
• Device drivers bridge the gap between the thread and interrupt
domains
– How threads communicate with hardware
– Provides a black box view to the application
• A device driver is a single function with multiple entry points
– Initialization
– Activation
– Open
– Close
– SyncRead
– SyncWrite
– IOCtl
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Creating a Project using VDK
• VDK support is added from the project
wizard in Visual DSP++
• Visual DSP++ creates all the necessary
project files and skeleton code
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Auto Generated Frame Work
Automatically Added
•Input.cpp
•Output.cpp
•Relay.cpp
•Volcalc.cpp
•VolRamp.cpp
•Kerenel Files folder
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
The Kernel Tab
System
Control
Thread and
Blackfin Threads
Kernel
Configuration
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
Debug Assistance
• Integrated in to Visual DSP++
• VDK Status window
– State of each object, active thread, resource management, etc
• VDK History window
– Graphical display of system events
– Useful when used with Trigger points
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
VDK Status
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
VDK History Window
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.
VDK Summary
• Provides a comprehensive set of services
reducing the need to create your own control
code
• Allows for rapid prototype of system
• Easy to move applications/algorithms across ADI
processor families
• Well integrated with the IDDE for efficient editing
and debug
Copyright © Avnet, Inc., Analog Devices, Inc.
All rights reserved.