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.