新闻中心

EEPW首页>嵌入式系统>设计应用> 基于PXA310平台的温湿度传感器设计

基于PXA310平台的温湿度传感器设计

作者: 时间:2016-12-01 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201612/324471.htm

▲图2 驱动程序流程图


  上述函数中start_trans; write_byte; read_data; read_byte 分别利用PXA310 引脚模拟时序完成启动传输、写字节,读一位数据和读字节的操作。

  内核tasklet_schedule() 调度执行指定的tasklet,在获得运行机会之前只会调度一次,如果在运行时被调度, 则完成后会被再次运行。
  wait_for_completion()这个函数进行一个不可打断的等待,如果有代码调用它,并且没有完成这个任务,结果会是一个不可杀死的进程。copy_to_user()将内核空间数据传向上层用户空间,并让上层测试程序做进一步处理。
  3.3 Linux 温湿度传感器设备阻塞操作
  由于温湿度传感器测量需要一定时间,为提高系统运行效率和实时性,在驱动程序中阻塞线程,交出内核控制权,等待操作完成后唤醒线程,提高系统利用率。complete()在函数中就是唤醒一个等待的读取线程。任务队列实现函数如下所示。

  Tasklet可以使测量操作在系统负荷不重时被调用,或是被立即执行,但始终不会晚于下一个CPU clock.
  Tasklet 始终在中断期间运行,并且在调度他的同一CPU 上运行。对比单片机系统,在单线程情况下,一般在sht10_read()中调用2 次measure_ sht10()来等待测量完成,测量效率依赖2 次测量消耗的时间;但在Linux 驱动程序中,使用Tasklet 方式操作,2 次测量过程不会对其他线程产生影响,在有其他实时事件需要及时处理时(如网络,视频),可以更有效提高驱动运行效率,降低对其他实时处理产生的影响。
  4 温湿度传感器测试与验证
  驱动程序完成以后,需要相应测试程序验证驱动程序编写的正确性。由于驱动程序中不能对数据进行浮点数运算,所以测试程序必须将驱动程序传递来的数据进行浮点数运算才能得到相应的温湿度值。


评论


技术专区

关闭