面试准备

1.LCD驱动分为两层:抽象层fbmem.c文件和具体操作硬件的s3c2410fb.c文件,应用层调用open等函数会调用驱动中fbmem.c文件中file_operations结构体中的open等函数,这些函数中会根据次设备号从一个fb_info结构体数组中作为下标找到调用的fb_info结构体中的 open等函数,而这些fb_info结构体的具体实现都是由下层的s3c2410.c文件实现的,这就是LCD的驱动框架。Fb_info结构体需要设置的内容有:设置固定参数、可变参数、以及一个fbops结构体用于设置具体操作硬件的函数。其他的设置中还需要设置调色板。操作硬件时先对物理地址进行映射后直接操作虚拟地址即可。显存分配framebuffer使用的专用的函数,这个函数中输入显存的物理地址,返回可直接操作显存的虚拟地址。

 

2.分层分离的设备驱动模型使多种相同类型的设备的驱动管理更加方便,这是相对于单片机编程的一个不同之处。在编写驱动的时候只需要关注如何编写操作硬件的那一个层需要上传给抽象层的数据结构的填充即可,而不需要关注抽象层的逻辑实现。

 

3.触摸屏驱动使用的输入子系统,也是分层结构模型,分别为:evdev.cinput_dev.c两个层。而我们只需编写evdev.c文件即可,这里面涉及到硬件相关的操作。平台设备驱动设备模型、总线设备驱动模型,以及后面的IIC设备等等,这些都是使用了这种分层分离的设备驱动模型的概念。触摸屏驱动中硬件触发中断,input_dev.c文件上报事件给evdev.c。触发按键后可得到并上报按键值等信息。在中断处理程序中,启动ADCAD转换结束后,进入ADC中断,在ADC中断中启动定时器,定时器到时间后重新启动ADC读数。

 

4.在STM32单片机的编程中使用官方的固件编程,对设备的操作流程也是分配、设置、注册结构体,这种思想在嵌入式驱动中也是如此,除此之外嵌入式应用中也可以运用这种思想,而且可将每个具体的功能模块以注册入队列或数组的思想,在需要时取出进行管理。

 

5.在学习过程中,学到很多:比如经常会遇见问题,如内存泄露,可能是链表中分配内存,涉及到malloc函数在多层编程框架中的使用问题;应用层winform界面编程中控件的跨线程操作必须使用委托;在底层编写中常运用到位域这种特殊的用法;在定义寄存器的地址方便操作时,常使用volatile关键字struct volatile unsigned long gpbcon=ioremap(0x56000010);//将物理地址映射为虚拟地址,物理地址是不能直接操作的。相邻寄存器的头指针相差4字节;如果存储像素的大小为一个字节,而硬件需要像素的格式为2个字节,这就需要调色板,这在上位机和下位机中都使用这种技术。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值