Программирование DSP VisualDSP Automation API Wed, December 13 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


VisualDSP Automation API Печать
Добавил(а) microsin   

Этот документ описывает интерфейс автоматизации, встроенный в систему разработки VisualDSP++ 5.0 (перевод соответствующего раздела справки). Технология Windows Automation [3], обычно называемая OLE Automation, основанная на Microsoft COM система API, позволяет одним приложениям использовать функции, предоставленные другими приложениями. В нашем случае это API-функции, которые предоставляются системой разработки VisualDSP++. Они делают рабочее окружение VisualDSP++ доступным программно из других приложений, которые понимают технологию Automation.

[Архитектура VisualDSP++]

VisualDSP++ состоит из некоторого количества компонентов, которые работают совместно, позволяя осуществлять функции отладки и управление проектом через графический интерфейс пользователя (IDDE GUI). На картинке показаны основные составляющие системы VisualDSP++, и ниже дано краткое объяснение смысла этих компонентов.

VisualDSP Automation Architecture

External Automation Client. Это так называемый внешний клиент автоматизации, т. е. какая-либо программа, которая пользуется технологией Automation. Примеры таких внешних клиентов включают программы на Visual Basic, скрипты Visual Basic, Mathworks Matlab и Microsoft Excel.

Automation API. Слой Automation API это интерфейс автоматизации, которые предоставляет определенные службы VisualDSP++ для клиентов. Эти службы включают создание проекта, его сборку, а также отладку проекта путем его загрузки в процессор системы, запуск проекта на выполнение, просмотр содержимого памяти и регистров процессора.

Плагины. Плагин это компонент, который интегрирует в себе собственное меню и/или окно диалога в среде разработки VisualDSP++. Плагины сами используют Automation API для обмена информацией со средой разработки VisualDSP++. Примеры плагинов включают окно просмотра конвейера (Pipeline Viewer).

Script Engine. Система обработки скриптов, встроенная в VisualDSP++, использует фреймворк Microsoft ActiveScript, чтобы дать пользователю возможность доступа к Automation API через любой скрипт, совместимый с ActiveScript (это может быть скрипт VBScript или JScript).

VisualDSP++ IDDE. Аббревиатура IDDE означает Integrated Development and Debugging Environment, т. е. интегрированная среда разработки. Это приложение Windows, который предоставляет пользователю графический интерфейс, с помощью которого осуществляется весь процесс разработки и отладки приложений.

Symbol Manager. Менеджер символов - компонент, который отвечает за загрузку выполняемых файлов (*.dxe) в память целевого процессора. Он сохраняет и распознает всю отладочную информацию, содержащуюся в файлах DXE, включая символы объектов, полученных из исходного кода приложения, и оттуда помещенные в выполняемый файл.

Debug Target. Это цель отладки - компонент, который отвечает за весь обмен данными с целевым процессором. Он может (через интерфейс JTAG) читать/записывать память, регистры, запускать/выполнять по шагам/останавливать процессор, и т. д. Примеры debug target включают эмуляторы (это аппаратный отладчик JTAG) и симуляторы (программная система, моделирующая поведение процессора).

Processor Library. Библиотека процессора - компонент, выполняющий некие операции, специфические для определенного процессора. Это операции наподобие указаний, как данные должны быть представлены в среде IDDE, как определяются числовые форматы, выглядят окна просмотра памяти и регистров процессора для определенной модели процессора.

[Использование Automation API]

VisualDSP++ Automation API разработано для использования в скриптах на различных языках программирования и средах разработки, включая C++, JScript и VBScript. Чтобы использовать это API, разработчик должен сначала получить ссылку на верхний объект ADspApplication, откуда становятся доступны все другие объекты VisualDSP++ Automation API.

Ниже дано краткое описание основных шагов, которые нужно выполнить для использования Automation API в Visual C++ 2003 (или более новой версии), JScript и VBScript.

Microsoft Visual C++ 2003. Поскольку C++ это компилируемый язык (что также называют early bound language, язык предварительной сборки), то в нем нужно сначала предоставить определения для всех объектов, свойств, методов и событий в используемом API. Это реализуется через директиву #import среды разработки Visual C++. Самый простой способ использовать #import это предоставить полный путь до библиотеки или исполняемого кода, в котором реализовано API. В большинстве случаев это файл Idde.exe, который находится в директории System каталога установки VisualDSP++, но некоторые части API реализованы в библиотеках плагинов (plugin libraries, файлы *.dll), которые также находятся в директории System. Атрибут no_namespace является опциональным, и он будет подавлять создание namespace (пространства имен) VisualDSP в генерируемом коде. Если Вы опустите этот атрибут, то понадобится добавлять префикс VisualDSP:: в начала всех типов данных API (например VisualDSP::IADspApplicationPtr).

// Импорт библиотеки типов для Automation API
#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\idde.exe" no_namespace
 
// Импорт библиотеки типов для всех объектов PGO (ADspPgo*)
#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\pgoengine.dll" no_namespace

Примечание: PGO расшифровывается как "Profile Guided Optimization", т. е. это данные, относящиеся к специальному виду оптимизации. Подробнее см. описание этой технологии в статье [2].

Как только были импортированы библиотеки типов, Вы можете получить ссылку на них использованием метода CreateInstance() объекта в случае объекта ADspApplication, или использованием объекта Plugin в случае вызовов API, которые реализованы в библиотеках плагинов.

#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\idde.exe" no_namespace
#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\pgoengine.dll" no_namespace
#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\imageviewer.dll" no_namespace
#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\wmbtcengine.dll" no_namespace
#import "c:\Program Files (x86)\Analog Devices\VisualDSP 5.0\System\wmflashprogrammer.dll" no_namespace
 
int main( int argc, _TCHAR* argv[] )
{
   CoInitialize( NULL );
   IADspApplicationPtr pApp;
 
   // Создание объекта ADspApplication:
   pApp.CreateInstance( "VisualDSP.ADspApplication" );
   // Использование объекта ADspApplication:
   ...
   // Создание объекта ADspImageViewer:
   IADspImageViewerPtr pImgViewer = pApp->PluginList->GetItem("ImageViewer")->Open();
   // Использование объекта ADspImageViewer:
   ...
   // Создание объекта ADspFlashProgrammer:
   IADspFlashProgrammerPtr pFlashPrg = pApp->PluginList->GetItem("Flash Programmer")->Open();
   // Использование объекта ADspFlashProgrammer:
   ...
   // Создание объекта ADspBtcManager:
   IADspBtcManagerPtr pBtcMgr = pApp->PluginList->GetItem("BtcManager")->Open();
   // Использование объекта ADspBtcManager:
   ...
   // Создание объекта ADspPgoManager:
   IADspPgoPluginPtr pPgoPlugin = pApp->PluginList->GetItem("PGO Engine")->Open();
   // Использование объекта ADspPgoManager:
   ...
   return 0;
}

JScript. Поскольку JScript является интерпретируемым языком программирования, ему не нужно заранее ссылаться на библиотеку типов API. Чтобы использовать VisualDSP++ Automation API в JScript, просто создайте экземпляр объекта ADspApplication верхнего уровня с использованием объекта ActiveXObject следующим образом:

   var app = new ActiveXObject( "VisualDSP.ADspApplication" );
   // ... использование объекта ADspApplication ...
 
   var imgViewer = app.PluginList.Item("ImageViewer").Open();
   // ... использование объекта ADspImageViewer ...
 
   var flashPrg = app.PluginList.Item("Flash Programmer").Open();
   // ... использование объекта ADspFlashProgrammer ...
 
   var btcMgr = app.PluginList.Item("BtcManager").Open();
   // ... использование объекта ADspBtcManager ...
 
   var pgoPlugin = app.PluginList.Item("PGO Engine").Open();
   // ... использование объекта ADspPgoManager ...

VBScript. Для VBScript, как и для JScript, не требуется предварительный импорт библиотеки типов. Для использования VisualDSP++ Automation API в VBScript Вы можете просто создать экземпляр ADspApplication верхнего уровня глобальной функцией CreateObject, следующим образом:

   Set app = CreateObject( "VisualDSP.ADspApplication" )
   ' ... использование объекта ADspApplication ...
 
   Set imgViewer = app.PluginList.Item("ImageViewer").Open()
   ' ... использование объекта ADspImageViewer ...
 
   Set flashPrg = app.PluginList.Item("Flash Programmer").Open()
   ' ... использование объекта ADspFlashProgrammer ...
 
   Set btcMgr = app.PluginList.Item("BtcManager").Open()
   ' ... использование объекта ADspBtcManager ...
 
   Set pgoPlugin = app.PluginList.Item("PGO Engine").Open()
   ' ... использование объекта ADspPgoManager ...

[Справочник по функциям VisualDSP++ Automation API]

Automation позволяет клиентам использовать службы VisualDSP++ путем манипуляции объектами, определенными в интерфейсе автоматизации.

Каждый объект интерфейса может иметь свойства (properties), методы (methods) или события (events).

  • Свойства это атрибуты, которые описывают объект. Например, свойства объекта регистра это имя (name), ширина в битах (width), значение (value), и так далее.
  • Методы это операции (функции), которые выполняют какое-то действие, связанное с объектом. Например, методы объекта списка точек останова (breakpoint list) включают установку breakpoint, очистку breakpoint, и так далее.
  • События подобны callback-функции. Когда происходит событие, рабочее окружение VisualDSP++ вызовет код обработчика события клиента, оповещая его тем самым о возникновении события. Например, если процессор остановился, то сработает событие OnHalted().

Ниже в таблице приведено краткое описание объектов VisualDSP++ Automation.

