我正在研究模板工具包脚本。我的脚本需要将十六进制数转换为二进制数,并需要将该二进制数应用于 i2c 编程。我坚持返回二进制值并使用这些位来编程 i2c。
[% MACRO i2c_write(rv,address,data) PERL -%]
my %rv;
my $address = hex($stash->get('address'));
my $data = hex($stash->get('data'));
my $bin_add = sprintf("%08b",$address);
my $bin_data = sprintf("%08b",$data);
$rv{bin_address} = $bin_add;
$rv{bin_data} = $bin_data;
[% END -%]
[% i2c_write(bin_value,'0x10','0x3B') %]
Expected output:
bin_value.bin_address = 00010000
bin_value.bin_data = 00111011
我想将这个 bin_value.bin_address 和 bin_value.bin_data 解析为另一个宏(仍在编写宏)。
在另一个宏中,将获取每一位并打印每一位
您似乎想将哈希名称传递给宏并将值存储在该哈希中。您可以使用存储库来实现此目的,例如:
p.pl:
use v5.38;
use Template;
my $template = Template->new({
INCLUDE_PATH => '.', # or specify your own directory
EVAL_PERL => 1, # enable Perl code in template
});
my $vars = {
bin_value => {
bin_address => '',
bin_data => '',
}
};
$template->process('example.tt', $vars) || die $template->error();
示例.tt:
[% MACRO i2c_write(rv_name, address, data) PERL -%]
my $hash_name = $stash->get('rv_name');
my $rv = $stash->get($hash_name);
my $address = hex($stash->get('address'));
my $data = hex($stash->get('data'));
$rv->{bin_address} = sprintf("%08b", $address);
$rv->{bin_data} = sprintf("%08b", $data);
[% END -%]
[% i2c_write('bin_value', '0x10', '0x3B') -%]
[% bin_value.bin_address %]
输出:
00010000