⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createobj.m

📁 这是一个关于MATLAB的函数
💻 M
📖 第 1 页 / 共 2 页
字号:
                      
case 7, % rpointer (->rnumeric->registerobj)
    symtab = ccs.rpointer( ...
                           'link'                ,cc, ...
                           'procsubfamily'       ,si.procsubfamily, ...
                           'name'                ,si.name,      ...
                           'endianness'          ,si.dspendian, ...
                           'bitsperstorageunit'  ,r_bitspersu,  ...
                           'reginfo'             ,si.location,  ...
                           'size'                ,si.size,      ...
                           'storageunitspervalue',1,            ...       
                           'timeout'             ,cc.timeout,   ...
                           'reftype'             ,si.type, ...
                           'isrecursive'         ,si.member_pts_to_same_struct, ...
                           'referent'            ,si.referent ...
                        );
    
case 8, % renum (->rnumeric->registerobj)
    symtab = ccs.renum(   ...
                          'link'                ,cc, ...
                          'name'                ,si.name, ...
                          'label'               ,si.label, ...
						  'value'               ,si.value, ...
						  'size'                ,si.size, ...  
						  'bitsperstorageunit'  ,r_bitspersu, ...  
						  'endianness'          ,si.dspendian, ...  
                          'reginfo'             ,si.location, ...
                           'procsubfamily'      ,si.procsubfamily, ...
                          'storageunitspervalue',1, ...
                          'timeout'             ,cc.timeout ...
                    );

case 9, % rbitfield
case 10, % rstring (-> rnumeric -> registerobj )
    symtab = ccs.rstring(  ... 
                           'link'               ,cc,                ...
                           'name'               ,si.name,           ...
                           'reginfo'            ,si.location,       ...
                           'size'               ,si.size,           ...  
                           'bitsperstorageunit' ,r_bitspersu,       ... 
                           'endianness'         ,si.dspendian,      ...  
                           'timeout'            ,cc.timeout,        ...  
                           'procsubfamily'      ,si.procsubfamily   ...
                       );

    
% STRUCTURE OBJECT ---------------------------------------
                     
case {11,12},  % struct (Container Class)
    container = ccs.containerobj(   'containerobj_address'      ,si.address, ...
                                    'containerobj_membinfo'     ,si.members, ...
                                    'containerobj_link'         ,cc);                            
    symtab = ccs.structure( ...
                        'name'                  ,si.name, ...
                        'address'               ,si.address, ...  
                        'size'                  ,si.size, ...  
                        'storageunitspervalue'  ,si.sizeof, ...  
                        'member'                ,container, ...
                        'link'                  ,cc);

% FUNCTION OBJECT ---------------------------------------

case 13,  % function
    if si.islibfunc,
        symtab = ccs.function( ...
                          'procsubfamily',si.procsubfamily, ...
                          'name'         ,si.name, ...
                          'uclass'       ,si.uclass, ...
                          'islibfunc'    ,si.islibfunc, ...
                          'timeout'      ,cc.timeout, ...
                          'link'         ,cc, ...
                          'funcinfo'     ,si.funcinfo);
    else
        symtab = ccs.function( ...
                          'procsubfamily',si.procsubfamily, ...
                          'name'         ,si.name, ...
                          'address'      ,si.address, ...
                          'filename'     ,si.filename, ...
                          'uclass'       ,si.uclass, ...
                          'islibfunc'    ,si.islibfunc, ...
                          'variables'    ,si.funcvar, ...
                          'funcdecl'     ,si.funcdecl, ...
                          'timeout'      ,cc.timeout, ...
                          'link'         ,cc, ...
                          'funcinfo'     ,si.funcinfo);
    end    
    
    % note: 'funcinfo' is deliberately placed at the end of constructor to 
    % ensure no error (constructor uses funcinfo together with 'islibfunc' & 'link' properties
                         
% ------------------------------------------------------------

case 14, % reference
    error('Reference is not supported');
    
otherwise,
    error(['Symbol type:''' symi.uclass ''' is not supported']);
end

% ------------------------------------------------------------
function si = checkIfRecursivePointer(si)
if ~strcmp(si.uclass,'structure'),    return;
end
member_names = cell( fieldnames(si.members)' );
for name = member_names,
    if strcmp(si.members.(name{1}).uclass,'pointer') & si.members.(name{1}).member_pts_to_same_struct>0,
        ptr_indicator = si.members.(name{1}).member_pts_to_same_struct;
        if ptr_indicator==1, % members points to same struct
            si.members.(name{1}).referent = si;
        elseif ptr_indicator==2, % members is a ptr to a ptr to same struct (eg. struct **)
            ref = struct(   ...
                'name','',...
                'size',1,...
                'location',[],...
                'address',[],...
                'uclass','pointer',...
                'type',si.members.(name{1}).reftype,...
                'bitsize',si.members.(name{1}).bitsize,...
                'reftype',GetRefType(si.members.(name{1}).reftype),...
                'referent',si,...
                'member_pts_to_same_struct',1 );
            si.members.(name{1}).referent = ref;         
        else
            % do nothing
        end
    end
end

% -----------------------------------
function reftype = GetRefType(type)
astx = findstr('*',type);
if ~isempty(astx)
    reftype = deblankall( type(1:astx(end)-1) );
end
%--------------------------------------
function str = deblankall(str)
len = length(str);
str = deblank( str(len:-1:1) );
str = deblank( str(length(str):-1:1) );
%--------------------------------------
function [uci,si] = CheckIfChar(uci,si)
if uci==1 & strcmpi(si.type,'char'), % numeric
    uci = 5;
    si.uclass = 'string';
elseif uci==6 & strcmpi(si.type,'char'), % rnumeric
    uci = 10;
    si.uclass = 'rstring';
end
%----------------------------------------
function [si,bitspersu,r_bitspersu,storeunitperval] = SetProcSpecificValues(subfamily,si)
si.procsubfamily   = ['C' dec2hex(subfamily) 'x'];
if subfamily>=112,
    error(['Processor ' si.procsubfamily 'x is not supported.']);
elseif subfamily>=96, % C6xx
    bitspersu       = 8;
    r_bitspersu     = 32;
    storeunitperval = 4;
elseif subfamily>=80, % C54x
    bitspersu       = 16;
    r_bitspersu     = 16;
    storeunitperval = 1;
else
    error(['Processor ' si.procsubfamily 'x is not supported.']);
end
%----------------------------------------
function si = SetEndianValue(ti_endian,si)
if ti_endian.isbigendian,
    si.dspendian = 'big';
else                
    si.dspendian = 'little';
end
%-----------------------------------------
function si = SetEmptyName(si)
if isempty(strmatch('name',fieldnames(si),'exact')),
    si(1).('name') = '';
end

% [EOF] CREATEOBJ.M

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -