📄 createobj.m
字号:
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 + -