发表于:2004-03-02 13:38:00
楼主
CAN 具有共亨广播的功能,但是德国人没有认真地研究透它,
就慌慌张张地定义在总线上了,
犯了一个大错,
而且是个致命的错。
z893就不一样了,它将共亨广播的功能定义为4个字节,
0100h、0101h、0102h、0103h,
并且将它组态到[引导帧]的固定位置,
即引导码的第3-7字节,
z893称之为[高速信息通道]或是[高速公路]。
任何工作站向这四个字节写入了一个数据,
这个数据便会自动地在下个启动周期内,
更新引导码的第3-7字节,
在[软猫]的安排下,
收录在工作站的固定寄存器内[指在网的全部工作站]。
不需要任何线程的安排,
属准静态特性。
前者需线程的安排,
后者却不需要;
更为麻烦的是,由于CAN 是定长帧,
完全没有空间让它作这种升级,
真要升级,
恐怕就要重新制定CAN 3.0 的新标准了。
如果真打个比仿来说明两者之间的差别,
我只能说:
CAN 好比是原始人刚刚发明了用绳子节算东西,
而z893已是春秋战国的秦始皇。[说过头了一点,别见怪,开个玩笑!]
为了加深对它的理解,我们下面结合一个实例看看,
假定某[老总]应[长虹总老总]的要求,派有这样一个设计:
需要通过PC显示屏上的一个菜单,
去控制[某未来星]彩电的音量。
***********************************************
软件工程师接到这个任务之后,他将按下列流程编程:
(1)约定[某未来星]的音量口地址=0101h单元,
(2)约定d=#0ffh为最大,d=#00h为最小,
(3)当[音量+]按扭按下后执行下面程序之一即可:[注]win98me
用Delphi5.0_汇编语言编写的这段程序。
asm
lea ebp, d1300
mov al,04h
mov [ebp+1],al //操作码=04h[加]
mov al,01h
mov [ebp+2],al //地址H=01h
mov al,01h
mov [ebp+3],al //地址L=01h
mov al,01h
mov [ebp+4],al //长度=1h
mov al,00h
mov [ebp+5],al //in:长度=0h
mov al,01h
mov [ebp+6],al //out:长度=1h [注]每次增量的数据已存d1500[0]单元
call a100 //[注]软猫子程序:启动交换,置音量+
end;
用高级语言编写的这段程序。
d1300[1]:=04h; //操作码=04h[加]
d1300[2]:=01h; //地址H=01h
d1300[3]:=01h; //地址L=01h
d1300[4]:=01h; //长度=1h
d1300[5]:=00h; //in:长度=0h
d1300[6]:=01h; //out:长度=1h [注]每次增量的数据已存d1500[0]单元
a100; //[注]软猫子程序:启动交换,置音量+.
***********************************************
硬件工程师接到这个任务之后,他将按下列流程编程:
(1)假定[某未来星]执行的cpu模块为51系列兼容的某单片机,
(2)约定38H寄存器为音量控制工作区, [D/A]
(3)约定d=#0FFH为最大,d=#00H为最小,
下面用ICExplorer.51汇编语言编写这段程序:
MOV 38H, 65H ; 65H寄存器=[高速通道][数据库#0101H], 仅一条传送语句啊!
RET
***********************************************
比较以上例程不难发现,勿论采用何种语言,
emdos编程仅仅是个[贴字软件],
不仅非常简单,
而且在整个项目开发中:
(1)软件工程师是采用何种方法置[音量+]或者是[音量-],
他不需要对硬件工程师加以说明;
(2)硬件工程师采用何种单片机,使哪个寄存器,
他也不需要向软件工程师频频通报。
双方都具有相对的兼容性和灵活性。使用[高速通道],连程序都简化了。
如果用CAN ,或者其它的方式来实现,恐怕就要复杂多了。
在一个实际的工程中,
修改总是经常的,
软硬分家会极大地降低工程费用。
***********************************************
小插曲:
硬件工程师是个[鬼],他连一句程序都想不写,
只将ROM地址0201单元内的#0FFH改写成#38H,
OK!
竟然也能控制成功。
***********************************************
是什么原因?留在下贴讲。
[后续] 米d. QQ158326068