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.
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.
The System Node
System
Control
Thread
Blackfin Threads
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 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.