本帖最后由 snown 于 2018-3-16 14:50 编辑
内核态,对双缓存中buf1进行数据内核到用户空间的拷贝时,会影响到buf2上数据采集。
处理器:I.MX6Q
内核:Linux 3.0.35
内存:4*2GB DDR3 、1*8GB emmc/NANDFLASH
详细描述:内核模块程序中,我们实现了对设备驱动的注册之后,完成对ADS1282的初始化后,kmalloc申请了两块用于存放数据的内存,然后让ADC进入工作状态,双缓存交替工作,其中一个存采集数据时,另一个将采完的数据从内核空间拷贝到用户空间,通过应用程序最终将数据文件存放到8GB emmc/NANDFLASH上。但是采得的数据效果十分不好,数据效果如下图所示,对此我们做过以下尝试:
(1)期望的数据效果
(2)存在毛刺的数据
1.单缓存时,数据采集到的数据效果优。
2.双缓存时,通过FTP方式启动,将采集的数据传回PC,数据效果优。
3.双缓存时,将外接固态SSD挂载到开发板上,直接将数据存入SSD而不是emmc/NANDFLASH上时,数据效果良好,有个别数据有毛刺。
4.双缓存时,copy_to_user方式和mmap方式实现内核空间到用户空间的数据拷贝,两种方式采得的数据均是有毛刺,但比存入emmc/NANDFLASH的数据效果要好。
总结 问题大概是在应用层调用write函数向内存写数据的时候,影响到了内核中的SPI数据读取
|