📄 deref.m
字号:
function nn = deref(pp,index)
%DEREF
% MM = DEREF Constructs a Memory object that represents
% the variable which is pointed to by this object.
% Copyright 2002 The MathWorks, Inc.
% $Revision: 1.7 $ $Date: 2002/05/06 20:50:24 $
error(nargchk(1,2,nargin));
if ~ishandle(pp)
error('First Parameter must be a RPOINTER handle');
end
if nargin==1
if prod(pp.size)==1, index = 1;
else error('Provide the index of the pointer element you want to dereference ');
end
else
if ~isnumeric(index)
error('Second Parameter must be numeric ');
elseif prod(index)>1
error('Index cannot be greater than 1 for register objects ');
end
end
% si - info structure from CC.LIST method
si = pp.referent;
% Get 'address' prop
si.address = [read(pp,index) GetPage(pp)];
% If referent is VOID,
si = GetSymbolInfoForVoidType(pp,si);
% If referent is STRUCTURE, add 'address' info
si = GetStructureAddress(pp,si);
% Create object
nn = createobj(pp.link,si);
%------------------------------
function si = GetSymbolInfoForVoidType(pp,si)
if ~strcmpi(si.type,'void'), return; end;
si(1).size = 1;
si(1).uclass = 'numeric';
if strcmp(pp.procsubfamily(1:2),'C6'), si.type = 'uint32';
elseif strcmp(pp.procsubfamily,'C54x'), si.type = 'uint16';
end
%-------------------------------------
function si = GetStructureAddress(pp,si)
if ~strcmpi(si.uclass,'structure'), return; end;
member_list = fieldnames(si.members);
for i=1:length(member_list)
member = si.members.(member_list{i});
if ~pp.isrecursive,
% add address property for each STRUCT member
si.members.(member_list{i}).address = [si.address(1)+member.offset, si.address(2)];
else
% set to correct address property for each STRUCT member
si.members.(member_list{i}).address = [si.address(1)+member.offset, si.address(2)];
end
end
% --------------------------------
function page = GetPage(pp)
if strcmp(pp.procsubfamily(1:2),'C6')
page = 0; % page does not matter
elseif strcmp(pp.procsubfamily,'C54x')
page = 1; % data page
end
% [EOF] deref.m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -