回复 #19 cjaizss 的帖子
我先说下自己对硬件驱动功能的理解.驱动就是能够驱使硬件工作,也就是在被驱动硬件的引脚上产生不同的高低电平.
在我的思维里一直认为,驱动要不用汇编来写,要不用c语言来写,不管用那种语言写,他们都是软件. 而被驱动的东西一堆电路逻辑(各种芯片和与非门的组合),属于硬件. 而硬件一旦设计好,每个芯片就会有自己规定的时钟脉冲.(我指的是那种不是傻瓜式的设计:-)
是软件指令让硬件有了不同的时序逻辑的组合.(因为指令(二进制代码)能使芯片的某个引脚产生高低电平). 从而产生出不同的功能.(一般也就是读和写)
对驱动程序的理解:
我只是见过先向某个端口赋值,然后在从某个寄存器读/写值.
如有不对,请各位拍砖吧,^_^
cjaizss 兄,
我可以在网上飕飕关于"gpio来模拟硬件接口"的文章,学习下.
PS.
没设计过硬件,纯粹站在软件的角度上思考软件为什么能够使硬件产生这么大的功能.
[ 本帖最后由 怪怪虎 于 2009-12-30 10:23 编辑 ] 原帖由 怪怪虎 于 2009-12-30 10:07 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
我先说下自己对硬件驱动功能的理解.
驱动就是能够驱使硬件工作,也就是在被驱动硬件的引脚上产生不同的高低电平.
在我的思维里一直认为,驱动要不用汇编来写,要不用c语言来写,不管用那种语言写,他们都是软件....
"时钟脉冲"改成"时序"
驱动用什么语言来写这是次要的,是控制GPIO还是在用处理器现成的硬件接口什么都好,主要是写驱动的人知道自己在干什么!!!这一点最重要.很多人为什么编程编不好就是因为他们不知道自己在干什么.如果自己都不知道自己在干什么,那你自然也不能指挥处理器,让它干什么.
处理器依然是电路,是硬件,区别只在于处理器很灵活而已.
[ 本帖最后由 cjaizss 于 2009-12-30 10:26 编辑 ] 我测试一下! 偶进一步的理解:
>>>
信号线电平的高低是可以通过某条指令控制的.
电路(硬件)设计好后,它的读写的时序电路也就固定好了.
时序图其实还给编程人起了一个限定作用,比如读/写信号的有效一般要在地址/数据在信号线出现后.
时序图加上自己特定的应用要求,就构成了"协议".
用code实现驱动的过程其实就是在实现"协议",BSENT的(图六)流程图其实就是协议的一个定义.
cjaizss,
现在回过头来看你给share的驱动代码,它(RD_MDIO1 和WR_MDIO)应该是在设置地址线/信号线/数据线的高低电平. 对否? 原帖由 瑞儿 于 2009-12-30 12:23 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
我测试一下!
测试什么? 原帖由 怪怪虎 于 2009-12-30 13:27 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
偶进一步的理解:
>>>
信号线电平的高低是可以通过某条指令控制的.
电路(硬件)设计好后,它的读写的时序电路也就固定好了.
时序图其实还给编程人起了一个限定作用,比如读/写信号的有效一般要在地址/数据在信号 ...
呵呵,你理解的没错 我觉得在有的时候,汇编指令用的时间长度是不确定的.
比如X86 -32 汇编指令里面可以 MOV 0XC0001234, $EAX. (把内存的东西移动到寄存器,也许语法有点小错误)
这条指令的执行时间依赖于访问内存的时间,这时这段内存有可能在CACHE里,有可能在主存里.所以执行时间是不确定的.
当然,有的指令, 比如 INC %EAX 之类的执行时间应该是固定的, 因为只要操作寄存器就 可以了.
不过对于笔记本电脑上的CPU来说,还可以设置成工作在不同的主频下, 所以即使同样操作,用了同样的CYCLE, 最后的真正执行时间也是不一样的.
回复 #12 cjaizss 的帖子
斑竹, 你写的以太网卡 驱动 ? 原帖由 怪怪虎 于 2009-12-30 13:27 发表 http://linux.chinaunix.net/bbs/images/common/back.gif偶进一步的理解:
>>>
信号线电平的高低是可以通过某条指令控制的.
电路(硬件)设计好后,它的读写的时序电路也就固定好了.
时序图其实还给编程人起了一个限定作用,比如读/写信号的有效一般要在地址/数据在信号线出现后.
...
1)
有些信号线的电平是可以受某条指令控制的。
有些信号线的电平是不受指令控制的。
有些信号线的电平反而是用来改变指令流程的。
2)
“简单”电路设计好了,它的读写的时序也就固定了。得加上“简单”俩字。复杂一点的,很可能是可变的。更不用说智能电路。
3)
第三点对。搞与硬件相关的代码设计,大多数场合必须考虑“时间”。不仅仅是时序,时延等都得考虑。譬如设计软驱的驱动代码。 原帖由 beepbug 于 2009-12-31 13:54 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
1)
有些信号线的电平是可以受某条指令控制的。
有些信号线的电平是不受指令控制的。
有些信号线的电平反而是用来改变指令流程的。
2)
“简单”电路设计好了,它的读写的时序也就固定了。得加上“简单” ...
大拿说的好,同意.
也同意cjaizss大拿的说法.