一场游戏一场梦

在我的歌声里早已没有你

My Links

Blog Stats

留言簿(0)

随笔分类

随笔档案

文章档案

其他blog -.-


搜索

最新评论

阅读排行榜

评论排行榜

关于DSP/BIOS和mini-driver的一些问题

其实ddk文档说的很清楚了。不过我还是要记录一下几个要点,暂时可能又用不到了,我的记忆力是越来越不行了
以前认为凡事只要掌握规律就行,现在发现这太极端。其实有些事不用关心那么多,记住就行,真是越来越懒了。。

1.包驱动
IOM_Packet是GIO,PIO,SIO class driver和mini-driver通讯用的数据结构,通过内部一些成员,class driver和mini-driver之间可以共享一些ram.
2.函数指针表
IOM_Fxn 是一个表,这个表是GIO,PIO,SIO 接口和mini-driver间的一个对应,如GIO_write 会调用mdSubmitChan
3.chan
其实chan到底是什么很难用一句话来描述,chan是自己设计的,根据不同的需要可以设计不同的chan. 在内部一般chan的object的handle通常就是class driver中的handle。这个handle可以是mini-driver MEM_alloc出的,也可以是static的。
4.完成IO
完成IO很简单,就是一个callback.这个calback是class driver提供的。如果不打算开发新的class driver,那么只需要在想要完成的时候callback就行了,一般这个callback可以放在chan的object里。不同的chan可以callback不同的。比如ISR里callback,于是class可以在callack里发出信号,而此时一个block中的class 接口函数会及时地resume.
5.排队
排队机制不是必须的,c64xx_pci.c很好地做出了一种通用的排队机制
6.相关的接口
6.1 CSL chip support library(i2c,cache,edma,irq,......)
6.2 BIOS(sem,mbx,que,tsk,hwi)

忽略了一个IOM。运行中IOM没有一个实体,它只是一个接口规范,定义IOM_Packet Fxn等。

设计中应当将实际的设备,on-chip 或者 off-chip 的抽象成device,而一个device其实只是一个IOM_Fxn 在和class driver通讯。对于同一个设备的不同用法,可以抽象出chan,再某个chan上对应一种操作,一切都取决于实际的用途。

isr的问题。1.event要map到cpu(c64xx是4-15)2.event类型要看对应寄存器,文档写interrupt flag,有的写 interrupt src.大伤脑筋,以后一定要用interrupt flag,有时后flag居然在status register里。src是只要访问就自动清,没什么用。可以在刚进isr的时候判断一下,0就return.

用bios时千万不要isr前加interrupt词,不用bios时一定要加。这个保留词和栈操作有关,具体不研究,反正不乱用。

头文件一个要加。这个鬼编译器没有头文件也可以引用一个函数,即使参数不一样,也不报个错,等待自己的就是崩溃。另外像刚进一个函数参数都对的,进去了就变了的情况也多半是没加头文件。

另外还有一些代码无法调试,无汇编的情况,一般是启用的优化导致。一些static过程,比如只用了一次的static过程,会直接优化到caller内部。在static 过程 源代码无法下断点。真是伤害脑筋啊,因为我以前也不知道,接到一个老的工程他自己也不知道就优化。搞的我很郁闷,其实release就是优化的,为什么debug还搞呢

mdBindDevice时内部可能不能用assert.这个我还不清楚原因。用了也没什么大的影响,就是无法go main。

posted on 2009-07-14 22:03 fdo 阅读(1233) 评论(3)  编辑 收藏

Feedback

# re: 关于DSP/BIOS和mini-driver的一些问题 2009-07-16 12:22 hATEmATH的网上田园

差点就选择做bsp的人木然飘过。。。

# re: 关于DSP/BIOS和mini-driver的一些问题 2009-07-21 19:47 fdo

关于跑飞。据我的经验,跑飞一般都是代码破坏了OS的代码,包括数据。在仿真时突然断了,可能是DSP乱跑,当然jtag也乱了。
比如
Void foo(Char bufptr,Uns bufcnt)
{
    Char cbuf[64];
    memcpy(cbuf,bufptr,bufcnt);/*bufcnt如果大于64就会触及foo栈,所以代码里面一定要做assert。*/
}

# re: 关于DSP/BIOS和mini-driver的一些问题 2009-07-21 22:11 凡客

有点看不懂,复制一份慢慢研究,
谢谢


标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]