接下来的打算

接下来,一方面要赶紧测试提速的芯片和继续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这个循环变量交过去,本来还想问问别人的,但是后来想想,这种东西应该就是函数接口的问题,已经不是我能关注到的了,所以就放弃了,不知道最终能不能实现

posted @ 2012-03-21 21:28  poiu_elab  阅读(413)  评论(0)    收藏  举报