Замена функции памяти кода

Этот пример показывает, как задать заменяющее отображение кода для функции памяти. Пример задает отображение для функции memcpy программно. Также можно использовать Code Replacement Tool, чтобы задать то же отображение.

  1. Создайте табличный файл определения, который содержит функциональное определение. Например:

    function hTable = crl_table_memcpy()
    
  2. В теле функции составьте таблицу путем вызова функционального RTW.TflTable.

    hTable = RTW.TflTable;
    
  3. Создайте запись для отображения функции с вызовом функции RTW.TflCFunctionEntry.

    % Create entry for void* memcpy(void*, void*, size_t)
    fcn_entry = RTW.TflCFunctionEntry;
    
  4. Параметры записи функции множества с вызовом функции setTflCFunctionEntryParameters.

    % Set SideEffects to 'true' for function returning void to prevent it from 
    % being optimized away.
    setTflCFunctionEntryParameters(fcn_entry, ...
                                   'Key',                      'memcpy', ...
                                   'Priority',                 90, ...
                                   'ImplementationName',       'memcpy_int', ...
                                   'ImplementationHeaderFile', 'memcpy_int.h',...
                                   'SideEffects',              true);
    
  5. Создайте концептуальные аргументы y1, u1, u2 и u3. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы getTflArgFromString и функций addConceptualArg, чтобы создать и добавить аргументы.

    arg = getTflArgFromString(hTable, 'y1', 'void*');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(fcn_entry, arg);
    
    arg = getTflArgFromString(hTable, 'u1', 'void*');
    addConceptualArg(fcn_entry, arg);
    
    arg = getTflArgFromString(hTable, 'u2', 'void*');
    addConceptualArg(fcn_entry, arg);
    
    arg = getTflArgFromString(hTable, 'u3', 'size_t');
    addConceptualArg(fcn_entry, arg);
    
  6. Скопируйте концептуальные аргументы в аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызов функции copyConceptualArgsToImplementation, чтобы создать и добавить аргументы реализации в запись путем копирования соответствия с концептуальными аргументами.

    copyConceptualArgsToImplementation(fcn_entry);
    
  7. Добавьте запись в заменяющую таблицу кода с вызовом функции addEntry.

    addEntry(hTable, fcn_entry);
  8. Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.

Похожие темы