Функция Описание
ADspApplication Этот объект служит точкой входа для плагина, или контроллера автоматизации наподобие программы на Visual Basic.
ADspBreakpoint, ADspBreakpointList Объект, представляющий установленную точку останова процессора, и объект, дающий доступ к набору точек останова, установленных в настоящее время в процессоре.
ADspBtcChannel, ADspBtcChannelList Первый объект представляет канал BTC [4], определенный в настоящее время программой, загруженной в процессор. Второй объект определяет набор таких каналов.
ADspBtcManager Объект позволяет получить доступ к памяти процессора, когда он работает или остановлен.
ADspCompilerAnnotation, ADspCompilerAnnotationList Первый объект представляет аннотацию компилятора к загруженной в настоящий момент программе .dxe. Второй представляет доступ к списку таких аннотаций.
ADspContextMenu Этот объект позволяет плагинам VisualDSP++ добавлять свои собственные пункты меню в контекстное меню, которое всплывает, когда пользователь делает правые клики мышью на окно плагина.
ADspCoreFileManager Этот объект предоставляет средства создания файла ядра (core file) для процессора и загрузку файла ядра в процессор, связанный с ним.
ADspCoreFileMemoryBlock, ADspCoreFileMemoryBlockList Первый объект представляет блок памяти для записи в файл ядра. Второй объект представляет список таких объектов. Он позволяет добавлять, удалять, перечислять объекты в списке.
ADspDebugSession Объект представляет сессию отладки.
ADspDebugTarget, ADspDebugTargetList Первый объект представляет установленную цель отладки (процессор), второй представляет набор таких целей отладки.
ADspDocument, ADspDocuments Первый объект представляет открытый документ, второй список таких документов.
ADspFlashProgrammer Объект предоставляет доступ к некоторым полезным функциям плагина flash programmer, которые дают возможность пользователю изменять содержимое памяти процессора [1].
ADspFunction, ADspFunctionList Первый объект представляет функцию, загруженную в память процессора, второй набор таких функций.
ADspHardwareStack, ADspHardwareStackList Первый объект представляет аппаратный стек процессора (наподобие PC stack, loop stack и т. п.), второй представляет набор таких стеков.
ADspImageViewer Этот объект представляет плагин Image Viewer. Image Viewer используется для отображения растровых данных точек, сохраненных в памяти процессора. Поддерживаются растровые форматы Grayscale, RGB и YUV.
ADspInterrupt, ADspInterruptList Первый объект представляет прерывание, второй набор таких прерываний.
ADspMemorySegment, ADspMemorySegmentList Первый объект представляет сегмент в карте памяти процессора. Второй представляет набор таких сегментов.
ADspMemoryType, ADspMemoryTypeList Первый объект представляет тип памяти, поддерживаемый процессором, второй набор таких типов.
ADspMenuManager Этот объект позволяет плагинам VisualDSP++ добавлять свои пункты меню в меню среды разработки VisualDSP++, и получить или установить состояние этих пунктов меню.
ADspMPGroup, ADspMPGroupList Первый объект представляет собой группу процессоров, Multiprocessor (MP), второй набор таких групп.
ADspMPGroupInfo, ADspMPGroupInfoList Первый объект предоставляет информацию о группе MP, предварительно созданной в сессии отладки, второй представляет набор таких объектов.
ADspOutputWindow Объект представляет окно вывода среды разработки VisualDSP++.
ADspPgoManager Объект дает доступ к генерации данных PGO [2], в то время как работает цель отладки (обычно это симулятор).
ADspPlatform, ADspPlatformList Первый объект представляет платформу цели отладки, второй набор таких платформ для определенной цели отладки.
ADspPlugin, ADspPluginList Первый объект представляет плагин, зарегистрированный в рабочем окружении VisualDSP++, второй набор таких зарегистрированных плагинов.
ADspProcessor, ADspProcessorList Первый объект представляет процессор, второй набор таких процессоров.
ADspProfileExecutionUnit, ADspProfileExecutionUnitList Первый объект представляет адрес блока кода, анализируемого профайлером, второй список таких блоков.
ADspProfileFunction, ADspProfileFunctionList Первый объект представляет обрабатываемую профайлером функцию, второй список таких функций.
ADspProfileRange, ADspProfileRangeList Первый объект представляет диапазон адресов обрабатываемого профайлинга, второй список таких диапазонов.
ADspProfileSession, ADspProfileSessionList Первый объект представляет сессию профайлера, второй список таких сессий.
ADspProgress Этот объект используется для получения значения прогресса или состояния разблокированной операции наподобие получения содержимого памяти, заполнения памяти, или загрузки программы.
ADspProject, ADspProjectList Первый объект представляет проект DSP (набор файлов исходного кода, используемых при сборке проекта, второй набор таких проектов.
ADspProjectWindow Объект представляет окно проекта в среде разработки VisualDSP++.
ADspRegister, ADspRegisterList Первый объект представляет регистр процессора, второй набор таких регистров.
ADspSAFP Этот объект дает доступ к некоторым полезным функциям отдельного программатора, что дает пользователю возможность изменять память flash процессора без необходимости наличия лицензии VisualDSP++.
ADspScriptEngine Объект представляет систему обработки скриптов.
ADspSession, ADspSessionList Первый объект представляет ранее созданную сессию отладки, второй представляет набор таких сессий, ранее созданных в среде разработки VisualDSP++.
ADspSoftwareStack Этот объект представляет набор фреймов программного стека.
ADspSoftwareStackFrame Объект представляет фрейм программного стека.
ADspSourceFile Объект представляет файл в проекте.
ADspStream, ADspStreamList Первый объект представляет поток, второй набор таких объектов.
ADspStringList Объект представляет набор строк.
ADspSymbol, ADspSymbolList Первый объект представляет символ, загруженный сейчас в процессор, второй набор таких символов.
ADspTool, ADspToolList Первый объект представляет утилиту командной строки наподобие компилятора или ассемблера (доступную для сборки проекта), второй набор таких утилит.
ADspValue, ADspValueList Первый объект представляет слово процессора, которое может использоваться для чтения или записи памяти, регистров или стеков, второй список таких объектов.
ADspWatchpoint, ADspWatchpointList Первый объект представляет наблюдаемое значение переменной отлаживаемой цели, второй набор таких объектов.

Это точка входа в плагин VisualDSP++ или контроллер автоматизации, находящийся вне процесса, наподобие программы Visual Basic. Это позволяет клиенту создать новый объект сессии, получить активную сессию, ли вывести что-то в одну из закладок выходного окна. Также этот объект позволяет пользователю создать новый список проекта, открыть существующий список проекта, или получить активный список проекта.

Ниже показан пример, демонстрирующий печать версию IDDE в окне консоли.

C++/ATL:

    IADspApplicationPtr pApp;
    TCHAR szVersion[32];
 
    pApp.CreateInstance( "VisualDSP.ADspApplication" );
    sprintf( szVersion, "IDDE Version: %d.%d",
             pApp->VersionMajor,
             pApp->VersionMinor );
 
    pApp->PrintText( tabConsole, szVersion );

Visual Basic:

    Dim app As Application
    Dim strVersion As String
 
    Set app = CreateObject( "VisualDSP.ADspApplication" )
    strVersion = "IDDE Version: " + CStr( app.VersionMajor ) + "." + CStr( app.VersionMinor )
 
    app.PrintText tabConsole, strVersion

Свойства

ActiveDocument
ActiveSession
Application
ApplicationVersion
CurrentDirectory
DebugTargetList
Documents
FullName
InstallationDirectory
Interactive
MenuManager
Name
OutputWindow
Parent
PluginList
ProductName
ProductVersion
ProjectList
ProjectWindow
ScriptEngine
SessionList
VersionMajor
VersionMinor
Visible

Методы

CreateMPSession
CreateSession
DisconnectSession
GetPreference
PrintText
Quit
RefreshWindows
SetPreference

События

OnAppClose
OnPreferencesUpdated

[ADspBreakpoint]

Объект представляет установленную для процессора точку останова. Примеры ниже демонстрируют печать списка точек останова и их свойств в окне консоли.

C++/ATL:

    IADspApplicationPtr pApp;
    TCHAR szBuffer[128];
 
    pApp.CreateInstance( "VisualDSP.ADspApplication" );
    IADspDebugSessionPtr pSession = pApp->ActiveSession;
    IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
    IADspBreakpointListPtr pBreakpointList = pProcessor->BreakpointList;
 
    for ( long i = 0; i < pBreakpointList->Count; i++ )
    {
        IADspBreakpointPtr pBreakpoint = pBreakpointList->GetItem( i );
        sprintf( szBuffer, "File Name = %s  Line Number = %ld  Address = 0x%lx",
                 (char *) pBreakpoint->FileName,
                 pBreakpoint->LineNumber, pBreakpoint->Address );
        pApp->PrintText( tabConsole, szBuffer );
    }

Visual Basic:

    Dim app As Application
    Dim session As ADspDebugSession
    Dim breakpoint_list As ADspBreakpointList
    Dim breakpoint As ADspBreakpoint
    Dim processor As ADspProcessor
 
    Set app = CreateObject( "VisualDSP.ADspApplication" )
    Set session = app.ActiveSession
    Set processor = session.ProcessorList( 0 )
    Set breakpoint_list = processor.BreakpointList
 
    For Each breakpoint In breakpoint_list
        app.PrintText tabConsole, "File Name = "     + breakpoint.FileName + _
                                  "  Line Number = " + CStr( breakpoint.LineNumber ) + _
                                  "  Address = 0x"   + Hex(breakpoint.Address)
    Next

Свойства

Address
Enabled
Expression
FileName
LineNumber
SkipCount
Temporary
Type

[ADspBreakpointList]

Объект представляет набор установленных для процессора в настоящий момент точек останова. Объект позволяет перебрать точки останова в списке (см. пример выше). Также он позволяет установить или удалить точки останова.

Свойства

Count
Item
MaxHardwareBreakpoints
_NewEnum

Методы

IsBreakpointAtAddress
IsBreakpointAtLine
RemoveBreakpointAtAddress
RemoveBreakpointAtLine
RemoveBreakpointByIndex
SetBreakpointAtAddress
SetBreakpointAtLine

[ADspBtcChannel]

Этот объект представляет канал BTC, определенный загруженной в настоящий момент программой. Он позволяет Вам читать и записывать память, связанную с каналом (подробнее о том, что такое канал BTC, см. [4]).

Имейте в виду, что этот объект реализован во внешнем dll-файле WmBtcEngine.dll, который находится в папке System каталога установки системы VisualDSP++, не напрямую в IDDE. Если Вы используете окружение разработки, которое требует библиотеку типов (например, C++ или .NET), то должны указать на эту библиотеку вместо Idde.exe. Обратите внимание, что ссылка на этот объект должна быть получена из свойства PluginList объекта ADspApplication, как это показано в примерах ниже.

Следующий пример демонстрирует печать свойств канала. Также демонстрируется запись и чтение памяти процессора, и затем отображают результаты этих данных в окне консоли.

C++/ATL:

USES_CONVERSION;
 
long i;
char cj;
char msg[256];
 
IADspApplicationPtr pApp("VisualDSP.ADspApplication");
IADspPluginPtr pBtcPlugin = pApp->PluginList->GetItem("BtcManager");
IADspBtcManagerPtr pBtcManager = pBtcPlugin->Open();
IADspBtcChannelListPtr pBtcChannelList = pBtcManager->ChannelList((long)0);
IADspBtcChannelPtr pBtcChannel = pBtcChannelList->GetItem((long)0);
 
sprintf(msg,"Channel Name:     %s \n"
            "Channel Address:  %x \n"
            "Channel Length:   %x \n"
            "Channel Timeout:  %d \n"
            "Supported Widths: %x \n",
            OLE2A(pBtcChannel->Name),
            pBtcChannel->Address,
            pBtcChannel->Length,
            pBtcChannel->Timeout,
            pBtcChannel->SupportedWidths);
 
pApp->PrintText( tabConsole, msg );
 
long length = pBtcChannel->Length;
 
LPSAFEARRAY psaWrite = SafeArrayCreateVector( VT_VARIANT, 0, length );
 
cj = 0x11;
for( i=0; i < length; i++, cj+=0x22 )
{
   CComVariant var = cj;
   SafeArrayPutElement( psaWrite, &i, &var );
}
 
CComVariant varWrArray;
varWrArray.vt = VT_ARRAY|VT_VARIANT;
varWrArray.parray = psaWrite;
 
pApp->PrintText( tabConsole, "Writing data...");
pBtcChannel->Write(adspBtcDataWidth(1), varWrArray);
 
pApp->PrintText( tabConsole, "Reading data...");
CComVariant varRdArray;
varRdArray = pBtcChannel->Read(adspBtcDataWidth(1));
 
for( i=0; i < length; i++ )
{
   CComVariant varRd, varWr;
   SafeArrayGetElement( varRdArray.parray, &i, &varRd );
   SafeArrayGetElement( varWrArray.parray, &i, &varWr );
   if (V_UI1(&varRd) != V_UI1(&varWr))
   {
      sprintf(msg, "Data mismatch. wrote: %x  read: %x", V_UI1(&varWr), V_UI1(&varRd));
      pApp->PrintText( tabConsole, msg);
   }
   else
   {
      sprintf(msg, "Data match. wrote: %x  read: %x", V_UI1(&varWr), V_UI1(&varRd));
      pApp->PrintText( tabConsole, msg);
   }
}
 
pBtcPlugin->Close(pBtcManager);

VBScript:

Dim app
Dim btc_plugin
Dim btc_manager
Dim btc_channel_list
Dim btc_channel
Dim wr_array()
Dim rd_array
Dim length, data, i
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set btc_plugin = app.PluginList("BtcManager")
Set btc_manager = btc_plugin.Open()
Set btc_channel_list = btc_manager.ChannelList(0)
Set btc_channel = btc_channel_list(0)
 
app.PrintText tabConsole, "Channel Name:    " + btc_channel.Name
app.PrintText tabConsole, "Channel Address: " + Hex(btc_channel.Address)
app.PrintText tabConsole, "Channel Length:  " + Hex(btc_channel.Length)
app.PrintText tabConsole, "Channel Timeout: " + CStr(btc_channel.Timeout)
app.PrintText tabConsole, "SupportedWidths: " + CStr(btc_channel.SupportedWidths)
app.PrintText tabConsole, ""
 
length = btc_channel.Length
ReDim wr_array(length-1)
 
data = &H11
For i = 0 To UBound(wr_array)
   wr_array(i) = data
   data = data + &H11
Next
 
app.PrintText tabConsole, "Writing data..."
btc_channel.Write 1, wr_array
app.PrintText tabConsold, "Reading data..."
rd_array = btc_channel.Read(1)
 
For i = 0 To UBound(wr_array)
   If wr_array(i) <> rd_array(i) Then
      app.PrintText tabConsole, "Data mismatch. wrote: " + Hex(wr_array(i)) _
                              + " read: " + Hex(rd_array(i)) + "."
   Else
      app.PrintText tabConsole, "Data match. wrote: " + Hex(wr_array(i)) _
                              + " read: " + Hex(rd_array(i)) + "."
   End If
Next
 
btc_plugin.Close btc_manager

Свойства

Name
Address
Length
Timeout
SupportedWidths

Методы

Read
Write

[ADspBtcChannelList]

Объект представляет набор каналов в виде объектов ADspBtcChannel, определенных программой, загруженной в настоящий момент в процессор. Примеры выше показывают, как осуществить печать в окне консоли списка каналов и их свойств.

Свойства

_NewEnum
Item
Count

Объект предоставляет доступ к памяти процессора, когда он работает или остановлен. Доступ осуществляется через каналы, которые определяет программа, работающая на процессоре.

Имейте в виду, что этот объект реализован во внешнем dll-файле WmBtcEngine.dll, который находится в папке System каталога установки системы VisualDSP++, не напрямую в IDDE. Если Вы используете окружение разработки, которое требует библиотеку типов (например, C++ или .NET), то должны указать на эту библиотеку вместо Idde.exe. Обратите внимание, что ссылка на этот объект должна быть получена из свойства PluginList объекта ADspApplication, как это показано в примерах ниже.

Пример кода, использующего объект ADspBtcManager, см. во врезке с описанием объекта канала ADspBtcChannel.

Свойства

Channel List

Методы

Read
Write

[ADspCompilerAnnotation]

Объект представляет аннотацию компилятора в загруженной в настоящий момент программе .dxe.

Свойства

Column
FileName
Line
Text
Type

[ADspCompilerAnnotationList]

Объект представляет список всех аннотаций компилятора в загруженной в настоящий момент программе .dxe.

Свойства

Count
Item
_NewEnum

Следующий пример показывает печать списка аннотаций и их свойств в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[4096];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspCompilerAnnotationListPtr pCompilerAnnotationList = pProcessor->CompilerAnnotationList;
for ( long i = 0; i < pCompilerAnnotationList->Count; i++ )
{
   IADspCompilerAnnotationPtr pADspCompilerAnnotation = pCompilerAnnotationList->GetItem( i );
 
   pApp->PrintText( tabConsole,
      "================================================================================" );
 
   sprintf( szBuffer, "File Name: %s",
          (char *) pADspCompilerAnnotation->FileName );
   pApp->PrintText( tabConsole, szBuffer );
 
   sprintf( szBuffer, "Line: %d", pADspCompilerAnnotation->Line );
   pApp->PrintText( tabConsole, szBuffer ); 
 
   sprintf( szBuffer, "Column: %d", pADspCompilerAnnotation->Column );
   pApp->PrintText( tabConsole, szBuffer ); 
 
   switch ( pADspCompilerAnnotation->Type )
   {
   case compilerAnnotationsTypeInfo:
      sprintf( szBuffer, "[info] %s", (char *) pADspCompilerAnnotation->Text );
      break;
   case compilerAnnotationsTypeAdvice:
      sprintf( szBuffer, "[advice] %s", (char *) pADspCompilerAnnotation->Text );
      break;
   case compilerAnnotationsTypeFailure:
      sprintf( szBuffer, "[failure] %s", (char *) pADspCompilerAnnotation->Text );
      break;
   default:
      sprintf( szBuffer, "[unknown] %s", (char *) pADspCompilerAnnotation->Text );
      break;              
   }
   pApp->PrintText( tabConsole, szBuffer ); 
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim annotation_list As ADspCompilerAnnotationList
Dim annotation As ADspCompilerAnnotation
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set annotation_list = processor.HardwareStackList
 
For Each annotation In annotation_list
   app.PrintText tabConsole, "Name = " + hardware_stack.Name _
                           + "  Width = " + CStr( hardware_stack.Width ) _
                           + "  Depth = " + CStr(hardware_stack.Depth)
 
   app.PrintText tabConsole, _
      "================================================================================"
   app.PrintText tabConsole, "File Name: " + annotation.FileName
   app.PrintText tabConsole, "Line     : " + cstr(annotation.Line)
   app.PrintText tabConsole, "Column   : " + cstr(annotation.Column)
 
   If (annotation.Type = 0) Then
      app.PrintText tabConsole, "[info]" + " " + annotation.Text
   Elseif (annotation.Type = 1) Then
      app.PrintText tabConsole, "[advice]" + " " + annotation.Text
   Elseif (annotation.Type = 2) Then
      app.PrintText tabConsole, "[failure]" + " " + annotation.Text
   Else
      app.PrintText tabConsole, "[unknown]" + " " + annotation.Text
   End if
Next

Объект позволяет плагинам VisualDSP++ добавлять свои собственные пункты в контекстное меню, которое всплывает по правому клику на окне плагина. Следующий пример демонстрирует добавление пользовательских пунктов в контекстное меню.

C++/ATL:

STDMETHODIMP CPlugin::ExtendContextMenu( LPDISPATCH pIADspContextMenu )
{
   // IDDE вызовет этот метод автоматически, когда пользователь сделает
   // правый клик в окне плагина. Это дает возможность добавить любые
   // пункты в контекстное меню.
 
   try
   {
      IADspContextMenuPtr pMenu = pIADspContextMenu;
      pMenu->AddMenu( "My Menu", ID_MY_MENU, TRUE, TRUE );
      pMenu->AddMenu( "SEPARATOR", 0,  FALSE, FALSE );
      pMenu->AddMenu( "SubMenu:My Menu 2", ID_MY_MENU2, FALSE TRUE );
   }
   catch( _com_error err )
   {
      ASSERT( !"Failed to add context menu" );
   }
 
   return( S_OK );
}

Методы

AddMenu

Объект предоставляет способ создать файл ядра (core file) для процессора, и загрузить этот файл ядра в процессор, связанный с ним.

Имейте в виду, что этот объект реализован во внешнем dll-файле CoreFileSupport.dll, который находится в папке System каталога установки системы VisualDSP++, не напрямую в IDDE. Если Вы используете окружение разработки, которое требует библиотеку типов (например, C++ или .NET), то должны указать на эту библиотеку вместо Idde.exe. Обратите внимание, что ссылка на этот объект должна быть получена из свойства PluginList объекта ADspApplication, как это показано в примерах ниже.

Следующий пример демонстрирует создание файла ядра для процессора, который может быть загружен впоследствии.

C++/ATL:

IADspApplicationPtr pApp( "VisualDSP.ADspApplication" );
IADspCoreFilePluginPtr pCfsPlugin = pApp->PluginList->GetItem("Core File Support")->Open();
IADspCoreFileManagerPtr pMgr = pCfsPlugin->CoreFileManager("ADSP-BF537");
pMgr->Save("H:\\Test\\adsp-bf537.core");

VBScript:

set app = CreateObject("VisualDSP.ADspApplication")
set cfs = app.PluginList.Item("Core File Support").Open()
set mgr = cfs.CoreFileManager("ADSP-BF537")
mgr.Save("H:\Test\adsp-bf537.core")

Свойства

ExecutableFileName
MemoryBlockList
RegisterList

Методы

Open
Save

[ADspCoreFileMemoryBlock]

Объект представляет блок памяти, предназначенный для записи в файл ядра.

Свойства

EndAddress
MemoryType
Name
StartAddress

[ADspCoreFileMemoryBlockList]

Объект представляет коллекцию объектов ADspCoreFileMemoryBlock. Объект позволяет добавлять, удалять и получать список объектов блоков памяти.

Свойства

Count
Item
_NewEnum

Методы

Add
Remove

Пример ниже демонстрирует создание файла ядра для процессора, который может быть позже загружен в процессор.

C++/ATL:

IADspApplicationPtr pApp( "VisualDSP.ADspApplication" );
IADspCoreFilePluginPtr pCfsPlugin = pApp->PluginList->GetItem("Core File Support")->Open();
IADspCoreFileManagerPtr pMgr = pCfsPlugin->CoreFileManager("ADSP-BF537");
IADspCoreFileMemoryBlockPtr pMemBlock( "CoreFileSupport.ADspCoreFileMemoryBlock" );
pMemBlock->StartAddress = 0xffa10000;
pMemBlock->EndAddress = 0xffa13fff;
pMemBlock->Name = "my code";
pMemBlock->MemoryType = "BLACKFIN Memory";
pMgr->MemoryBlockList->Add(pMemBlock);
pMgr->Save("H:\\Test\\adsp-bf537.core");

VBScript:

set app = CreateObject("VisualDSP.ADspApplication")
set cfs = app.PluginList.Item("Core File Support").Open()
set mgr = cfs.CoreFileManager("ADSP-BF537")
set mem_block = CreateObject("CoreFileSupport.ADspCoreFileMemoryBlock")
mem_block.StartAddress = &hffa10000
mem_block.EndAddress = &hffa13fff
mem_block.Name = "my code"
mem_block.MemoryType = "BLACKFIN Memory"
set mem_list = mgr.MemoryBlockList
mem_list.Add(mem_block)
mgr.Save("H:\Test\adsp-bf537.core")

Объект представляет сессию отладки. Он содержит информацию о цели отладки (target), платформе и процессорах, которые подключены к IDDE. При этом используется доступ к списку процессоров и групп MP (если они имеются).

В следующем примере подразумевается, что у Вас имеется установленный симулятор SHARC, и демонстрируется создание сессии симулятора SHARC с одним процессором ADSP-21065L.

C++/ATL:

IADspApplicationPtr pApp;
pApp.CreateInstance( "VisualDSP.ADspApplication" );
 
try
{
   IADspDebugSessionPtr pSession = pApp->CreateSession("My Session Name",
                                                       "ADSP-2106x Family Simulator",
                                                       "ADSP-2106x Simulator",
                                                       "ADSP-21065L" );
}
catch ( _com_error err )
{
   pApp->PrintText( tabConsole, "CreateSession failed" );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
 
On Error Resume Next
Set session = app.CreateSession( "My Session Name", _
                                 "ADSP-2106x Family Simulator", _
                                 "ADSP-2106x Simulator", _
                                 "ADSP-21065L" )
 
If (session Is Nothing) Then
   app.PrintText tabConsole, "CreateSession failed"
End If

Свойства

ActiveProcessor
MPGroupList
PlatformName
ProcessorList
SessionName
TargetName
StreamList

Методы

GetPreference
SetPreference

События

OnMPFocusChange
OnSessionClose

[ADspDebugTarget]

Объект представляет установленную цель отладки (debug target). Он позволит Вам получить её имя или список платформ.

Debug target это канал взаимодействия между средой VisualDSP++ и процессором DSP (или группой процессоров DSP). Понятие "target" включает в себе симуляторы, эмуляторы и платы разработчика EZ-KIT. В системе может быть установлено несколько target. Цели симулятора (simulator target), такие как ADSP-219x Family Simulator, отличаются от целей эмулятора (emulator target) тем, что в цели симулятора процессор присутствует только в программной модели. ADSP-21xxx JTAG Emulator обменивается с одним или большим количеством физических устройств через шину PCI хоста PC. ADSP-21xxx Trek-ICE Emulator осуществляет обмен с устройством через сеть TCP/IP. Другие современные эмуляторы наподобие ICE-100B, ICE-1000 обмениваются данными с хостом PC через интерфейс USB.

Свойства

Name
PlatformList

[ADspDebugTargetList]

Объект представляет набор установленных в системе debug target.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует вывод в окне консоли списка установленных debug target.

C++/ATL:

IADspApplicationPtr pApp;
pApp.CreateInstance( "VisualDSP.ADspApplication" );
 
// Получение списка установленных в целей отладки (debug target):
IADspDebugTargetListPtr pDebugTargetList = pApp->DebugTargetList;
 
// Проход по списку целей отладки и отображение имени каждого:
for ( long i = 0; i < pDebugTargetList->Count; i++ )
{
   IADspDebugTargetPtr pDebugTarget = pDebugTargetList->GetItem( i );
   pApp->PrintText( tabConsole, pDebugTarget->Name );
}

Visual Basic:

Dim app As Application
Dim debug_target_list As ADspDebugTargetList
Dim debug_target As ADspDebugTarget
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
 
Rem Получение списка установленных в целей отладки (debug target):
Set debug_target_list = app.DebugTargetList
 
Rem Проход по списку целей отладки и отображение имени каждого:
For Each debug_target In debug_target_list
   app.PrintText tabConsole, debug_target.Name
Next

[ADspDocument]

Объект представляет открытый документ (обычно это модуль исходного кода). Это позволяет клиенту перейти на строку и столбец документа по номеру, редактировать текст, сохранить текст в файл, вывести текст на печать или закрыть документ.

Свойства

Application
FullName
LineCount
Name
Parent
Path
Saved
Selection

Методы

Activate
ClearSelection
Close
DeleteText
GetText
GoTo
GoToBottom
GoToTop
InsertText
PrintOut
Save
SaveAs
SelectText
SetText

[ADspDocuments]

Объект представляет список открытых в настоящий момент документов. Это дает клиенту возможность просмотра списка документов, создать новый документ, или закрыть все документы.

Свойства

Application
Count
Item
_NewEnum
Parent

Методы

Add
Close
Open

События

OnDocumentAdded
OnDocumentCreated
OnDocumentRemoved

Следующий пример демонстрирует печать в окне консоли списка открытых документов.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDocumentsPtr pDocumentList = pApp->Documents;
 
for ( long i = 0; i < pDocumentList->Count; i++ )
{
   IADspDocumentPtr pDocument = pDocumentList->GetItem( i );
   pApp->PrintText( tabConsole, pDocument->Name );
}

Visual Basic:

Dim app As Application
Dim document_list As ADspDocuments
Dim document As ADspDocument
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set document_list = app.Documents
 
For Each document In document_list
    app.PrintText tabConsole, document.Name
Next

Объект позволяет получить доступ к некоторым полезным свойствам плагина программатора flash (flash programmer plug-in), что позволяет пользователю изменять содержимое памяти flash процессора.

Обратите внимание, что этот объект реализован во внешнем dll-файле WmFlashProgrammer.dll, находящемся в папке System каталога установки VisualDSP, а не напрямую в самой IDDE. Если Вы используете окружение разработки, которое требует библиотеку типов (например, C++ или .NET) то Вы должны сослаться на этот dll-файл вместо Idde.exe. Имейте в виду, что ссылка на этот объект должна быть получена из свойства PluginList объекта ADspApplication, как это показано в следующих примерах.

Методы

CompareFlashWithFile
EraseAll
EraseBlock
FillFlash
LoadDriver
LoadFile
SendCustom

Следующие примеры демонстрируют методы LoadDriver, EraseAll, LoadFile, EraseBlock, FillFlash, CompareFlashWithFile и SendCustom.

C++/ATL:

// test.cpp: определяет точку входа в консольное приложение.
//
// Как использовать: передайте начальный адрес для дампа памяти, и количество
// ячеек в формате HEX (без префикса 0x)
#include "stdafx.h"
 
#define _SAFP_
 
#ifdef _SAFP_
 #import "C:\Program Files\Analog Devices\VisualDSP 4.5\System\WmSAFP.dll" named_guids no_namespace
#else
 #import "C:\Program Files\Analog Devices\Visualdsp 4.5\System\WmFlashProgrammer.dll" named_guids no_namespace
#endif
 
#define Driver _T("C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples\\ADSP-BF537 EZ-Kit Lite
   \\Flash Programmer\\BF537EzFlashDriver.dxe")
#define Ldr _T("C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples\\ADSP-BF537 EZ-Kit Lite
   \\Power_On_Self_Test\\1000320_AA0188-2004_M29W320DB_U24.ldr")
#define Config _T("C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\BF537_SAFP_config.ini")
 
int _tmain(int argc, _TCHAR* argv[])
{
   // Инициализация библиотек COM:
   CoInitialize( NULL );
 
   USES_CONVERSION;
 
   _bstr_t bstrDriverPath = Driver;
   _bstr_t bstrLdrFile = Ldr;
   _bstr_t bstrConfigFile = Config;
   int VerifyWhileWriting = 0x1;
   unsigned long ulBlock66Start = 0x3F0000;
   unsigned short sMAC_Address[3];// Mac address values
   long lCount = 0x1;
   short sStride = 0x1;
 
   // Назначение MAC-адреса:
   sMAC_Address[0] = 0xE000;
   sMAC_Address[1] = 0xFE22;
   sMAC_Address[2] = 0x3412;
 
#ifdef _SAFP_
   IADspSAFPPtr pFlashProg("VisualDSP.ADspSAFP");
 
   // Установка файла конфигурации:
   pFlashProg->put_ConfigFile(bstrConfigFile);
#else
   IADspApplicationPtr pApp("VisualDSP.ADspApplication");
   IADspPluginPtr pFlashPlugin = pApp->PluginList->GetItem("Flash Programmer");
   IADspFlashProgrammerPtr pFlashProg = pFlashPlugin->Open();
#endif
 
   // Загрузка драйвера:
   printf("Start: Loading the flash programmer driver...\n");
   HRESULT hr = pFlashProg->LoadDriver(bstrDriverPath.GetBSTR());
   if( hr != S_OK )
   {
      printf("Failed Loading Driver");
      return 1;
   }
   printf("Done: Loading the flash programmer driver...\n\n");
 
   // Загрузка файла в формате Intel Hex:
   printf("Start: Loading POST ldr file...\n");
   hr = pFlashProg->LoadFile(bstrLdrFile.GetBSTR(), formatIntelHex, VerifyWhileWriting, eraseAffected, 0x0 );
   if( hr != S_OK )
   {
      printf("Failed Loading Ldr file.");
      return 1;
   }
   printf("Done: Loading POST ldr file...\n\n");
 
   printf("Start: Comparing POST ldr file to the flash contents...\n");
   hr = pFlashProg->CompareFlashWithFile(bstrLdrFile.GetBSTR(), formatIntelHex, 0x0);
   if( hr != S_OK )
   {
      printf("Ldr file did not match the contents of flash.");
      return 1;
   }
   printf("Done: Comparing POST ldr file to the flash contents...\n\n");
 
   try
   {
      // Стирание блока с MAC-адресом:
      printf("Start: Erasing block that contains the MAC address...\n");
      hr = pFlashProg->EraseBlock(70);
      if( hr != S_OK )
      {
         printf("Failed erasing sector.");
         return 1;
      }
      printf("End: Erasing block that contains the MAC address...\n\n");
   }
   catch(...)
   {
      printf("Make sure the sector number is correct and not write protected.\n");
      return -1;
   }
 
   // Запись нашего MAC-адреса:
   printf("Start: Writing MAC address...\n");
   pFlashProg->FillFlash( ulBlock66Start, lCount, sStride, sMAC_Address[0] );
   if( hr != S_OK )
   {
      printf("Failed filling flash.");
      return 1;
   }
   pFlashProg->FillFlash( (ulBlock66Start + 2), lCount, sStride, sMAC_Address[1] );
   if( hr != S_OK )
   {
      printf("Failed filling flash.");
      return 1;
   }
   pFlashProg->FillFlash( (ulBlock66Start + 4), lCount, sStride, sMAC_Address[2] );
   if( hr != S_OK )
   {
      printf("Failed filling flash.");
      return 1;
   }
   printf("End: Writing MAC address...\n");
 
#ifndef _SAFP_
   pFlashPlugin->Close(pFlashProg);
#endif
 
   printf("Done.\n");
 
   return 0;
}

Visual Basic:

'//////////////////////////////////////////////////////////////////////////////
'//   Основное приложение
'//////////////////////////////////////////////////////////////////////////////
 
Const SAFP = 1
 
Const CONFIG_FILE = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\BF537_SAFP_config.ini"
Const DRIVER_FILE = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples
   \\ADSP-BF537 EZ-Kit Lite\\Flash Programmer\\BF537EzFlashDriver.dxe"
Const LDR_FILE = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples
   \\ADSP-BF537 EZ-Kit Lite\\Power_On_Self_Test\\1000320_AA0188-2004_M29W320DB_U24.ldr"
 
Dim FileFormat
Dim VerifyWhileWriting
Dim EraseOption
Dim StartAddress
 
FileFormat = 0          ' формат Intel HEX
VerifyWhileWriting = 1  ' проверить память после записи
EraseOption = 0         ' стирать только задействованные сектора памяти
StartAddress = 0        ' этот параметр игнорируется для Intel HEX
 
if SAFP Then
   Set pFlash = CreateObject("VisualDSP.ADspSAFP")
 
   ' Установка файла конфигурации:
   wscript.Echo "Setting config file..."
   pFlash.ConfigFile = CONFIG_FILE
Else
   Set app = CreateObject("VisualDSP.ADspApplication")
   Set plugin = app.PluginList.Item("Flash Programmer")
   Set pFlash = plugin.Open()
End If
 
' Загрузка драйвера:
wscript.Echo "Loading driver..."
pFlash.LoadDriver DRIVER_FILE
 
' Стирание блока:
wscript.Echo "Erasing Block 0..."
pFlash.EraseBlock 0
 
' Загрузка ldr-файла
wscript.Echo "Load the LDR file..."
pFlash.LoadFile LDR_FILE, FileFormat, VerifyWhileWriting, EraseOption, StartAddress
 
if SAFP = 0 Then
   plugin.Close pFlash
End If
 
wscript.Echo "Done."

JScript:

//////////////////////////////////////////////////////////////////////////////
// Основное приложение
//////////////////////////////////////////////////////////////////////////////
 
////////////////////////////////
// Определение переменных
var SAFP = 1;
 
// Установка пути до файла конфигурации, драйвера и LDR-файла
var ConfigFile = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\BF537_SAFP_config.ini";
var DriverFile = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples
   \\ADSP-BF537 EZ-Kit Lite\\Flash Programmer\\BF537EzFlashDriver.dxe";
var LdrFile = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples
   \\ADSP-BF537 EZ-Kit Lite\\Power_On_Self_Test\\1000320_AA0188-2004_M29W320DB_U24.ldr";
 
var FileFormat = 0;           // формат Intel HEX
var VerifyWhileWriting = 1;   // выполнить проверку после записи
var EraseOption = 0;          // стирать только задействованные сектора
var StartAddress = 0;         // этот параметр игнорируется для Intel HEX
 
if( SAFP )
{
   // Получить объект SAFP
   var pFlash = new ActiveXObject( "VisualDSP.ADspSAFP" );
   // Установить файл конфигурации:
   WScript.Echo("Setting config file...");
   pFlash.ConfigFile = ConfigFile;
}
else
{
   // Получить объект VDSP:
   var app = new ActiveXObject( "VisualDSP.ADspApplication" );
   var plugin = app.PluginList.Item("Flash Programmer");
   var pFlash = plugin.Open();
}
 
// Загрузить драйвер:
WScript.Echo("Loading driver...");
pFlash.LoadDriver(DriverFile);
 
// Стереть первый блок:
WScript.Echo("Erasing sector 0...");
pFlash.EraseBlock(0);
 
// Загрузка LDR-файла:
WScript.Echo("Loading the LDR file...");
pFlash.LoadFile(LdrFile, FileFormat, VerifyWhileWriting, EraseOption, StartAddress);
 
if( !SAFP )
{
   plugin.Close(pFlash);
}
 
WScript.Echo("Done.");

Python:

import win32com.client
 
#/////////////////////////////////////////////////////////////////////////////
#// def main()
#/////////////////////////////////////////////////////////////////////////////
if __name__ == '__main__':
   SAFP = 1
 
MacAddressBlock = 66                      # 66 для части DB и 70 для части EB
bEraseAll = 0                             # 0 - стереть сектор, 1 - стереть все
MAC_Address = [ 0xE000, 0xFE22, 0x3412 ]  # значение MAC-адреса
DriverPath = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples
   \\ADSP-BF537 EZ-Kit Lite\\Flash Programmer\\BF537EzFlashDriver.dxe"
LdrPath = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\Examples
   \\ADSP-BF537 EZ-Kit Lite\\Power_On_Self_Test\\1000320_AA0188-2004_M29W320DB_U24.ldr"
ConfigFile = "C:\\Program Files\\Analog Devices\\VisualDSP 4.5\\BF537_SAFP_config.ini"
 
# Параметры для программирования файла
EraseOption = 0x0
FileFormat = 0x0
VerifyWhileWriting = 0x1
 
if ( SAFP == 1 ):
   pFlash = win32com.client.Dispatch("VisualDSP.ADspSAFP")
 
   ####
   # Первое, что всегда надо сделать: установить наш файл конфигурации
   ####
   print 'Setting config File.'
   pFlash.ConfigFile = ConfigFile
else:
   app = win32com.client.Dispatch("VisualDSP.ADspApplication")
   plugin = app.PluginList.Item("Flash Programmer")
   pFlash = plugin.Open()
 
####
# Загрузка драйвера программатора (flash programmer driver)
####
print 'Loading flash driver.'
pFlash.LoadDriver( DriverPath )
 
####
# Выполнить стирание:
####
if ( bEraseAll == 1 ):
   print 'Erase all of flash.'
   pFlash.EraseAll()
else:
   print 'Erase block 0'
   pFlash.EraseBlock( 0 )
 
####
# Запись нашего файла во flash:
####
print 'Loading file to flash'
pFlash.LoadFile( LdrPath, FileFormat, VerifyWhileWriting, EraseOption, 0 )
 
####
# Сравнение нашего файла с содержимым flash:
####
print 'Comparing file with flash'
pFlash.CompareFlashWithFile( LdrPath, FileFormat, 0 )
 
####
# Теперь запрограммируем MAC-адрес:
####
print 'Erase sector containing the MAC Address'
pFlash.EraseBlock( 66 )
 
print 'Write our MAC address to flash'
pFlash.FillFlash( 0x3F0000, 1, 1, MAC_Address[0] )
pFlash.FillFlash( 0x3F0002, 1, 1, MAC_Address[1] )
pFlash.FillFlash( 0x3F0004, 1, 1, MAC_Address[2] )
 
####
# Команда, отправляемая здесь, должна вызвать сброс:
####
print 'Send a custom command'
pFlash.SendCustom( 2 )
 
if ( SAFP == 0 ):
   plugin.Close( pFlash )
 
print 'Done'

[ADspFunction]

Объект представляет функцию на языке высокого уровня, загруженную в настоящий момент в память процессора.

Свойства

Name
FileName
Line
StartOfFunction
StartOfBody
EndOfBody
EndOfFunction
MemoryType

[ADspFunctionList]

Этот объект представляет собой коллекцию объектов ADspFunction.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует печать списка функций в окне консоли.

C++/ATL:

USES_CONVERSION;
 
TCHAR szText[1024];
IADspApplicationPtr pApp( "VisualDSP.ADspApplication" );
IADspProcessorPtr pProc = pApp->ActiveSession->ActiveProcessor;
IADspMemoryTypePtr pMem = pProc->MemoryTypeList->GetItem( long(0) );
IADspFunctionListPtr pList = pMem->FunctionList;
 
for( long i=0; i < pList->Count; i++ )
{
   IADspFunctionPtr pFunction = pList->GetItem(i);
   sprintf( szText,
            "\n  Function Name: %s\n"
            "       FileName: %s(%d)\n"
            " Function Start: 0x%08x\n"
            "     Body Start: 0x%08x\n"
            "       Body End: 0x%08x\n"
            "   Function End: 0x%08x\n"
            "    Memory Type: %s",
            OLE2A(pFunction->Name),
            OLE2A(pFunction->FileName),
            pFunction>Line,
            pFunction>StartOfFunction,
            pFunction>StartOfBody,
            pFunction>EndOfBody,
            pFunction>EndOfFunction,
            OLE2A(pFunction->MemoryType->Name) );
 
   pApp>PrintText( tabConsole, szText );
}

Visual Basic:

Dim app As Application
Dim mem As ADspMemoryType
Dim func As ADspFunction
 
Set app = CreateObject("VisualDSP.ADspApplication")
Set mem = app.ActiveSession.ActiveProcessor.MemoryTypeList(0)
 
For Each func In mem.FunctionList
   app.PrintText tabConsole, vbCrLf & "   Function Name: " & func.Name
   app.PrintText tabConsole, "        FileName: " & func.FileName & "(" & str(func.Line) & ")"
   app.PrintText tabConsole, "  Function Start: " & Hex(func.StartOfFunction)
   app.PrintText tabConsole, "      Body Start: " & Hex(func.StartOfBody)
   app.PrintText tabConsole, "        Body End: " & Hex(func.EndOfFunction)
   app.PrintText tabConsole, "    Function End: " & Hex(func.EndOfBody)
   app.PrintText tabConsole, "     Memory Type: " & func.MemoryType.Name
Next

[ADspHardwareStack]

Объект представляет аппаратный стек (hardware stack) наподобие стека программного счетчика (PC stack), стека цикла (loop stack), и. т. д.

Свойства

Depth
Name
StackPointer
Width

Методы

GetStack
SetStack

Следующий пример демонстрирует получение содержимого стека PC и отображение его в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspHardwareStackListPtr pHardwareStackList = pProcessor->HardwareStackList;
 
if ( NULL == pHardwareStackList )
{
   pApp->PrintText( tabConsole, "Target does not support hardware stacks" );
}
else
{
   try
   {
      IADspHardwareStackPtr pHardwareStack = pHardwareStackList->GetItem( "PC Stack" );
      if ( 0 == pHardwareStack->StackPointer )
      {
         pApp->PrintText( tabConsole, "PC Stack is empty" );
      }
      else
      {
         IADspValueListPtr pValueList = pHardwareStack->GetStack();
         for ( long i = 0; i < pHardwareStack->StackPointer; i++ )
         {
            IADspValuePtr pValue = pValueList->GetItem( i );
            pApp->PrintText( tabConsole, pValue->ToString( "Hexadecimal" ) );
         }
      }
   }
   catch ( _com_error err )
   {
      pApp->PrintText( tabConsole, "Processor doesn't have a stack named \"PC Stack\"" );
   }
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim processor As ADspProcessor
   Dim hardware_stack_list As ADspHardwareStackList
   Dim hardware_stack As ADspHardwareStack
   Dim value_list As ADspValueList
   Dim value As ADspValue
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set session = app.ActiveSession
   Set processor = session.ProcessorList( 0 )
   Set hardware_stack_list = processor.HardwareStackList
 
   If (hardware_stack_list Is Nothing) Then
      app.PrintText tabConsole, "Target does not support hardware stacks"
   Else
      On Error GoTo GetItemFailed
      Set hardware_stack = hardware_stack_list( "PC Stack" )
      If ( hardware_stack.StackPointer = 0 ) Then
         app.PrintText tabConsole, "PC Stack is empty"
      Else
         Set value_list = hardware_stack.GetStack
         For i = 0 To hardware_stack.StackPointer - 1
            Set value = value_list( i )
            app.PrintText tabConsole, value.ToString( "Hexadecimal" )
         Next
      End If
   End If
   Exit Sub
 
GetItemFailed:
   app.PrintText tabConsole, "Processor doesn't have a stack named ""PC Stack"""

[ADspHardwareStackList]

Объект представляет набор аппаратных стеков, поддерживаемых процессором.

Свойства

Count
Item
_NewEnum

Пример ниже выводит список аппаратных стеков и их свойства в окно консоли.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspHardwareStackListPtr pHardwareStackList = pProcessor->HardwareStackList;
 
if ( NULL == pHardwareStackList )
{
   pApp->PrintText( tabConsole, "Target does not support hardware stacks" );
}
else
{
   for ( long i = 0; i < pHardwareStackList->Count; i++ )
   {
      IADspHardwareStackPtr pHardwareStack = pHardwareStackList->GetItem( i );
      sprintf( szBuffer, "Name = %s  Width = %ld  Depth = %ld",
               (char *) pHardwareStack->Name,
               pHardwareStack->Width, pHardwareStack->Depth );
      pApp->PrintText( tabConsole, szBuffer );
   }
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim hardware_stack_list As ADspHardwareStackList
Dim hardware_stack As ADspHardwareStack
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set hardware_stack_list = processor.HardwareStackList
 
If (hardware_stack_list Is Nothing) Then
   app.PrintText tabConsole, "Target does not support hardware stacks"
Else
   For Each hardware_stack In hardware_stack_list app.PrintText tabConsole, _
      "Name = " + hardware_stack.Name + _
      "  Width = " + CStr( hardware_stack.Width ) + _
      "  Depth = " + CStr(hardware_stack.Depth)
    Next
End If

Этот объект представляет плагин Image Viewer. Он используется для отображения растра графики (pixel data), которая сохранена в памяти процессора DSP. Пиксельные форматы включают поддержку Grayscale, RGB и YUV. Для дополнительной информации обратитесь к Image Viewer online help.

Имейте в виду, что этот объект реализован во внешнем dll-файле ImageViewer.dll, находящимся в папке System каталога установки VisualDSP, не напрямую в IDDE. Если Вы используете среду разработки, которая требует библиотеку типов (C++ или .NET например), то должны указать этот библиотечный файл вместо Idde.exe. Обратите внимание, что этот объект должен быть получен из свойства PluginList объекта ADspApplication, как это показано в примерах ниже.

Следующий пример демонстрирует загрузку картинки из файла и запись пиксельных данных в память процессора DSP.

C++/ATL:

try
{
   IADspApplicationPtr pApp("VisualDSP.ADspApplication");
 
   pApp->Interactive = FALSE;
 
   IADspPluginPtr pImageViewerPlugin = pApp->PluginList->GetItem("ImageViewer");
 
   IADspImageViewerPtr pImageViewer = pImageViewerPlugin->Open();
 
   pImageViewer->SourceLocation = sourceLocationFile;
   pImageViewer->WriteStream = FALSE;
 
   CComVariant var = "Blackfin Memory";
   pImageViewer->put_MemoryType(var);
 
   pImageViewer->StartAddress = "0xF0000000";
 
   pImageViewer->LoadImageFile("C:\\test.bmp");
 
   pApp.Release();
}
catch( _com_error err )
{
   AfxMessageBox("test failed");
}

Visual Basic:

Set App = CreateObject("VisualDSP.ADspApplication")
App.Interactive = False
 
Set ImageViewerPlugin = App.PluginList("ImageViewer")
Set ImageViewer = ImageViewerPlugin.Open()
 
ImageViewer.SourceLocation = sourceLocationFile
ImageViewer.WriteStream = False
ImageViewer.MemoryType = "Blackfin Memory"
ImageViewer.StartAddress = "0xF0000000"
ImageViewer.LoadImageFile ("C:\\test.bmp")

Свойства

AutoRefreshEnable
AutoRefreshRate
AutoRefreshTimeout
AutoRefreshType
Flip
Height
HorzMaxScroll
HorzScrollPos
JpegQuality
MemoryType
MemSourceFormat
MemSourceSize
Pack
PixelFormat
Pixels
PpmType
ReversePack
Rotation
SourceLocation
StartAddress
Stride
UpdateOnHalt
VertMaxScroll
VertScrollPos
Width
WriteStream
Zoom

Методы

CopyImage
CreateImage
LoadImageFile
PrintImage
RefreshImage
SaveImageFile

[ADspInterrupt]

Объект представляет прерывание процессора.

Свойства

Name
Enabled
MinCycles
MaxCycles
DelayCycles

[ADspInterruptList]

Объект представляет набор прерываний процессора. Позволяет просмотреть список этих прерываний.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует вывод прерываний и их свойств в окно консоли.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspInterruptListPtr pInterruptList = pProcessor->InterruptList;
 
for ( long i = 0; i < pInterruptList->Count; i++ )
{
   IADspInterruptPtr pInterrupt = pInterruptList->GetItem( i );
   sprintf(szBuffer, "Interrupt Name=%s Enabled=%d Min Cycles=%ld Max Cycles=%ld Delay Cycles=%ld",
           (char *)pInterrupt->Name, pInterrupt->Enabled, pInterrupt->MinCycles,
           pInterrupt->MaxCycles, pInterrupt->DelayCycles );
   pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim interrupt_list As ADspInterruptList
Dim interrupt As ADspInterrupt
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set interrupt_list = processor.InterruptList
 
For Each interrupt In interrupt_list
   app.PrintText tabConsole, _
      "Interrupt Name = " + interrupt.Name + _
      "  Enabled = " + CStr( interrupt.Enabled ) + _
      "  Min Cycles = " + CStr( interrupt.MinCycles ) + _
      "  Max Cycles = " + CStr( interrupt.MaxCycles ) + _
      "  Delay Cycles = " + CStr( interrupt.DelayCycles )
Next

[ADspMemorySegment]

Объект представляет сегмент в карте памяти процессора. Если никакая программа не загружена, то карту памяти представляет вся доступная память процессора. Если программа загружена, то карта памяти это карта (map), определенная в секции MEMORY файла .LDF программы.

Свойства

AccessType
EndAddress
MemoryType
Name
StartAddress
Width

[ADspMemorySegmentList]

Объект представляет набор объектов сегментов памяти. Он позволяет просмотреть карту памяти процессора.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует вывод списка сегментов и их свойств в окно консоли.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[256];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspMemorySegmentListPtr pMemorySegmentList = pProcessor->MemorySegmentList;
 
for ( long i = 0; i < pMemorySegmentList->Count; i++ )
{
   IADspMemorySegmentPtr pMemorySegment = pMemorySegmentList->GetItem( i );
   sprintf( szBuffer, "Name=%s MemoryType=%s StartAddress=0x%lx EndAddress=0x%lx AccessType=%d",
            (char *) pMemorySegment->Name,
            (char *) pMemorySegment->MemoryType->Name,
            pMemorySegment->StartAddress, pMemorySegment->EndAddress,
            pMemorySegment->AccessType );
   pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim memory_segment_list As ADspMemorySegmentList
Dim memory_segment As ADspMemorySegment
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set memory_segment_list = processor.MemorySegmentList
 
For Each memory_segment In memory_segment_list
   app.PrintText tabConsole, _
   "Name = " + memory_segment.Name + _
   "  Memory Type = " + memory_segment.MemoryType.Name + _
   "  Start Address = 0x" + Hex( memory_segment.StartAddress ) + _
   "  End Address = 0x" + Hex( memory_segment.EndAddress ) + _
   "  Access Type = " + CStr(memory_segment.AccessType)
Next

[ADspMemoryType]

Объект представляет тип памяти, поддерживаемый процессором. Он позволяет читать, записывать и заполнять блок памяти. Примеры типов памяти включают "Program Memory (PM)" (память программы) и "Data Memory (DM)" (память данных).

Свойства

ConvertTypeWidth
Formats
FunctionList
Name
SymbolList
Width

Методы

DumpMemoryToBinaryFile
DumpMemoryToTextFile
FillMemoryFromBinaryFile
FillMemoryFromTextFile
FillMemoryWithValue
GetFormattedMemory
GetMemory
GetMemoryArray
GetMemoryArrayUnblocked
GetMemoryUnblocked
GetSymbolListByAddress
GetSymbolListByName
SetFormattedMemory
SetMemory
SetMemoryArray
SetMemoryArrayUnblocked
SetMemoryUnblocked

Следующий пример демонстрирует чтение памяти в процессоре и отображение прочитанного содержимого памяти в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspMemoryTypeListPtr pMemoryTypeList = pProcessor->MemoryTypeList;
 
try
{
   IADspMemoryTypePtr pMemoryType = pMemoryTypeList->GetItem( "Data(DM) Memory" );
   try
   {
      IADspValueListPtr pValueList=pMemoryType->GetMemory(0x30000, // начальный адрес
                                                          10,      // количество ячеек
                                                          1 );     // шаг
      for ( long i = 0; i < pValueList->Count; i++ )
      {
         IADspValuePtr pValue = pValueList->GetItem( i );
         pApp->PrintText( tabConsole, pValue->ToString( "Hexadecimal" ) );
      }
   }
   catch ( _com_error err )
   {
      pApp->PrintText( tabConsole, "GetMemory failed" );
   }
}
catch ( _com_error err )
{
   pApp->PrintText( tabConsole, "Processor doesn't have memory named \"Data(DM) Memory\"" );
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim processor As ADspProcessor
   Dim memory_type_list As ADspMemoryTypeList
   Dim memory_type As ADspMemoryType
   Dim value_list As ADspValueList
   Dim value As ADspValue
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set session = app.ActiveSession
   Set processor = session.ProcessorList( 0 )
   Set memory_type_list = processor.MemoryTypeList
 
   On Error GoTo GetItemFailed
   Set memory_type = memory_type_list( "Data(DM) Memory" )
 
   On Error GoTo GetMemoryFailed
   Set value_list = memory_type.GetMemory( &h30000, 10, 1 )
   For Each value In value_list
       app.PrintText tabConsole, value.ToString( "Hexadecimal" )
   Next
   Exit Sub
 
GetItemFailed:
   app.PrintText tabConsole, "Processor doesn't have memory named ""Data(DM) Memory""
   Exit Sub
 
GetMemoryFailed:
   app.PrintText tabConsole, "GetMemory failed"

[ADspMemoryTypeList]

Объект представляет набор типов памяти, поддерживаемых процессором.

Свойства

Count
Item
_NewEnum

Методы

FindSymbol
FindFunction

Следующий пример демонстрирует вывод списка типов памяти и их свойств в окно консоли.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspMemoryTypeListPtr pMemoryTypeList = pProcessor->MemoryTypeList;
 
for ( long i = 0; i < pMemoryTypeList->Count; i++ )
{
   IADspMemoryTypePtr pMemoryType = pMemoryTypeList->GetItem( i );
   sprintf( szBuffer, "Name = %s  Width = %ld",
           (char *) pMemoryType->Name, pMemoryType->Width );
   pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim memory_type_list As ADspMemoryTypeList
Dim memory_type As ADspMemoryType
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set memory_type_list = processor.MemoryTypeList
 
For Each memory_type In memory_type_list
   app.PrintText tabConsole, "Name = " + memory_type.Name + _
                             "  Width = " + CStr( memory_type.Width )
Next

Этот объект позволяет плагинам VisualDSP++ добавлять свои собственные пункты меню к меню IDDE, и получить состояние этих пунктов меню. Следующий пример демонстрирует добавление пользовательского меню к меню приложения.

C++/ATL:

IADspApplicationPtr pApp;
short menuid;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspMenuManagerPtr pMenuManager = pApp->MenuManager;
 
menuid=pMenuManager->AddMenuTail("&Tools:&My Menu Item",
                                 "This is a custom menu item.");

Visual Basic:

Dim app As Application
Dim WithEvents menumanager As ADspMenuManager
Dim menuid As Integer
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set menumanager = app.MenuManager
 
menuid = menumanager.AddMenuTail( "&Tools:&My Menu Item", _
                                  "This is a custom menu item." )

Методы

AddMenuAfter
AddMenuBefore
AddMenuHead
AddMenuTail
CheckMenuItem
ClickMenuItem
DeleteMenuItem
EnableMenuItem
GetMenuID
IsMenuItemChecked
IsMenuItemEnabled

События

OnMenuItemClicked
OnMenuItemHelp

[ADspMPGroup]

Объект представляет группу Multiprocessor (MP). Группа MP это группа процессоров, которая может принимать команды MP наподобие MP run, MP step, MP halt, и т. д.

Свойства

Name

Методы

AddProcToGroup
IsProcInGroup
MPHalt
MPReset
MPRestart
MPRun
MPStepAsm
RemoveProcFromGroup

В следующем примере подразумевается, что текущая сессия мультипроцессорная, и здесь демонстрируется создание новой группы MP, добавление в неё имеющихся процессоров, выполнение шага для группы процессоров, и затем удаление этой группы.

C++/ATL:

ADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
 
try
{
   IADspMPGroupPtr pMPGroup;
   IADspDebugSessionPtr pSession = pApp->ActiveSession;
   try
   {
      IADspMPGroupListPtr pMPGroupList = pSession->MPGroupList;
      if ( NULL == pMPGroupList)
      {
         pApp->PrintText( tabConsole, "Current session is not multiprocessor!" );
      }
      else
      {
         pMPGroup = pMPGroupList->CreateMPGroup( "My Group Name" );
         // Добавление всех доступных процессоров в группу:
         for (long i = 0; i < pSession->ProcessorList->Count; i++ )
         {
            pMPGroup->AddProcToGroup( CComVariant( i ) );
         }
         pMPGroup->MPStepAsm();
         pMPGroupList->RemoveGroup( "My Group Name" );
      }
   }
   catch ( _com_error err )
   {
      pApp->PrintText( tabConsole, "CreateMPGroup failed" );
   }
}
catch ( _com_error err )
{
    pApp->PrintText( tabConsole, "CreateMPSession failed" );
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim group As ADspMPGroup
   Dim group_list As ADspMPGroupList
   Dim i As Integer
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
 
   On Error Resume Next
   Set session = app.ActiveSession
 
   If (session Is Nothing) Then
      app.PrintText tabConsole, "CreateMPSession failed"
   Else
      Set group_list = session.MPGroupList
      If (group_list Is Nothing) Then
         app.PrintText tabConsole, "Current session is not multiprocessor!"
      Else
         On Error GoTo CreateMPGroupFailed
         Set group = group_list.CreateMPGroup( "My Group Name" )
         Rem добавление всех доступных процессоров в группу
         For i=0 To session.ProcessorList.Count-1
            group.AddProcToGroup i
         Next
         group.MPStepAsm
         group_list.RemoveGroup "My Group Name"
      End If
   End If
 
   Exit Sub
 
CreateMPGroupFailed:
   app.PrintText tabConsole, "CreateMPGroup failed"

[ADspMPGroupList]

Этот объект представляет набор групп Multiprocessor (MP). Он позволяет просматривать список набора, добавлять в него группы MP, или удалять их.

Свойства

Count
Item
_NewEnum

Методы

CreateMPGroup
RemoveGroup

Следующий пример предполагает, что текущая сессия многопроцессорная, и здесь демонстрируется вывод в окно консоли списка имен групп MP.

C++/ATL:

IADspApplicationPtr pApp;

pApp.CreateInstance( "VisualDSP.ADspApplication" ); IADspDebugSessionPtr pSession = pApp->ActiveSession; IADspMPGroupListPtr pMPGroupList = pSession->MPGroupList;

if ( NULL == pMPGroupList ) { pApp->PrintText( tabConsole, "Current session is not multiprocessor" ); }
else { for ( long i = 0; i < pMPGroupList->Count; i++ ) { IADspMPGroupPtr pMPGroup = pMPGroupList->GetItem( i ); pApp->PrintText( tabConsole, pMPGroup->Name ); } }

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim mpgroup_list As ADspMPGroupList
Dim mpgroup As ADspMPGroup

Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set mpgroup_list = session.MPGroupList
If (mpgroup_list Is Nothing) Then app.PrintText tabConsole, "Current session is not multiprocessor"
Else
   For Each mpgroup In mpgroup_list
      app.PrintText tabConsole, mpgroup.Name
   Next
End If

[ADspMPGroupInfo]

Этот объект представляет информацию о мультипроцессорной группе Multiprocessor (MP), которая была ранее создана в сессии отладки. Объект позволяет получить информацию о группе MP наподобие имени и списка процессоров в группе.

Свойства

Name
ProcessorList

[ADspMPGroupInfoList]

Объект представляет список информации о мультипроцессорных группах.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует печать в окне консоли списка сессий и списка мультипроцессорных групп (если они есть) для каждой сессии.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[256];

pApp.CreateInstance( "VisualDSP.ADspApplication" ); IADspSessionListPtr pSessionList = pApp->SessionList;

for ( long i = 0; i < pSessionList->Count; i++ ) { IADspSessionPtr pSession = pSessionList->GetItem( i ); pApp->PrintText( tabConsole, pSession->Name ); IADspMPGroupInfoListPtr pMPGroupInfoList = pSession->MPGroupInfoList; if ( pMPGroupInfoList != NULL) { for ( long j = 0; j < pMPGroupInfoList->Count; j++ ) { IADspMPGroupInfoPtr pMPGroupInfo = pMPGroupInfoList->GetItem( j ); sprintf( szBuffer, " MP Group Name = %s", (char *) pMPGroupInfo->Name ); pApp->PrintText( tabConsole, szBuffer ); } } }

Visual Basic:

Dim app As Application
Dim session_list As ADspSessionList
Dim session As ADspSession

Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session_list = app.SessionList

For Each session In session_list app.PrintText tabConsole, session.Name If ( not session.MPGroupInfoList is Nothing ) Then For Each mpgroupinfo In session.MPGroupInfoList app.PrintText tabConsole, " MP Group Name = " + mpgroupinfo.Name Next End if
Next

Объект представляет окно вывода IDDE. Он позволяет печатать текст в окно на закладке (консоль console или окно результата сборки build window) разными цветами, получить содержимое окна закладки, получить/установить состояние видимости выходного окна, получить/установить активную закладку, и сливать события, которые оповещают клиентов о смене состояния окна закладок, когда это изменение произойдет.

Следующий пример демонстрирует отображение "Hello World!" в окне закладки консоли.

C++/ATL:

IADspApplicationPtr pApp;
IADspOutputWindowPtr pOutputWindow;

pApp.CreateInstance( "VisualDSP.ADspApplication" ); pOutputWindow = pApp->OutputWindow; pOutputWindow->PrintText( "Hello World!", textTypeConsoleNormal );

Visual Basic:

Dim app As Application
Dim outputWindow As ADspOutputWindow

Set app = CreateObject( "VisualDSP.ADspApplication" )
Set outputWindow = app.OutputWindow outputWindow.PrintText "Hello World!", textTypeConsoleNormal

Свойства

ActiveTab
Visible

Методы

ClearText
GetText
PrintText

События

OnTextCleared
OnTextPrinted

Объект позволяет получить доступ к генерации данных PGO [2] во время работы цели отладки target (обычно это симулятор).

Имейте в виду, что этот объект реализован во внешнем dll-файле PgoEngine.dll, размещенном в папке System каталога установки VisualDSP, и не напрямую в IDDE. Если Вы используете среду разработки, которая требует библиотеку типов (C++ или .NET например), то должны указать этот библиотечный файл вместо Idde.exe. Обратите внимание, что ссылка на этот объект должен быть получен из свойства PluginList объекта ADspApplication, как это показано в примерах ниже.

Следующий пример демонстрирует загрузку программы и сбор данных PGO, которые можно позже передать обратно компилятору, чтобы расширить возможности оптимизации.

C++/ATL:

IADspApplicationPtr pApp( "VisualDSP.ADspApplication" );
IADspProcessorPtr pProcessor = pApp->ActiveSession->ActiveProcessor;
IADspPgoPluginPtr pPgoPlugin = pApp->PluginList->GetItem("PGO Engine")->Open();

// Получить менеджер PGO для активного процессора: IADspPgoManagerPtr pPgoMgr = pPgoPlugin->PgoManager( (LPDISPATCH)pProcessor );

// Загрузить приложение, которое было собрано с опцией -pguide: pProcessor->LoadProgram( "MyApp.dxe" );

// Установка выходного файла: pPgoMgr->OutputFileName = "MyApp.pgo";

// Запуск сбора данных: pPgoMgr->Enabled = TRUE;

// Запуск приложения, чтобы сделать сбор данных: pProcessor->Run( TRUE );

// Запрет сбора данных (и сброс их в выходной файл): pPgoMgr->Enabled = FALSE;

VBScript:

Set app = CreateObject( "VisualDSP.ADspApplication" )
Set proc = app.ActiveSession.ActiveProcessor
Set pgoPlugin = app.PluginList("PGO Engine").Open()

' Получить менеджер PGO для активного процессора:
Set pgoMgr = pgoPlugin.PgoManager( proc )

' Загрузить приложение, которое было собрано с опцией -pguide: proc.LoadProgram "MyApp.dxe"

' Установка выходного файла: pgoMgr.OutputFileName = "MyApp.pgo"

' Запуск сбора данных: pgoMgr.Enabled = True

' Запуск приложения, чтобы сделать сбор данных: proc.Run True

' Запрет сбора данных (и сброс их в выходной файл): pgoMgr.Enabled = False

Свойства

Enabled
OutputFileName

[ADspPlatform]

Объект представляет платформу в debug target. Это позволяет получить информацию о платформе наподобие имени, списка процессоров, и информацию о том, поддерживает ли платформа многопроцессорность.

Платформа относится к конфигурации процессоров DSP, с которой обменивается данными target. Для симуляции платформа это обычно один или несколько DSP одного и того же типа. Для эмуляции Вы указываете платформу с помощью конфигуратора VisualDSP++. Эта платформа может быть любой комбинацией устройств. Платформа представляет аппаратуру, в которой находится оно или большее количество устройств. Вы обычно определяете платформу для конкретной цели.

Свойства

IsLicensed
Multiprocessor
Name
ProcessorNameList
Type

[ADspPlatformList]

Объект представляет набор платформ определенной цели отладки (debug target).

Свойства

Count
Item
_NewEnum

Следующий пример показывает печать в окне консоли списка установленных целей отладки (debug target), платформ в каждой debug target, и свойства каждой платформы.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
pApp.CreateInstance( "VisualDSP.ADspApplication" );

// Получение списка установленных целей отладки (debug target): IADspDebugTargetListPtr pDebugTargetList = pApp->DebugTargetList;

// Проход по списку целей отладки и получение имени каждой цели:
for ( long i = 0; i < pDebugTargetList->Count; i++ ) { IADspDebugTargetPtr pDebugTarget = pDebugTargetList->GetItem( i ); pApp->PrintText( tabConsole, pDebugTarget->Name );
// Получение списка платформ цели: IADspPlatformListPtr pPlatformList = pDebugTarget->PlatformList;
// Проход по списку платформ каждой цели и отображение имени // каждой платформы: for ( long j = 0; j < pPlatformList->Count; j++ ) { IADspPlatformPtr pPlatform = pPlatformList->GetItem( j ); sprintf( szBuffer, " Platform Name = %s", (char *) pPlatform->Name ); pApp->PrintText( tabConsole, szBuffer ); } }

Visual Basic:

Dim app As Application
Dim debug_target_list As ADspDebugTargetList
Dim debug_target As ADspDebugTarget
Dim platform_list As ADspPlatformList
Dim platform As ADspPlatform

Set app = CreateObject( "VisualDSP.ADspApplication" )

Rem Получение списка установленных целей отладки (debug target):
Set debug_target_list = app.DebugTargetList

Rem Проход по списку целей отладки и получение имени каждой цели:
For Each debug_target In debug_target_list app.PrintText tabConsole, debug_target.Name
Rem Получение списка платформ цели: Set platform_list = debug_target.PlatformList
Rem Проход по списку платформ каждой цели и отображение имени Rem каждой платформы: For Each platform In platform_list app.PrintText tabConsole, " Platform Name = " + platform.Name Next
Next

[ADspPlugin]

Объект представляет зарегистрированный плагин VisualDSP++ plugin. Плагины это DLL, которые интегрированы с VisualDSP++ IDDE, и предоставляют расширенный функционал, путем отображения окон для пользователя или мониторинга и ответа на события системы (system events).

Объект ADspPlugin позволяет клиенту прочитать информацию о плагине, которую он предоставляет, открыть и закрыть плагин, и обмениваться информацией с запущенным плагином через его собственные интерфейсы автоматизации (automation interface).

Свойства

AllowMultipleInstances
CLSID
DebugProcessors
Description
Enabled
FileExtensions
Instances
MenuDescription
MenuHelpPath
MenuItem
Name
ProjectProcessors
StartupStyle
WindowHelpPath
WindowType

Методы

Open
Close

События

OnPluginOpened
OnPluginClosed

Следующий пример демонстрирует печать в окне консоли информации о текущих зарегистрированных плагинах.

C++/ATL:

USES_CONVERSION;
TCHAR szText[4096]; IADspApplicationPtr pApp("VisualDSP.ADspApplication"); IADspPluginListPtr pPluginList = pApp->PluginList;

for( long i=0; i < pPluginList->Count; i++ ) { IADspPluginPtr pPlugin = pPluginList->GetItem( i ); sprintf( szText, "\n Plugin Name: %s\n" " Description: %s\n" " Enabled: %d\n" " CLSID: %s\n" "MultipleInstances: %d\n" " StartupStyle: %d\n" " WindowType: %d\n" " WindowHelpPath: %s\n" " MenuItem: %s\n" " MenuHelpPath: %s\n" " MenuDescription: %s ", OLE2A(pPlugin->Name), OLE2A(pPlugin->Description), pPlugin->Enabled, OLE2A(pPlugin->CLSID), pPlugin->AllowMultipleInstances, pPlugin->StartupStyle, pPlugin->WindowType, OLE2A(pPlugin->WindowHelpPath), OLE2A(pPlugin->MenuItem), OLE2A(pPlugin->MenuHelpPath), OLE2A(pPlugin->MenuDescription) ); pApp->PrintText( tabConsole, szText ); }

Visual Basic:

Dim app As Application
Dim plugin As ADspPlugin

Set
app = CreateObject("VisualDSP.ADspApplication")

For Each plugin In app.PluginList app.PrintText tabConsole, vbCrLf & " Plugin Name: " & plugin.Name app.PrintText tabConsole, " Description: " & plugin.Description app.PrintText tabConsole, " Enabled: " & plugin.Enabled app.PrintText tabConsole, " CLSID: " & plugin.CLSID app.PrintText tabConsole, "MultipleInstances: " & plugin.AllowMultipleInstances app.PrintText tabConsole, " StartupStyle: " & plugin.StartupStyle app.PrintText tabConsole, " WindowType: " & plugin.WindowType app.PrintText tabConsole, " WindowHelpPath: " & plugin.WindowHelpPath app.PrintText tabConsole, " MenuItem: " & plugin.MenuItem app.PrintText tabConsole, " MenuHelpPath: " & plugin.MenuHelpPath app.PrintText tabConsole, " MenuDescription: " & plugin.MenuDescription
Next

[ADspPluginList]

Объект представляет набор зарегистрированных в VisualDSP++ плагинов.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует печать в окне консоли списка зарегистрированных плагинов.

C++/ATL:

IADspApplicationPtr pApp("VisualDSP.ADspApplication");
IADspPluginListPtr pPluginList = pApp->PluginList;

for( long i=0; i < pPluginList->Count; i++ ) { IADspPluginPtr pPlugin = pPluginList->GetItem( i ); pApp->PrintText( tabConsole, pPlugin->Name ); }

Visual Basic:

Dim app As Application
Dim plugin As ADspPlugin

Set app = CreateObject( "VisualDSP.ADspApplication" )

For Each plugin In app.PluginList app.PrintText tabConsole, plugin.Name
Next

[ADspProcessor]

Объект представляет процессор. Это позволяет получить доступ к регистрам, памяти, стекам и точкам останова процессора. Также объект позволит Вам управлять процессором с помощью операций шага (step), запуска на выполнение кода (run), остановки (halt) и сброса (reset).

Свойства

BreakpointList
CompilerAnnotationList
HardwareStackList
MemorySegmentList
MemoryTypeList
Name
ProfileSessionList
RegisterList
SiliconRevision
SoftwareStack
State
Type
WatchpointList
InterruptList

Методы

EvaluateToLong
EvaluateToString
GetAddressFromFile
GetChildExpression
GetFileFromAddress
Halt
LoadProgram
LoadProgramUnblocked
LoadSymbols
Reset
Restart
Run
SetExpression
StepAsm
StepIn
StepOut
StepOver

События

OnFileLoadCanceled
OnFileLoad
OnFileLoaded
OnHalted
OnModified
OnReset
OnRunning
OnStepping
OnSymbolLoad
OnSymbolsLoaded
OnUnknown

Следующий пример показывает загрузку программы в процессор и запуск её.

C++/ATL:

IADspApplicationPtr pApp;

pApp.CreateInstance( "VisualDSP.ADspApplication" ); IADspDebugSessionPtr pSession = pApp->ActiveSession; IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );

try
{ pProcessor->LoadProgram( "c:\\examples\\test.dxe" ); pProcessor->Run( TRUE ); }
catch ( _com_error err ) { pApp->PrintText( tabConsole, "Failed to load program" ); }

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim processor As ADspProcessor

Set app = CreateObject( "VisualDSP.ADspApplication" ) Set session = app.ActiveSession Set processor = session.ProcessorList( 0 )

On Error GoTo LoadFailed processor.LoadProgram "c:\examples\test.dxe" processor.Run True

Exit Sub

LoadFailed
: app.PrintText tabConsole, "Failed to load program"

[ADspProcessorList]

Этот объект представляет список процессоров в текущей сессии отладки. Однопроцессорная сессия будет иметь один процессор в списке. В многопроцессорной сессии процессоров в списке будет несколько.

Свойства

Count
Item
_NewEnum

Следующий пример демонстрирует печать в окне консоли списка имен и типов всех процессоров в текущей сессии.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorListPtr pProcessorList = pSession->ProcessorList;
 
for ( long i = 0; i < pProcessorList->Count; i++ )
{
   IADspProcessorPtr pProcessor = pProcessorList->GetItem( i );
   sprintf( szBuffer, "Name = %s  Type = %s",
            (char *) pProcessor->Name,
            (char *) pProcessor->Type );
   pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim processor_list As ADspProcessorList
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor_list = session.ProcessorList
 
For Each processor In processor_list
   app.PrintText tabConsole, "Name = " + processor.Name + _
                             "  Type = " + processor.Type
Next

[ADspProfileExecutionUnit]

Объект представляет адрес, который обрабатывается профайлером. Это используется для получения результатов профайлинга по указанному адресу.

Свойства

Address
SampleCount
SampleCount64

Методы

GetMetricCount
GetMetricCount64

[ADspProfileExecutionUnitList]

Объект представляет список объектов ADspProfileExecutionUnit. Он составляется программой профилировщика, и используется для получения результатов профайлинга для каждого адреса, который обрабатывается. Смена сессии профилировщика удаляет все объекты из этого списка. Объекты в этом списке также удаляются вызовом ClearProfileData.

Свойства

ArrayOfUnits
Count
Item
_NewEnum

Методы

GetExecutionUnitByAddress

Пример:

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[300];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspProfileSessionListPtr pProfileSessionList = pProcessor->ProfileSessionList;
 
IADspProfileSessionPtr pProfileSession = pProfileSessionList->GetItem( CComVariant( 0 ) );
pProfileSession->MemoryName = pProfileSessionList->MemoryNames->Item(0);
 
pProfileSession->FilterType = profileEntireMemory;
pProfileSession->DebugSamplesOnly = TRUE;
 
pProcessor->LoadProgram("C:\\test\\debug\\mytest.dxe");
pProcessor->Run(TRUE);
IADspProfileExecutionUnitListPtr pExecutionUnitList = pProfileSession->ExecutionUnitList;
 
for( long i = 0; i < pExecutionUnitList->Count; i++ )
{
    IADspProfileExecutionUnitPtr pExecutionUnit = pExecutionUnitList->GetItem(i);
    sprintf(szBuffer, "0x%x,  %d", pExecutionUnit->Address, pExecutionUnit->SampleCount);
    pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim profile_session_list As ADspProfileSessionList
Dim processor As ADspProcessor
Dim profile_session As ADspProfileSession
Dim execution_unit_list As ADspProfileExecutionUnitList
Dim execution_unit As ADspProfileExecutionUnit
 
Set app = CreateObject("VisualDSP.ADspApplication")
Set session = app.ActiveSession
Set processor = session.ProcessorList(0)
Set profile_session_list = processor.ProfileSessionList
Set profile_session = profile_session_list(0)
 
profile_session.MemoryName = profile_session_list.MemoryNames(0)
profile_session.DebugSamplesOnly = True
profile_session.FilterType = profileEntireMemory
 
processor.LoadProgram ("C:\testlab\generic\test\debug\testsave.dxe")
processor.Run (True)
processor.Run (True)
 
Set execution_unit_list = profile_session.ExecutionUnitList
For Each execution_unit In execution_unit_list
   app.PrintText tabConsole, "0x" + Hex(execution_unit.Address) + _
                             ",  " + CStr(execution_unit.SampleCount)
Next

[ADspProfileFunction]

Объект представляет функцию. Он содержит имя функции, имя файла, начальный адрес, конечный адрес и счетчик выборок (sample count). StartAddress, EndAddress и SampleCount доступны только если объект находится в FunctionList сессии профайлинга, или в диапазоне FunctionList.

Свойства

EndAddress
FileName
Name
SampleCount
SampleCount64
StartAddress

Методы

GetMetricCount
GetMetricCount64

[ADspProfileFunctionList]

Этот объект представляет список объектов ADspProfileFunction. ADspProfileFunctionList используется для выбора нужных функций для профайлинга, а также для получения результатов профайлинга функций. Смена сессии профайлинга удаляет все результаты профайлинга, сохраненные в объектах этого списка. Результаты профайлинга, сохраненные в этих объектах этого списка, также удаляются вызовом ClearProfileData.

Свойства

ArrayOfFunctions
Count
Item
_NewEnum

Методы

Add
Remove

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[300];
pApp.CreateInstance( "VisualDSP.ADspApplication" ); IADspDebugSessionPtr pSession = pApp->ActiveSession; IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) ); IADspProfileSessionListPtr pProfileSessionList = pProcessor->ProfileSessionList;
IADspProfileSessionPtr pProfileSession = pProfileSessionList->GetItem( CComVariant( 0 ) ); pProfileSession->MemoryName = pProfileSessionList->MemoryNames->Item(0);
pProfileSession->FilterType = profileFunctions; pProfileSession->DebugSamplesOnly = TRUE;
pProcessor->LoadProgram("C:\\test\\debug\\mytest.dxe");
IADspSymbolListPtr pSymbolList = pProcessor->MemoryTypeList->FindSymbol( "main" ); IADspFunctionListPtr pLoadedFunctions = pSymbolList->GetItem(0)->MemoryType->FunctionList; IADspProfileFunctionListPtr pFunctionList = pProfileSession->FunctionList;

for ( long i = 0; i < pLoadedFunctions->Count; i++ ) { IADspFunctionPtr pFunc = pLoadedFunctions->GetItem(i);
IADspProfileFunctionPtr pProfileFunc; pProfileFunc.CreateInstance( "VisualDSP.ADspProfileFunction" ); pProfileFunc->Name = pFunc->Name; pProfileFunc->FileName = pFunc->FileName;
pFunctionList->Add(pProfileFunc); }
pProcessor->Run(TRUE);

for ( i = 0; i < pFunctionList->Count; i++) { IADspProfileFunctionPtr pProfileFunc = pFunctionList->GetItem(i);
BSTR pszTmp = pProfileFunc->Name; CString csFuncName = pszTmp; ::SysFreeString(pszTmp);
pszTmp = pProfileFunc->FileName; CString csFileName = pszTmp; ::SysFreeString(pszTmp);
sprintf(szBuffer, "\"%s\" in file \"%s\" has sample count %d", csFuncName, csFileName, pProfileFunc->SampleCount); pApp->PrintText( tabConsole, szBuffer ); }

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim profile_session_list As ADspProfileSessionList
Dim processor As ADspProcessor
Dim profile_session As ADspProfileSession
Dim symbol_list As ADspSymbolList
Dim loaded_functions As ADspFunctionList
Dim func As ADspFunction
Dim function_list As ADspProfileFunctionList
Dim profile_function As ADspProfileFunction

Set app = CreateObject("VisualDSP.ADspApplication")
Set session = app.ActiveSession
Set processor = session.ProcessorList(0)
Set profile_session_list = processor.ProfileSessionList
Set profile_session = profile_session_list(0)
profile_session.MemoryName = profile_session_list.MemoryNames(0) profile_session.DebugSamplesOnly = True profile_session.FilterType = profileFunctions
processor.LoadProgram ("C:\testlab\generic\test\debug\testsave.dxe")

Set
symbol_list = processor.MemoryTypeList.FindSymbol("main")
Set loaded_functions = symbol_list(0).MemoryType.FunctionList
Set profile_function = New ADspProfileFunction
Set function_list = profile_session.FunctionList

For Each func In loaded_functions Set profile_function = New ADspProfileFunction profile_function.Name = func.Name profile_function.FileName = func.FileName function_list.Add profile_function
Next
processor.Run (True)

For Each profile_function In function_list app.PrintText tabConsole, """" + profile_function.Name + _ """" + " in file " + _ """" + profile_function.FileName + _ """" + " has sample count " + CStr(profile_function.SampleCount)
Next

[ADspProfileRange]

Объект представляет диапазон адресов профайлинга. Он содержит начальный адрес, конечный адрес, счетчик выборок (sample count) и список функций, попадающих в этот диапазон адресов. FunctionList и SampleCount доступны только если объект находится в AddressRangeList.

Свойства

EndAddress
FunctionList
Name
SampleCount
SampleCount64
StartAddress

Методы

GetMetricCount
GetMetricCount64

[ADspProfileRangeList]

Этот объект представляет список объектов ADspProfileRange. Он используется как для установки диапазонов профайлинга, так и получения результатов из этих диапазонов. Смена сессии профайлинга удаляет все результаты профайлинга, сохраненные в объектах списка. Результаты профайлинга, сохраненные в этом списке, также удаляются вызовом ClearProfileData.

Свойства

ArrayOfRanges
Count
Item
_NewEnum

Методы

Add
AddRanges
Remove
RemoveAll

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[300];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspProfileSessionListPtr pProfileSessionList = pProcessor->ProfileSessionList;
 
IADspProfileSessionPtr pProfileSession = pProfileSessionList->GetItem( CComVariant( 0 ) );
pProfileSession->MemoryName = pProfileSessionList->MemoryNames->Item(0);
 
pProfileSession->FilterType = profileRanges;
pProfileSession->DebugSamplesOnly = TRUE;
 
pProcessor->LoadProgram("C:\\test\\debug\\mytest.dxe");
 
IADspProfileRangeListPtr pRangeList = pProfileSession->AddressRangeList;
 
IADspProfileRangePtr pProfileRange;
pProfileRange.CreateInstance( "VisualDSP.ADspProfileRange" );
 
IADspSymbolListPtr pSymbolList = pProcessor->MemoryTypeList->FindSymbol( "foo" );
long lStart = pSymbolList->GetItem(0)->Address;
pProfileRange->StartAddress = lStart;
 
pSymbolList = pProcessor->MemoryTypeList->FindSymbol( "main" );
pProfileRange->EndAddress = pSymbolList->GetItem(0)->Address;
 
pRangeList->Add(pProfileRange);
 
pProfileRange.CreateInstance( "VisualDSP.ADspProfileRange" );
pProfileRange->StartAddress = lStart;
 
pSymbolList = pProcessor->MemoryTypeList->FindSymbol( "bar" );
pProfileRange->EndAddress = pSymbolList->GetItem(0)->Address;
 
pRangeList->Add(pProfileRange);
 
pProcessor->Run(TRUE);
 
for (long i = 0; i < pRangeList->Count; i++)
{
   IADspProfileRangePtr pRange = pRangeList->GetItem(i);
   sprintf(szBuffer, "The range starts at 0x%x,  ends at 0x%x,  has sample count %d",
                     pRange->StartAddress, pRange->EndAddress, pRange->SampleCount);
   pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim profile_session_list As ADspProfileSessionList
Dim processor As ADspProcessor
Dim profile_session As ADspProfileSession
Dim symbol_list As ADspSymbolList
Dim range_list As ADspProfileRangeList
Dim range As ADspProfileRange
 
Set app = CreateObject("VisualDSP.ADspApplication")
Set session = app.ActiveSession
Set processor = session.ProcessorList(0)
Set profile_session_list = processor.ProfileSessionList
Set profile_session = profile_session_list(0)
 
profile_session.MemoryName = profile_session_list.MemoryNames(0)
profile_session.DebugSamplesOnly = True
profile_session.FilterType = profileRanges
 
processor.LoadProgram ("C:\\testlab\\generic\\test\\debug\\testsave.dxe")
 
Set range_list = profile_session.AddressRangeList
 
Set range = New ADspProfileRange
Set symbol_list = processor.MemoryTypeList.FindSymbol("foo")
range.StartAddress = symbol_list(0).Address
Set symbol_list = processor.MemoryTypeList.FindSymbol("main")
range.EndAddress = symbol_list(0).Address
range_list.Add range
 
Set range = New ADspProfileRange
Set symbol_list = processor.MemoryTypeList.FindSymbol("foo")
range.StartAddress = symbol_list(0).Address
Set symbol_list = processor.MemoryTypeList.FindSymbol("bar")
range.EndAddress = symbol_list(0).Address
range_list.Add range
 
processor.Run (True)
 
For Each range In range_list
   app.PrintText tabConsole,
      "The range starts at 0x" + Hex(range.StartAddress) + _
      ", ends at 0x" + Hex(range.EndAddress) + _
      ", with sample count " + CStr(range.SampleCount)
Next 

[ADspProfileSession]

Этот объект представляет сессию профайлера. При создании устанавливает настройки по умолчанию. Пользователь должен сконфигурировать нужные настройки перед запуском профайлинга, такие как выбор типа памяти, тип фильтра, опциональные метрики, и т. д.

Свойства

AddressRangeList
DebugSamplesOnly
ElapsedTime
Enabled
ExecutionUnitList
FilterType
FunctionList
MemoryName
Metrics
Name
StartTime
TotalSampleCount
TotalSampleCount64
Visible

Методы

AverageProfileData
ClearProfileData
DisplayAddress
DisplayFile
DisplayFunction
LoadProfileData
MergeProfileData
SaveProfileData

События

OnCloseProfileSession
OnProfileCleared
OnProfileLoaded
OnProfileMerged
OnProfileSaved

[ADspProfileSessionList]

Этот объект представляет список сессий профайлера, созданных для процессора. Это главным образом используется для создания новой сессии профайлинга, и перечисления всех сессий профайлинга.

Свойства

Count
Item
MemoryNames
_NewEnum

Методы

CreateSession
GetAvailableMetrics
RemoveSession

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[300];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspProfileSessionListPtr pProfileSessionList = pProcessor->ProfileSessionList;
 
for ( long i = 0; i < pProfileSessionList->Count; i++ )
{
   IADspProfileSessionPtr pProfileSession = pProfileSessionList->GetItem( i );
   BSTR pszName = pProfileSession->Name;
   CString csName = pszName;
   ::SysFreeString(pszName);
 
   sprintf( szBuffer, "Profile session \"%s\" is %s",
            csName, pProfileSession->Enabled?"enabled":"disabled");
   pApp->PrintText( tabConsole, szBuffer );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim profile_session_list As ADspProfileSessionList
Dim profile_session As ADspProfileSession
Dim processor As ADspProcessor
Dim enabled As String
 
Set app = CreateObject("VisualDSP.ADspApplication")
Set session = app.ActiveSession
Set processor = session.ProcessorList(0)
Set profile_session_list = processor.ProfileSessionList
 
For Each profile_session In profile_session_list
    If profile_session.Enabled Then
        enabled = "enabled"
    Else
        enabled = "disabled"
    End If
 
    app.PrintText tabConsole, "Profile session " + """" + _
                              profile_session.Name + """" + _
                              " is " + enabled
Next

Объект используется для получения состояния прогресса разблокированной операции наподобие получения содержимого памяти, установки содержимого памяти, или загрузки программы. Он также используется для отмены этой операции.

Следующий пример демонстрирует запуск чтения памяти.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspMemoryTypeListPtr pMemoryTypeList = pProcessor->MemoryTypeList;
 
try
{
   IADspMemoryTypePtr pMemoryType = pMemoryTypeList->GetItem( "Data(DM) Memory" );
   IADspProgressPtr pProgress;
   pProgress.CreateInstance( "VisualDSP.ADspProgress" );
   try
   {
      pMemoryType->GetMemoryUnblocked( 0x30000, // начальный адрес
                                       10000,   // количество читаемых
                                       1,       // шаг
                                       pProgress, // объект прогресса
                                       1024 );  // размер блока
   }
   catch ( _com_error err )
   {
      pApp->PrintText( tabConsole, "GetMemoryUnblocked failed" );
   }
}
catch ( _com_error err )
{
   pApp->PrintText(tabConsole,"Processor doesn't have memory named \"Data(DM) Memory\"");
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim processor As ADspProcessor
   Dim memory_type_list As ADspMemoryTypeList
   Dim memory_type As ADspMemoryType
   Dim progress As ADspProgress
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set session = app.ActiveSession
   Set processor = session.ProcessorList( 0 )
   Set memory_type_list = processor.MemoryTypeList
 
   On Error GoTo GetItemFailed
   Set memory_type = memory_type_list( "Data(DM) Memory" )
 
   On Error GoTo GetMemoryUnblockedFailed
   Set progress = new ADspProgress
   memory_type.GetMemoryUnblocked &h30000, 10000, 1, progress
 
   Exit Sub
 
GetItemFailed:
   app.PrintText tabConsole, "Processor doesn't have memory named ""Data(DM) Memory""
   Exit Sub
 
GetMemoryUnblockedFailed:
   app.PrintText tabConsole, "GetMemoryUnblocked failed"

Свойства

PercentComplete

Методы

Cancel

События

OnCanceled
OnError
OnGetMemoryArrayCompleted
OnGetMemoryCompleted
OnProgress
OnSetMemoryArrayCompleted
OnSetMemoryCompleted

[ADspProject]

Объект представляет проект процессора DSP, который является набором исходных файлов, используемых в сборке проекта. Он обрабатывает большинство операций, относящихся к проекту, включая переключение конфигураций, обновление зависимостей (updating dependencies), сборку проекта (build), экспортирование makefile, изменение процессора или типа target, и т. д.

Свойства

Active
ActiveConfiguration
Configurations
Count
DependentProjectList
FileName
IntermediateDirectory
Item
Modified
Name
_NewEnum
OutputDirectory
PostBuildCommands
PostBuildDescription
PreBuildCommands
PreBuildDescription
Processor
ProjectDirectory
SiliconRevision
TargetFileNameList
TargetProcessorList
TargetType
TargetTypeList
ToolList

Методы

AddFile
AddFolder
Build
BuildAll
Clean
CreateConfiguration
ExportToMakefile
GetCustomData
RemoveConfiguration
RemoveFile
RemoveFolder
Save
SetCustomData
StopBuild
UpdateDependencies

События

OnBuild
OnBuildDone
OnBuildStopped
OnBuildFile
OnBuildFileDone
OnBuildFileStopped
OnBuildTargetChanged
OnClean
OnCleanDone
OnConfigurationChanged
OnExportMakefile
OnExportMakefileDone
OnFileAdded
OnFileRemoved
OnOptionsChanged
OnProcessorChanged
OnSaveProject
OnUpdateDependencies
OnUpdateDependenciesDone

Следующий пример демонстрирует создание нового проекта, добавление файла в проект и затем сборку проекта.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
 
// Не будет показываться ни один диалог:
pApp->Interactive = FALSE;
 
IADspProjectListPtr pProjectList = pApp->ProjectList;
 
try
{
   IADspProjectPtr pProject=pProjectList->CreateProject("My Project",
                                                        "c:\\examples\\test.dpj");
   // Установка опций проекта:
   pProject->PutProcessor( "ADSP-21065L" );
   pProject->PutTargetType( "Executable file" );
 
   // Добавление исходного файла в проект:
   pProject->AddFile( "c:\\examples\\test.c", "" );
 
   // Запуск сборки проекта:
   pProject->Build( TRUE );
}
catch ( _com_error err )
{
   pApp->PrintText( tabConsole, "Failed to create project" );
}

Visual Basic:

   Dim app As Application
   Dim project_list As ADspProjectList
   Dim project As ADspProject
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
 
   Rem Не показывать диалоги:
   app.Interactive = False
 
   Set project_list = app.ProjectList
 
   On Error GoTo CreateProjectFailed
   Set project = project_list.CreateProject( "My Project",
                                             "c:\examples\test.dpj" )
   Rem Установка опций проекта:
   project.Processor = "ADSP-21065L"
   project.TargetType = "Executable file"
 
   Rem Добавление исходного файла в проект:
   project.AddFile "c:\examples\test.c", ""
 
   Rem Запуск сборки проекта:
   project.Build True
   Exit Sub
 
CreateProjectFailed:
   app.PrintText tabConsole, "Failed to create project"

[ADspProjectList]

Этот объект представляет коллекцию проектов. Он позволит Вам добавить существующий проект, создать новый проект, удалить проект из списка или получить информацию о том, какой проект в настоящее время активен. В настоящий момент это может быть только один проект в списке.

Свойства

ActiveProject
Count
FileName
Item
_NewEnum

Методы

AddProject
Close
CreateProject
Open
RemoveProject
Save
SaveAs

События

OnProjectActivated
OnProjectAdded
OnProjectClose
OnProjectCreated
OnProjectRemoved

Следующий пример демонстрирует печать в окне консоли списка имен проектов.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspProjectListPtr pProjectList = pApp->ProjectList;
 
for ( long i = 0; i < pProjectList->Count; i++ )
{
   IADspProjectPtr pProject = pProjectList->GetItem( i );
   pApp->PrintText( tabConsole, pProject->Name );
}

Visual Basic:

Dim app As Application
Dim project_list As ADspProjectList
Dim project As ADspProject
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set project_list = app.ProjectList
 
For Each project In project_list
   app.PrintText tabConsole, project.Name
Next

Объект представляет окно проекта в IDDE. Это позволяет Вам получить/установить список выбранных файлов или проектов, получить/установить состояние видимости окна проекта, и выбрасывать события, которые оповещают клиентов об изменении выбора.

Следующий пример демонстрирует, как скрыть окно проекта.

C++/ATL:

IADspApplicationPtr pApp;
IADspProjectWindowPtr pProjectWindow;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
pProjectWindow = pApp->ProjectWindow;
pProjectWindow->Visible = FALSE;

Visual Basic:

Dim app As Application
Dim projectWindow As ADspProjectWindow
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set projectWindow = app.ProjectWindow
projectWindow.Visible = False

Свойства

SelectedFiles
SelectedProjects
Visible

События

OnExtendContextMenu
OnSelectionChanged

[ADspRegister]

Объект представляет регистр процессора. Это позволяет Вам опросить атрибуты регистра наподобие имени, ширины или описания регистра. Также этот объект позволяет Вам получить или установить значение регистра.

Свойства

BitPosition
Description
GroupName
Name
ParentRegister
Value
Width

Следующий пример демонстрирует чтение значения регистра PC и отображение этого значения в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspRegisterListPtr pRegisterList = pProcessor->RegisterList;
 
if ( NULL == pRegisterList )
{
   pApp->PrintText( tabConsole, "Target does not have any registers" );
}
else
{
   try
   {
      IADspRegisterPtr pRegister = pRegisterList->GetItem( "PC" );
      IADspValuePtr pValue = pRegister->GetValue();
      sprintf( szBuffer, "Value = %s  Width = %d",
               (char *) pValue->ToString( "Hexadecimal" ), pValue->Width );
      pApp->PrintText( tabConsole, szBuffer );
   }
   catch ( _com_error err )
   {
      pApp->PrintText( tabConsole, "Target does not have a PC register" );
   }
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim register_list As ADspRegisterList
   Dim register As ADspRegister
   Dim processor As ADspProcessor
   Dim value As ADspValue
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set session = app.ActiveSession
   Set processor = session.ProcessorList( 0 )
   Set register_list = processor.RegisterList
 
   If (register_list Is Nothing) Then
       app.PrintText tabConsole, "Target does not have any registers"
   Else
      On Error GoTo GetItemFailed
      Set register = register_list( "PC" )
      Set value = register.Value
      app.PrintText tabConsole, "Value = " + value.ToString( "Hexadecimal" ) + _
                                "  Width = " + CStr( value.Width )
   End If
 
   Exit Sub
 
GetItemFailed:
   app.PrintText tabConsole, "Target does not have a PC register"

[ADspRegisterList]

Объект представляет набор всех регистров процессора. Объект позволяет получить отдельные регистры или прочитать/записать блок регистров.

Свойства

Count
Item
_NewEnum

Методы

GetRegisterIndexByName
GetRegisterValues
SetRegisterValues

Следующий пример показывает печать в окне консоли список регистров и их свойств.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspRegisterListPtr pRegisterList = pProcessor->RegisterList;
 
if ( NULL == pRegisterList )
{
    pApp->PrintText( tabConsole, "Target does not have any registers" );
}
else
{
   for ( long i = 0; i < pRegisterList->Count; i++ )
   {
      IADspRegisterPtr pRegister = pRegisterList->GetItem( i );
      sprintf( szBuffer, "Name = %s  Width = %ld",
               (char *) pRegister->Name,
               pRegister->Width );
      pApp->PrintText( tabConsole, szBuffer );
   }
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim register_list As ADspRegisterList
Dim register As ADspRegister
Dim processor As ADspProcessor
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set register_list = processor.RegisterList
 
If (register_list Is Nothing) Then
   app.PrintText tabConsole, "Target does not have any registers"
Else
   For Each register In register_list
      app.PrintText tabConsole, "Name = " + register.Name + _
                                "  Width = " + CStr( register.Width )
   Next
End If

Объект дает доступ к некоторым полезным функциям программатора flash (stand-alone flash programmer, сокращенно SAFP), что дает возможность пользователю изменять память flash процессора без необходимости иметь лицензию VisualDSP++.

Объект ADspSAFP реализован как внешний dll-файл WmSAFP.dll, находящийся в папке System каталога установки VisualDSP++. Если Вы используете среду разработки, которая требует библиотеку типов (C++ или .NET например), укажите на этот библиотечный файл вместо Idde.exe, как показано в примерах ниже.

Пример использования плагина см. во врезке с описанием объекта ADspFlashProgrammer.

Методы

CompareFlashWithFile
EraseAll
EraseBlock
FillFlash
LoadDriver
LoadFile
SendCustom

Свойства

ConfigFile

Объект представляет систему обработки скриптов в приложении. Следующий пример демонстрирует установку языка перед загрузкой скрипта.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspScriptEnginePtr pScriptEngine = pApp->ScriptEngine;
pScriptEngine->ScriptLanguage = "JScript";
 
try
{
   pScriptEngine->LoadScript( "c:\\examples\\test.js" );
}
catch ( _com_error err )
{
   pApp->PrintText( tabConsole, "Failed to load script" );
}

Visual Basic:

   Dim app As Application
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set ScriptEngine = app.ScriptEngine
   ScriptEngine.ScriptLanguage = "JScript"
 
   On Error GoTo LoadFailed
   app.LoadScript "c:\examples\test.js"
 
   Exit Sub
 
LoadFailed:
   app.PrintText tabConsole, "Failed to load script"

Свойства

ScriptLanguage

Методы

ExecuteScript
LoadScript
ConnectEvent

[ADspSession]

Объект представляет ранее созданные сессии отладки. Это позволяет Вам получить информацию о сессии наподобие имени, цели отладки (debug target), выбранной платформе, выбранном процессоре или процессорах, и т. д.

Свойства

DebugTargetName
Name
MPGroupInfoList
PlatformName
ProcessorList

[ADspSessionList]

Этот объект представляет коллекцию сессий, которые были ранее созданы в IDDE.

Свойства

Count
Item
_NewEnum

Методы

CreateSession
Remove
RemoveAll

Следующий пример демонстрирует печать списка сессий в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspSessionListPtr pSessionList = pApp->SessionList;
 
for ( long i = 0; i < pSessionList->Count; i++ )
{
   IADspSessionPtr pSession = pSessionList->GetItem( i );
   pApp->PrintText( tabConsole, pSession->Name );
}

Visual Basic:

Dim app As Application
Dim session_list As ADspSessionList
Dim session As ADspSession
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session_list = app.SessionList
 
For Each session In session_list
   app.PrintText tabConsole, session.Name
Next

[ADspSoftwareStack]

Объект представляет коллекцию объектов ADspSoftwareStackFrame, каждый из которых представляет фрейм в текущем программном стеке (подобно тому, что Вы видите в окне call stack среды IDDE во время отладки программы).

Свойства

ActiveFrame
Count
Item
_NewEnum

[ADspSoftwareStackFrame]

Объект представляет запись фрейма программного стека высокоуровневого языка программирования для загруженного сейчас приложения.

Свойства

Address
FileName
Line
Function

Следующий пример демонстрирует печать в окне консоли текущего стека вызовов (call stack).

C++/ATL:

USES_CONVERSION;
 
TCHAR szText[1024];
IADspApplicationPtr pApp( "VisualDSP.ADspApplication" );
IADspSoftwareStackPtr pStack = pApp->ActiveSession->ActiveProcessor->SoftwareStack;
 
for( long i=0; i < pStack->Count; i++ )
{
   IADspSoftwareStackFramePtr pFrame = pStack->GetItem(i);
   sprintf( szText,
            "%s 0x%08x %s(%d)",
            OLE2A(pFrame->Function->Name),
            pFrame->Address,
            OLE2A(pFrame->FileName),
            pFrame->Line );
   pApp->PrintText( tabConsole, szText );
}

Visual Basic:

Dim app As Application
Dim stack As ADspSoftwareStack
Dim frame As ADspSoftwareStackFrame
 
Set app = CreateObject("VisualDSP.ADspApplication")
Set stack = app.ActiveSession.ActiveProcessor.SoftwareStack
 
For Each frame In stack
   app.PrintText tabConsole, _
        frame.Function.Name & " " _
        & Hex(frame.Address) _
        & " " & frame.FileName _
        & "(" & frame.Line & ")"
Next

Объект представляет файл в проекте. Это позволяет Вам получить информацию о файле, такие как атрибуты, имя файла и выходная директория. Операции, которые обрабатывает объект, включают сборку файла, смену команд сборки и опций и т. д.

Следующий пример подразумевает, что проект уже загружен. Здесь демонстрируется печать в окно консоли текущего списка исходных файлов в проекте.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspProjectListPtr pProjectList = pApp->ProjectList;
IADspProjectPtr pProject = pProjectList->ActiveProject;
if ( NULL == pProject )
{
   pApp->PrintText( tabConsole, "No project loaded" );
}
else
{
   for ( long i = 0; i < pProject->Count; i++ )
   {
      IADspSourceFilePtr pSourceFile = pProject->GetItem( i );
      pApp->PrintText( tabConsole, pSourceFile->FileName );
   }
}

Visual Basic:

Dim app As Application
Dim project_list As ADspProjectList
Dim project As ADspProject
Dim src_file As ADspSourceFile
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set project_list = app.ProjectList
Set project = project_list.ActiveProject
If ( project Is Nothing ) Then
   app.PrintText tabConsole, "No project loaded"
Else
   For Each src_file In project
      app.PrintText tabConsole, src_file.FileName
   Next
End If

Свойства

Attributes
CustomCommands
CustomInputFiles
CustomOutputFiles
FileName
Folder
OutputDirectory
Project

Методы

Build
GetCommandLine
GetDependencies

[ADspStream]

Этот объект представляет поток.

Свойства

SourceType
SourceName
SourceDeviceAddress
SourceFileFormat
SourceFileIsCircular
SourceFileRewind
SourceProcessor
DestinationType
DestinationName
DestinationDeviceAddress
DestinationFileFormat
DestinationFileRewind
DestinationProcessor

[ADspStreamList]

Объект представляет набор потоков. Он позволяет получить список потоков, добавлять и удалять потоки.

Свойства

Count
Item
_NewEnum
DeviceNames
Formats

Методы

AddFileToDeviceStream
AddDeviceToFileStream
AddDeviceToDeviceStream
RemoveStream

Следующий пример демонстрирует печать в окне консоли списка потоков и их свойств.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer1[512];
TCHAR szBuffer2[512];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspStreamListPtr pStreamList = pSession->StreamList;
 
for ( long i = 0; i < pStreamList->Count; i++ )
{
   IADspStreamPtr pStream = pStreamList->GetItem( i );
   sprintf(szBuffer1,"Src: Type=%d Name=%s DevAdd=0x%lx FileFormat=%s IsCircular=%d Rewind=%d Processor=%s",
           pStream->SourceType, (char *) pStream->SourceName,  pStream->SourceDeviceAddress,
           (char *) pStream->SourceFileFormat, 
           pStream->SourceFileIsCircular, pStream->SourceFileRewind, (char *) pStream->SourceProcessor);
   sprintf(szBuffer2,"Dst: Type=%d Name=%s DevAdd=0x%lx FileFormat=%s Rewind=%d Processor=%s",
           pStream->DestinationType, (char *) pStream->DestinationName,
           pStream->DestinationDeviceAddress, (char *) pStream->DestinationFileFormat,
           pStream->DestinationFileRewind, (char *) pStream->DestinationProcessor);
   pApp->PrintText( tabConsole, szBuffer1 );
   pApp->PrintText( tabConsole, szBuffer2 );
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim stream_list As ADspStreamList
Dim stream As ADspStream
 
Set app = CreateObject("VisualDSP.ADspApplication")
Set session = app.ActiveSession
Set stream_list = session.StreamList
 
For Each stream In stream_list
   app.PrintText tabConsole, "Source: Type = " + CStr(stream.SourceType) + _
                             "  Name = " + stream.SourceName + _
                             " DeviceAddress = " + CStr(stream.SourceDeviceAddress) + _
                             " FileFormat = " + stream.SourceFileFormat + _
                             " IsCircular = " + CStr(stream.SourceFileIsCircular) + _
                             " Rewind = " + CStr(stream.SourceFileRewind) + _
                             " Processor = " + stream.SourceProcessor
   app.PrintText tabConsole, "Destination: Type = " + CStr(stream.DestinationType) + _
                             "  Name = " + stream.DestinationName + _
                             " DeviceAddress = " + CStr(stream.DestinationDeviceAddress) + _
                             " FileFormat = " + CStr(stream.DestinationFileFormat) + _
                             " Rewind = " + CStr(stream.DestinationFileRewind) + _
                             " Processor = " + stream.DestinationProcessor
Next

Объект представляет набор строк. Следующий пример демонстрирует создание списка строк и после этого печать его в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
IADspStringListPtr pStringList;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
pStringList.CreateInstance( "VisualDSP.ADspStringList" );
 
pStringList->Add( "String 1" );
pStringList->Add( "String 2" );
pStringList->Add( "String 3" );
 
for ( long i = 0; i < pStringList->Count; i++ )
{
   pApp->PrintText( tabConsole, pStringList->Item( i ) );
}

Visual Basic:

Dim app As Application
Dim string_list As ADspStringList
Dim str As Variant
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set string_list = CreateObject( "VisualDSP.ADspStringList" )
 
string_list.Add( "String 1" )
string_list.Add( "String 2" )
string_list.Add( "String 3" )
 
For Each str In string_list
   app.PrintText tabConsole, str
Next 

Свойства

ArrayOfStrings
Count
Item
_NewEnum

Методы

Add
Remove

[ADspSymbol]

Объект представляет символ, загруженный в настоящее время в процессор. Объект позволяет получить его имя, адрес и тип памяти.

Свойства

Address
MemoryType
Name

[ADspSymbolList]

Объект представляет набор символов, загруженных в настоящее время в процессор.

Свойства

ArrayOfSymbols
Count
Item
_NewEnum

Следующий пример демонстрирует отображение в окне консоли списка всех символов памяти программ Program (PM).

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[128];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspMemoryTypeListPtr pMemoryTypeList = pProcessor->MemoryTypeList;
 
try
{
   IADspMemoryTypePtr pMemoryType = pMemoryTypeList->GetItem( "Program(PM) Memory" );
   IADspSymbolListPtr pSymbolList = pMemoryType->SymbolList;
   if ( NULL == pSymbolList )
   {
      pApp->PrintText( tabConsole, "No symbols in Program(PM) Memory" );
   }
   else
   {
      for ( long i = 0; i < pSymbolList->Count; i++ )
      {
         IADspSymbolPtr pSymbol = pSymbolList->GetItem(i);
         sprintf( szBuffer, "Symbol: %s  Address: 0x%lx",
                  (char *) pSymbol->Name,
                  pSymbol->Address );
         pApp->PrintText( tabConsole, szBuffer );
      }
   }
}
catch ( _com_error err )
{
   pApp->PrintText( tabConsole, "Processor doesn't have memory named \"Program(PM) Memory\"" );
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim processor As ADspProcessor
   Dim memory_type_list As ADspMemoryTypeList
   Dim memory_type As ADspMemoryType
   Dim symbol_list As ADspSymbolList
   Dim symbol As ADspSymbol
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set session = app.ActiveSession
   Set processor = session.ProcessorList( 0 )
   Set memory_type_list = processor.MemoryTypeList
 
   On Error GoTo GetItemFailed
   Set memory_type = memory_type_list( "Program(PM) Memory" )
   Set symbol_list = memory_type.SymbolList
 
   If ( symbol_list Is Nothing ) Then
      app.PrintText tabConsole, "No symbols in Program(PM) Memory"
   Else
      For Each symbol In symbol_list
         app.PrintText tabConsole, "Symbol: " + symbol.Name + _
                                   "  Address: 0x" + Hex(symbol.Address)
      Next
   End If
 
   Exit Sub
 
GetItemFailed:
   app.PrintText tabConsole, "Processor doesn't have memory named ""Program(PM) Memory""

[ADspTool]

Объект представляет утилиту командной строки наподобие ассемблера или компилятора. Объект позволяет получить информацию об этой утилите наподобие её типа, описания и расширений входных/выходных файлов.

Свойства

Description
Info
InputExtensions
OutputExtensions
Type

[ADspToolList]

Объект представляет набор утилит (типа ассемблера, компилятора и т. п.), которые доступны для сборки этого проекта. Для каждого целевого процессора набор утилит может отличаться.

Свойства

Count
Item
_NewEnum

В следующем примере подразумевается, что проект уже открыт, и здесь демонстрируется печать в окно консоли списка инструментов и их свойств.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspProjectListPtr pProjectList = pApp->ProjectList;
 
if ( !pProjectList->Count )
{
   pApp->PrintText( tabConsole, "No project loaded" );
}
else
{
   // Получение объекта первого проекта:
   IADspProjectPtr pProject=pProjectList->GetItem(CComVariant(static_cast< long >(0)));
   // Просмотр списка инструментов и печать их свойств:
   IADspToolListPtr pToolList = pProject->ToolList;
   for ( long i = 0; i < pToolList->Count; i++ )
   {
      TCHAR szBuffer[1024];
      IADspToolPtr pTool = pToolList->GetItem( i );
      sprintf( szBuffer, "Tool Type = %s  Description = %s  Info = %s",
               (char *) pTool->Type, (char *) pTool->Description, (char *) pTool->Info );
      pApp->PrintText( tabConsole, szBuffer );
   }
}

Visual Basic:

Dim app As Application
Dim project_list As ADspProjectList
Dim project As ADspProject
Dim tool_list As ADspToolList
Dim tool As ADspTool
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set project_list = app.ProjectList
 
If ( project_list.Count = 0 ) Then
   app.PrintText tabConsole, "No project loaded"
Else
   Rem Получение объекта первого проекта:
   Set project = project_list( 0 )
 
   Rem Просмотр списка инструментов и печать их свойств:
   Set tool_list = project.ToolList
   For Each tool In tool_list
      app.PrintText tabConsole, "Tool Type = " + tool.Type + _
                                "  Description = " + tool.Description + _
                                "  Info = " + tool.Info
   Next
End  If

[ADspValue]

Этот объект представляет собой слово процессора DSP, что может использоваться для получения значения из памяти или установки значения в памяти, получения или установки значения регистров или аппаратных стеков.

Свойства

Uninitialized
Value
Width

Методы

And
Or
ShiftLeft
ShiftRight
ToString
FromString

[ADspValueList]

Этот объект представляет список слов (значений) процессора DSP, куда будут прочитаны значения из памяти процессора, его регистров или стеков. Этот список также может быть создан и записан в память, регистры или стеки.

Свойства

ArrayOfValues
Count
Item
_NewEnum

Методы

Add
ConvertToDouble
ConvertToFloat
ConvertToInt
ConvertToLong
ConvertToUnsignedInt
ConvertToUnsignedLong
CreateEmptyValues
Remove

Следующий пример демонстрирует чтение памяти процессора и отображение прочитанного в окне консоли.

C++/ATL:

IADspApplicationPtr pApp;
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspMemoryTypeListPtr pMemoryTypeList = pProcessor->MemoryTypeList;
 
try
{
   IADspMemoryTypePtr pMemoryType = pMemoryTypeList->GetItem( "Data(DM) Memory" );
   try
   {
      IADspValueListPtr pValueList = pMemoryType->GetMemory( 0x30000, // начальный адрес
                                                             10,      // количество ячеек
                                                             1 );     // шаг
      for ( long i = 0; i < pValueList->Count; i++ )
      {
         IADspValuePtr pValue = pValueList->GetItem( i );
         pApp->PrintText( tabConsole, pValue->ToString( "Hexadecimal" ) );
      }
   }
   catch ( _com_error err )
   {
      pApp->PrintText( tabConsole, "GetMemory failed" );
   }
}
catch ( _com_error err )
{
   pApp->PrintText( tabConsole, "Processor doesn't have memory named \"Data(DM) Memory\"" );
}

Visual Basic:

   Dim app As Application
   Dim session As ADspDebugSession
   Dim processor As ADspProcessor
   Dim memory_type_list As ADspMemoryTypeList
   Dim memory_type As ADspMemoryType
   Dim value_list As ADspValueList
   Dim value As ADspValue
 
   Set app = CreateObject( "VisualDSP.ADspApplication" )
   Set session = app.ActiveSession
   Set processor = session.ProcessorList( 0 )
   Set memory_type_list = processor.MemoryTypeList
 
   On Error GoTo GetItemFailed
   Set memory_type = memory_type_list( "Data(DM) Memory" )
 
   On Error GoTo GetMemoryFailed
   Set value_list = memory_type.GetMemory( &h30000, 10, 1 )
   For Each value In value_list
      app.PrintText tabConsole, value.ToString( "Hexadecimal" )
   Next
 
   Exit Sub
 
GetItemFailed:
   app.PrintText tabConsole, "Processor doesn't have memory named ""Data(DM) Memory""
 
   Exit Sub

GetMemoryFailed:
   app.PrintText tabConsole, "GetMemory failed"

[ADspWatchpoint]

Объект представляет просмотр выбранной точки останова по значению переменной (watchpoint), который установлен сейчас в цели отладки. Это позволит Вам получить такие атрибуты watchpoint, как условие остановки (halt condition), тип watchpoint, и т. д.

Watchpoint остановит выполнение программы, когда будет удовлетворено условие watchpoint, такое как чтение памяти или выборка из стека. В отличие от точек останова (breakpoints), точки watchpoint не привязаны к определенному адресу.

Точки watchpoints могут поддерживаться только симуляторами.

Свойства

EndAddress
HaltCondition
HardwareStack
MemoryType
ReadMask
ReadValue
Register
StartAddress
WatchpointType
WriteMask
WriteValue

[ADspWatchpointList]

Этот объект представляет набор объектов watchpoint, что позволяет добавлять или удалять точки watchpoint.

Свойства

Count
Item
_NewEnum

Методы

AddHardwareStackWatchpoint
AddMemoryWatchpoint
AddRegisterWatchpoint
Remove

Следующий пример демонстрирует печать в окне консоли текущего списка точек watchpoint и их свойств.

C++/ATL:

IADspApplicationPtr pApp;
TCHAR szBuffer[256];
 
pApp.CreateInstance( "VisualDSP.ADspApplication" );
IADspDebugSessionPtr pSession = pApp->ActiveSession;
IADspProcessorPtr pProcessor = pSession->ProcessorList->GetItem( CComVariant( 0 ) );
IADspWatchpointListPtr pWatchpointList = pProcessor->WatchpointList;
 
if ( NULL == pWatchpointList )
{
   pApp->PrintText( tabConsole, "Target does not support watchpoints" );
}
else
{
   for ( long i = 0; i < pWatchpointList->Count; i++ )
   {
      IADspWatchpointPtr pWatchpoint = pWatchpointList->GetItem( i );
      switch ( pWatchpoint->GetWatchpointType() )
      {
      case watchpointMemoryInclusive:
      case watchpointMemoryExclusive:
         sprintf( szBuffer, "Memory = %s 0x%lx-0x%lx",
                  (char *) pWatchpoint->MemoryType->Name,
                  pWatchpoint->StartAddress,
                  pWatchpoint->EndAddress );
         if ( watchpointMemoryInclusive == pWatchpoint->GetWatchpointType() )
         {
            strcat( szBuffer, ", Inclusive");
         }
         else
         {
            strcat( szBuffer, ", Exclusive");
         }
         break;
      case watchpointRegister:
         sprintf( szBuffer, "Register = %s",
                  (char *) pWatchpoint->Register->Name );
         break;
      case watchpointHardwareStack:
         sprintf( szBuffer, "Hardware Stack = %s",
                  (char *) pWatchpoint->HardwareStack->Name );
         break;
      default:
         strcpy( szBuffer, "Unknown" );
         break;
      }
      strcat( szBuffer, "   HaltCondition = " );
      if ( pWatchpoint->HaltCondition & watchpointHaltOnReadData )
      {
         strcat( szBuffer, "Read Data ");
         strcat( szBuffer, (char *) pWatchpoint->ReadValue->ToString( "Hexadecimal" ) );
         strcat( szBuffer, ", ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnWriteData )
      {
         strcat( szBuffer, "Write Data ");
         strcat( szBuffer, (char *) pWatchpoint->WriteValue->ToString( "Hexadecimal" ) );
         strcat( szBuffer, ", ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnReadUndefined )
      {
         strcat( szBuffer, "Read Uninitialized Data, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnWriteUndefined )
      {
         strcat( szBuffer, "Write Uninitialized Data, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnReadAnyValue )
      {
         strcat( szBuffer, "Read Any Data, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnWriteAnyValue )
      {
         strcat( szBuffer, "Write Any Data, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnRegisterReadInComputation )
      {
         strcat( szBuffer, "Register Read In Computation, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnRegisterWriteInComputation )
      {
         strcat( szBuffer, "Register Write In Computation, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnUnderflow )
      {
         strcat( szBuffer, "Underflow, ");
      }
      if ( pWatchpoint->HaltCondition & watchpointHaltOnOverflow )
      {
         strcat( szBuffer, "Overflow, ");
      }
      // Избавление от последней запятой в конце строки:
      if ( szBuffer[ strlen( szBuffer ) - 2 ] == ',' )
         szBuffer[ strlen( szBuffer ) - 2 ] = 0;
      pApp->PrintText( tabConsole, szBuffer );
   }
}

Visual Basic:

Dim app As Application
Dim session As ADspDebugSession
Dim watchpoint_list As ADspWatchpointList
Dim watchpoint As ADspWatchpoint
Dim processor As ADspProcessor
Dim buffer As String
 
Set app = CreateObject( "VisualDSP.ADspApplication" )
Set session = app.ActiveSession
Set processor = session.ProcessorList( 0 )
Set watchpoint_list = processor.WatchpointList
 
If (watchpoint_list Is Nothing) Then
   app.PrintText tabConsole, "Target does not support watchpoints"
Else
   For Each watchpoint In watchpoint_list
      Select Case watchpoint.WatchpointType
      Case watchpointMemoryInclusive
         buffer = "Memory = " + watchpoint.MemoryType.Name + _
                  " 0x" + Hex(watchpoint.StartAddress) + _
                  "-0x" + Hex(watchpoint.EndAddress) + ", Inclusive"
      Case watchpointMemoryExclusive
         buffer = "Memory = " + watchpoint.MemoryType.Name + _
                  " 0x" + Hex(watchpoint.StartAddress) + _
                  "-0x" + Hex(watchpoint.EndAddress) + ", Exclusive"
      Case watchpointRegister
         buffer = "Register = " + watchpoint.Register.Name
      Case watchpointHardwareStack
         buffer = "Hardware Stack = " + watchpoint.HardwareStack.Name
      Case Else
         buffer = "Unknown"
      End Select
      buffer = buffer + "   HaltCondition = "
      If ( watchpoint.HaltCondition And watchpointHaltOnReadData ) Then
         buffer = buffer + "Read Data " + _
                  watchpoint.ReadValue.ToString( "Hexadecimal" ) + ", "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnWriteData ) Then
         buffer = buffer + "Write Data " + _
                  watchpoint.WriteValue.ToString( "Hexadecimal" ) + ", "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnReadUndefined ) Then
         buffer = buffer + "Read Uninitialized Data, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnWriteUndefined ) Then
         buffer = buffer + "Write Uninitialized Data, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnReadAnyValue ) Then
         buffer = buffer + "Read Any Data, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnWriteAnyValue ) Then
         buffer = buffer + "Write Any Data, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnRegisterReadInComputation ) Then
         buffer = buffer + "Register Read In Computation, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnRegisterWriteInComputation ) Then
         buffer = buffer + "Register Write In Computation, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnUnderflow ) Then
         buffer = buffer + "Underflow, "
      End If
      If ( watchpoint.HaltCondition And watchpointHaltOnOverflow ) Then
         buffer = buffer + "Overflow, "
      End If
      Rem Избавление от последней запятой в конце строки:
      buffer = Left(buffer, Len(buffer) - 2)
      app.PrintText tabConsole, buffer
   Next
End If

[Константы и перечисления VisualDSP++ Automation API]

В таблице ниже и последующих врезках приведены описания типов для констант. Все эти типы определены как перечисления, в которых находятся соответствующие константы, задающие различные значения.

Функция Описание
adspBreakpointType Используется для того, чтобы задать состояние видимости точки останова в интерфейсе среды разработки VisualDSP++, а также типа точки останова (например, аппаратная она или программная).
adspCompilerAnnotationsType Используется для указания типа аннотации компилятора.
adspBtcDataWidth Используется для указания ширины данных, которая поддерживается BTC [4].
adspConvertType Используется для преобразования типа данных из типа native C/C++ (или в этот тип).
adspDebugState Используется для указания состояния целевого процессора.
adspEndianFormat Используется для указания порядка следования байт при сохранении данных в двоичный файл.
adspFileAttributeMasks Задает различные атрибуты исходных файлов в проекте.
adspImageAutoRefreshType Задает тип автообновления, поддерживаемый ImageViewer.
adspImageFlip Используется для того, чтобы задать тип поворота изображения в ImageViewer.
adspImageMemSourceFormat Используется для установки формата данных исходных данных для ImageViewer.
adspImagePixelFormat Используется для установки типа кодирования данных в точке.
adspImagePpmType Используется для установки PPM сохраняемого типа изображения.
adspImageRotate Используется для установки поворота изображения.
adspImageSourceLocation Используется, чтобы установить или получить место размещения данных изображения.
adspMemoryAccessTypeMasks Задает различные атрибуты сегмента памяти целевого процессора. Эти значения могут объединяться операцией ИЛИ.
adspOutputWindowTab Используется для указания определенной закладки выходного окна среды разработки VisualDSP++.
adspOutputWindowTextType Используется для указания стиля отображаемого текста, когда он печатается на закладке окна в среде разработки VisualDSP++.
adspPluginStartupStyle Используется для указания типа поведения, которое окно плагина показывает при первой своей загрузке.
adspPluginWindowType Используется для указания типа окна, в котором работает плагин.
adspProfileFilterType Используется для указания типа фильтра, накладываемого на результаты сессии профайлинга.
adspProfileMemoryType Используется для указания типа памяти, используемой в сессии профайлинга.
adspSaveProfileFormat Используется для указания формата, в котором будут сохранены данные сессии профайлинга.
adspStreamType Используется для указания типа конечной точки, к которой подключен поток.
adspWatchpointHaltConditionMasks Используется для указания случаев, в которых выполнение должно быть остановлено (halt), когда установлена точка просмотра (watchpoint). Значения из этого перечисления могут объединяться операцией ИЛИ.
adspWatchpointType Используется для указания типа точки просмотра (watchpoint), которую представляет объект ADspWatchpoint.

Используется для обозначения состояния видимости точки останова в пользовательском интерфейсе IDDE, а также устанавливает тип точки останова (например аппаратная она или программная).

Применяется к ADspBreakpointList.

Функция Знач. Описание
breakpointPublic 0 Указывает, что точка останова публичная, и видима в пользовательском интерфейсе IDDE.
breakpointPrivate 1 Указывает, что точка останова приватная, и она скрыта в пользовательском интерфейсе IDDE.
breakpointHardware 2 Указывает, что точка останова аппаратная, в отличие от программной точки останова. Это значение может быть объединено операцией ИЛИ со значением breakpointPublic и breakpointPrivate, чтобы указать видимость точки останова.

Используется для указания типа аннотации компилятора.

Применяется к ADspCompilerAnnotation.

Функция Знач. Описание
compilerAnnotationsTypeInfo 0 Относится к закладке консоли (Console) в окне вывода.
compilerAnnotationsTypeAdvice 1 Относится к закладке сборки (Build) в окне вывода.
compilerAnnotationsTypeFailure 2 Относится к закладке сборки (Build) в окне вывода.

Используется для указания ширины данных, которую поддерживает BTC [4].

Применяется к ADspBtcManager , ADspBtcChannel.

Функция Знач. Описание
btcWidthNone 0x0000 Ширина не определена.
btcWidth8 0x0001 8 бит.
btcWidth16 0x0002 16 бит.
btcWidth32 0x0004 32 бита.

Используется для преобразования данных в традиционный (native) тип данных C/C++ или из него.

Применяется к ADspMemoryType.

Функция Знач. Описание
convertTypeInteger 0 Указывает, что преобразование потребляет или генерирует знаковый целочисленный тип C/C++ (signed int).
convertTypeUnsignedInteger 1 Указывает, что преобразование потребляет или генерирует беззнаковый целочисленный тип C/C++ (unsigned int).
convertTypeLong 2 Указывает, что преобразование потребляет или генерирует знаковый целочисленный длинный тип C/C++ (signed long).
convertTypeUnsignedLong 3 Указывает, что преобразование потребляет или генерирует беззнаковый целочисленный длинный тип C/C++ (unsigned long).
convertTypeFloat 4 Указывает, что преобразование потребляет или генерирует тип C/C++ с плавающей запятой одинарной точности (float).
convertTypeDouble 5 Указывает, что преобразование потребляет или генерирует тип C/C++ с плавающей запятой двойной точности (double).

Используется для указания состояния целевого процессора.Used to specify the state of a target processor.

Применяется к ADspProcessor.

Функция Знач. Описание
stateReset 0 Процессор в состоянии сброса.
stateRunning 1 Процессор выполняет код.
stateStepping 2 Процессор выполняет одну ассемблерную инструкцию.
stateHalted 3 Процессор остановлен.
stateUnknown 4 Процессор в неизвестном состоянии.
stateLoaded 5 В процессор только загружена программа.

Используется для указания порядка байт, в котором данные сохраняются в двоичный файл.

Применяется к ADspMemoryType.

Функция Знач. Описание
endianFormatBig 0 Формат Big-Endian. Это означает, что данные сохраняются так, что старший байт слова будет первым, а младший байт последним.
endianFormatLittle 1 Формат Little-Endian. Это означает, что данные сохраняются так, что младший байт слова будет первым, а старший байт последним.

Задает различные атрибуты исходных файлов в проекте. Значения этого перечисления могут объединяться операцией ИЛИ.

Применяется к ADspSourceFile.

Функция Знач. Описание
buildableExtension 0x01 Этот исходный файл проекта имеет допустимое расширение для сборки имеющимся инструментарием.
excludedFromBuild 0x02 Этот исходный файл из состава проекта не будет участвовать в процессе сборки проекта.
buildWithProjectWideOption 0x04 Этот исходный файл проекта будет собираться под управлением общих настроек проекта.
buildWithFileSpecificOption 0x08 Этот исходный файл проекта при сборке будет использовать отдельные опции, привязанные именно к этому файлу.
buildWithCustomCommand 0x10 Этот исходный файл проекта будет собираться пользовательскими командами, определенными для этого файла.

Используется для установки типа автообновления, поддерживаемого плагином ImageViewer.

Применяется к ADspImageViewer.

Функция Знач. Описание
autoRefreshNone 0x0 Запрещает автообновление.
autoRefreshRunhalt 0x1 Устанавливает автообновление для использования метода run/halt (запуск/остановка).
autoRefreshBtc 0x2 Устанавливает автообновление для использования канала фоновой телеметрии (BTC, см. [4]).

Используется для установки типа зеркалирования, поддерживаемого плагином ImageViewer.

Применяется к ADspImageViewer.

Функция Знач. Описание
flipNone 0x0 Устанавливает изображение в оригинальную ориентацию.
flipX 0x1 Зеркалирование по горизонтали.
flipY 0x2 Зеркалирование по вертикали.
flipXY 0x3 Зеркалирование и по горизонтали, и по вертикали.

Используется для установки формата исходных данных в памяти для плагина ImageViewer.

Применяется к ADspImageViewer.

Функция Знач. Описание
sourceFormatRawPixels 0x0 Указывает, что память процессора DSP содержит сырые графические данные (raw pixel data).
sourceFormatStream 0x1 Указывает, что память процессора DSP содержит потоковые данные. Потоковые данные представляют весь формат файла, такой как bmp или jtag.

Используется для установки типа пикселя изображения.

Применяется к ADspImageViewer.

Функция Знач. Описание
pixelGray8 0x0 Grayscale 8 бит (файл с градациями серого).
pixelGray12 0x1 Grayscale 12 бит (файл с градациями серого).
pixelGray16 0x2 Grayscale 16 бит (файл с градациями серого).
pixelRgb555 0x3 RGB555 16 бит.
pixelRgb565 0x4 RGB565 16 бит.
pixelRgb24 0x5 RGB 24 бита.
pixelRgb32 0x6 RGB 32 бита.
pixelYuy2 0x7 YUY2.
pixelYvyu 0x8 YVYU.
pixelUyvy 0x9 UYVY
pixelIyu2 0xa IYU2
pixelIyu1 0xb IYU1
pixelY41p 0xc Y41P

Используется для установки типа PPM изображения при сохранении.

Применяется к ADspImageViewer.

Функция Знач. Описание
ppmP3 0x0 Устанавливается формат сохранения PPM P3 (ASCII).
ppmP6 0x1 Устанавливается формат сохранения PPM P6 (binary, двоичный формат).

Используется для установки поворота изображения.

Применяется к ADspImageViewer.

Функция Знач. Описание
rotate0 0x0 Устанавливает оригинальную ориентацию изображения.
rotate90 0x1 Устанавливает поворот изображения на 90 градусов.
rotate180 0x2 Устанавливает поворот изображения на 180 градусов.
rotate270 0x3 Устанавливает поворот изображения на 270 градусов.

Используется для установки места расположения данных изображения.

Применяется к ADspImageViewer.

Функция Знач. Описание
sourceLocationMemory 0x0 Данные будут взяты из памяти процессора DSP.
sourceLocationFile 0x1 Данные будут взяты из файла.

Задает различные атрибуты сегмента памяти целевого процессора. Эти значения могут объединяться операцией ИЛИ.

Применяется к ADspMemorySegment.

Функция Знач. Описание
memoryAcessTypeROM 0x01 Сегмент памяти является памятью только для чтения (Read-Only Memory, ROM). Если маска не установлена, то сегмент памяти является памятью с произвольным доступом, ОЗУ (Random Access Memory, RAM).
memoryAcessTypeInternal 0x02 Сегмент относится к внутренней памяти. Если эта маска не установлена, то сегмент памяти относится к внешней памяти.

Используется, чтобы указать конкретную закладку, размещенную в окне вывода IDDE.

Применяется к ADspOutputWindow.

Функция Знач. Описание
tabConsole 0 Относится к закладке консоли (Console). Туда попадает отладочный вывод, сообщения компилятора и системы.
tabBuild 1 Относится к закладке сборки (Build). Туда выводятся сообщения о сборке и линковке проекте.

Используется для указания стиля текста, когда он выводится на закладку окна в IDDE.

Применяется к ADspOutputWindow.

Функция Знач. Описание
textTypeConsoleNormal 0 Обычный текст (цвет по умолчанию серый, текст с отступом).
textTypeConsoleCommand 1 Отображается текст команды (цвет по умолчанию синий).
textTypeConsoleStdio 2 Отображается текст стандартного ввода вывода, STDIO (цвет по умолчанию зеленый, текст с отступом).
textTypeConsoleStderr 7 Отображается текст потока ошибок, STDERR (цвет по умолчанию красный, текст с отступом).
textTypeConsoleError 3
textTypeBuildNormal 4 Отображается обычный текст на закладке сборки (цвет по умолчанию синий).
textTypeBuildOutput 5 Отображается текст вывода (цвет по умолчанию черный).
textTypeBuildError 6 Отображается текст ошибки (цвет по умолчанию красный).

Используется для указания поведения окна плагина, когда он загружен в первый раз.

Применяется к ADspPlugin.

Функция Знач. Описание
startupNoWindow 0 Окно плагина не создается, пока пользователь не выполнит клик на пункт меню плагина.
startupInvisible 1 Окно плагина создается, когда создается сессия. Изначально окно невидимо. Свойство AllowMultipleInstances должно быть установлено в False.
startupVisible 2 Окно плагина создается, когда создается сессия. Изначально окно видимо. Свойство AllowMultipleInstances должно быть установлено в False.

Используется для указания типа окна плагина.

Применяется к ADspPlugin.

Функция Знач. Описание
wndtypeGeneric 0 Обычное окно, не привязанное к отдельному процессору. Окно может быть плавающим в главном окне или рабочем столе, или быть присоединяемым (dockable).
wndtypeSpecific 1 Окно, относящееся к процессору (т. е. прикрепленное к отдельному процессору), наподобие окна регистров. Окно может быть плавающим в главном окне или рабочем столе, или быть присоединяемым (dockable). Также окно может быть прикрепленным к процессору в сессии Multiprocessor.
wndtypeProject 2 Закладка окна в окне проекта.
wndtypeOutput 3 Закладка окна в окне вывода.

Используется для указания типа фильтра, который будет применен к результатам сессии профайлинга.

Применяется к ADspProfileSession.

Функция Знач. Описание
profileEntireMemory 0 Профайлинг всей области памяти.
profileFunctions 1 Профайлинг только указанных функций.
profileRanges 2 Профайлинг только указанных диапазонов адресов.

Используется для указания типа памяти, которая используется в сессии профайлинга.

Применяется к ADspProfileSession.

Функция Знач. Описание
profileMemoryTypeInstruction 0 Память инструкций.
profileMemoryTypeData 1 Память данных.

Используется для указания формата, в котором будут сохраняться данные сессии профайлинга.

Применяется к ADspProfileSession.

Функция Знач. Описание
profileBinary 0 Данные сохраняются в двоичном формате, расширение файла *.prf.
profileText 1 Данные сохраняются в текстовом формате, расширение файла *.txt.
profileXML 2 Данные сохраняются в формате XML, расширение файла *.xml.

Используется для указания типа конечной точки, к которой подключен поток.

Применяется к ADspStream.

Функция Знач. Описание
streamFile 0 Поток подключен к файлу.
streamDevice 1 Поток подключен к аппаратному устройству.

Используется для указания случаев, в которых выполнение должно быть остановлено (halt), когда установлена точка просмотра (watchpoint). Значения из этого перечисления могут объединяться операцией ИЛИ.

Применяется к ADspWatchpointList , ADspWatchpoint.

Функция Знач. Описание
watchpointHaltOnReadData 0x0001 Выполнение кода останавливается, когда значение, определенное в ReadValue, прочитано из ячейки watchpoint.
watchpointHaltOnWriteData 0x0002 Выполнение кода останавливается, когда значение, определенное в WriteValue, записано в ячейку watchpoint.
watchpointHaltOnReadUndefined 0x0004 Выполнение кода останавливается, когда не инициализированное значение прочитано из ячейки watchpoint.
watchpointHaltOnWriteUndefined 0x0008 Выполнение кода останавливается, когда не инициализированное значение записано в ячейку watchpoint.
watchpointHaltOnReadAnyValue 0x0010 Выполнение кода останавливается, когда любое значение прочитано из ячейки watchpoint.
watchpointHaltOnWriteAnyValue 0x0020 Выполнение кода останавливается, когда любое значение записано в ячейку watchpoint.
watchpointHaltOnRegisterReadInComputation 0x0040 Выполнение кода останавливается, когда любое значение прочитано из регистра во время вычислений процессора (например, операции ALU, MAC или сдвига).
watchpointHaltOnRegisterWriteInComputation 0x0080 Выполнение кода останавливается, когда любое значение записано в регистр во время вычислений процессора (например, операции ALU, MAC или сдвига).
watchpointHaltOnUnderflow 0x0100 Выполнение кода останавливается, когда происходит недогрузка при чтении любого значения из ячейки watchpount.
watchpointHaltOnOverflow 0x0200 Выполнение кода останавливается, когда происходит переполнение при записи любого значения в ячейку watchpount.

Используется для указания типа watchpoint, которую представляет объект ADspWatchpoint.

Применяется к ADspWatchpointList

.

Функция Знач. Описание
watchpointMemoryInclusive 0 Просматриваются ячейки памяти внутри указанного диапазона адресов (включительно), в обозначенном типе памяти.
watchpointMemoryExclusive 1 Просматриваются ячейки памяти вне указанного диапазона адресов (исключительно), в обозначенном типе памяти.
watchpointRegister 2 Просматривается указанный регистр.
watchpointHardwareStack 3 Просматриваются проталкивания в стек и выборки из стека для указанного стека.

[Ссылки]

1. VisualDSP API программирования FLASH для процессоров Blackfin.
2. PGO Linker: инструмент размещения кода для процессоров Blackfin.
3. Windows Automation API site:msdn.microsoft.com.
4. VisualDSP: что такое BTC?

 

Добавить комментарий


Защитный код
Обновить

Top of Page