接下来的打算
接下来,一方面要赶紧测试提速的芯片和继续TypeB的coding,另一方面,比如晚上我就想写写基本的接口,从RS-232开始吧。
今天下午写了个新的脚本函数,就是之前的生成序列的函数的拓展,添加了进制,和位宽的支持,比如现在已经支持HEX/DEC/OCT/BIN 这4种进制数的输入,接着添加了位宽,比如你想随便初始化一个1KX32的ROM,写了一个*.rom文件,位宽就要限定为8(HEX),所以这个功能也是很好用的。下面附上代码
function! Array_gen(begin_num, end_num, step_num, radix_num, width_num)
let L1=a:begin_num
while L1<a:end_num+1
if(a:radix_num==16) " 16-radix-->HEX
if(a:width_num==2)
let L2=printf("%02X", L1)
elseif(a:width_num==4)
let L2=printf("%04X", L1)
elseif(a:width_num==8)
let L2=printf("%08X", L1)
else
let L2=printf("%X", L1)
endif
elseif(a:radix_num==10) " 10-radix-->DEC
if(a:width_num==2)
let L2=printf("%02d", L1)
elseif(a:width_num==4)
let L2=printf("%04d", L1)
elseif(a:width_num==8)
let L2=printf("%08d", L1)
else
let L2=printf("%d", L1)
endif
elseif(a:radix_num==8) " 8-radix-->OCT
if(a:width_num==2)
let L2=printf("%02o", L1)
elseif(a:width_num==4)
let L2=printf("%04o", L1)
elseif(a:width_num==8)
let L2=printf("%08o", L1)
else
let L2=printf("%o", L1)
endif
elseif(a:radix_num==2) " 2-radix-->BIN
let nr = L1
let L2 = ''
while nr >= 1
let remainder = nr%2
let quotient = nr/2
let nr = quotient
let L2 = printf("%d", remainder) . L2
endwhile
if(a:width_num==4)
let L2=printf("%04d", L2)
elseif(a:width_num==8)
let L2=printf("%08d", L2)
elseif(a:width_num==12)
let L2=printf("%012d", L2)
elseif(a:width_num==16)
let L2=printf("%016d", L2)
else
let L2=printf("%d", L2)
endif
endif
exec "norm o" . L2 . "\<ESC>"
let L1=L1+a:step_num
endw
endfunction
我发现printf活用起来还真是个厉害的函数,本来我打算用引用外部程序转化的方法,但是发现比如你在vim里面的变量L1,没法传给外面的函数来给你进行进制转化,学到了一个bc的命令。比如$ echo 'obase=16;100' | bc这个东西就能把100转化成HEX的数值,再有比如你在SHELL编程的时候“”里面是支持变量调用的(‘’不支持)。所以可以有这样的命令,$ set di=2; echo "obase=$di;100" | bc就能把100转化成BIN,不多说,system来取得外部程序的返回值的话,没法把L1这个循环变量交过去,本来还想问问别人的,但是后来想想,这种东西应该就是函数接口的问题,已经不是我能关注到的了,所以就放弃了,不知道最终能不能实现

浙公网安备 33010602011771号