本帖最后由 laoxu 于 2016-7-25 08:45 编辑
问 ChipON讨了几片样片,V1核的KF8F335 和 V2核的KF8F4156,V1核的已玩的差不多了,总体感觉V1核的结构及指令集还算精练。
接下去玩 V2核的KF8F4156,V2核比V1核多了几条指令,RAM容量扩大了好几倍,SFR扩大了一页(官网上声称,SFR寻址不分页,现早已打破~~~ )
ROM扩大到 8K(需分页寻址,4K一页),记得 2013年, 在“侃单片机”版块,有过官方的 ChipON单片机介绍**,ROM是 8K一页(或许实际上由于制造成本问题,被缩减了,这就不过多讨论了)
增加了 硬件乘除法(16位*16位无符号乘法 和 16位/8位无符号除法)。
由于玩的不爽,吐槽一下 V2核指令系统 存在的问题(或许不算什么问题,只是俺水平太差劲,玩不转)。
1. ROM分页最不爽,不但用汇编编程极易出错,用C编程也容易被C编译器编译优化出错,如由于制造成本问题,一定要用到 ROM分页,但至少在指令中,保留不受分页限制的短跳转指令(即不受PAGE分页影响)。
比如下面常用的测试指令:
没分页时的书写格式:
INCJZ Rn
JMP AAA
BBB:
有分页时的书写必须改成如下格式:
PAGESET $
INCJZ Rn
JMP $+2
JMP BBB
PAGESET AAA
JMP AAA
BBB:
原来很简单的组合指令,在有ROM分页的V2核中,需增加那么多条指令,才能应用,超级不爽!
如有不受分页限制的短跳转指令,则好省掉一些指令,类似的测试跳步指令,程序中很多,有ROM分页的V2核,因此会增加好些代码长度,且无法优化。
2. SFR分页,受芯片制造成本影响,这分页避免不了,但是,能否增加针对 BANK 0页的寻址指令?
比如:B0MOV Rn, 0xa0 ; 将 BANK 0页 RAM地址 为 0xa0 的数据 送到 Rn 中,
在 用到 硬件乘除法 时,这种不停的对 BANK 分页,对程序的执行效率,影响很大,特耗费时间。
3. 硬件乘除法, 16位*16位无符号乘法 挺有用的,赞一个!
相比之下,16位/8位无符号除法,没啥大用处,如能做到 32位/16位无符号除法, 则一级棒了~~~
因为 32位/16位无符号除法,在 16位*16位无符号乘法 的配合下,计算 long 型除法、取模,以及 浮点数除法,有着 极大的好处,能精简优化这些运算,极大地提高ChipON单片机的除法运算速度。
目前按照 V2核的 16位/8位无符号除法, 结合 硬件乘法,最多只能 做到 int 型除法,取模,我编写了一下,极不满意,程序超长不简洁(主要是乘除运算寄存器需SFR分页,再者16位*16位的硬件乘法器,只能当8位*8位的硬件乘法器使用,需要好多格外的对乘法运算SFR寄存器赋0值指令),再者 用加减法模拟 int除法、取模,本身执行时间并不长,相比之下,用 V2核硬件乘除法 模拟的 int 型除法、取模,就没有多大优势了。
|