博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一句memset引发的疑案
阅读量:5879 次
发布时间:2019-06-19

本文共 597 字,大约阅读时间需要 1 分钟。

最近在调试关于视频监控相关应用的时候,需要将在接收端接收的数据切换至TVOUT上显示,但切换过去之后,执行某一次的tvout刷新的过程中,某一次的memset动作会使dma停止工作,如果把memset的区域长度减少则没有问题,将需要memset区域分成两次执行,中间加入一个小延时也无问题,如果把libc的memset替换为自己实现的memset也没问题。当摄像头采集时,将环境变暗也无问题。

这里涉及了两个问题:

1、为什么用户态执行的函数能使工作在内核态的硬件工作不正常了呢?

2、自己写的memset和glibc里实现的有何差别,为何自己实现的不会出问题?

后来发现问题出在DMA的优先级配置上,芯片默认的优先级配置是arm核(cpu)对AHB的优先级是高于所有DMA优先级的,包括LCD、camera、L2等,降低CPU的AHB优先级至最低,则可以解决问题。

关于第二个问题,标准C库的memset为何如此高效呢?

后发现c库里面的memset是经过优化的,使用的都是ldm/stm指令的,该指令会访问内存中的连续地址数据,这些访问操作会被CPU合并成一个较长的内存原子访问操作(16bytes),这就有可能造成lcd dma在一段时间内不能获得内存的访问权限,而自己写的memset采用的是ldr/str指令,每次只会访问4byte的数据,这么短的操作对lcd dma的影响就很小了。

转载地址:http://tldix.baihongyu.com/

你可能感兴趣的文章
《C++语言入门经典》一2.6 表达式
查看>>
个人信息泄露 一条短信盗走积蓄
查看>>
《MonoTouch开发实践指南》一1.1 搭建开发环境
查看>>
如何做好ERP项目经理?
查看>>
Alphabet财报让华尔街兴奋:股价还会涨 买买买
查看>>
数据专家必知必会的7款Python工具
查看>>
关于数据分析,管理者常犯的4个错误
查看>>
A Neural Probabilistic Language Model
查看>>
如何使用网络视频服务器的权限管理
查看>>
WannaCry警示:学会检测和减轻云端恶意内容
查看>>
光纤将在5G发展中发挥关键作用
查看>>
思博伦推出Temeva平台:“云中测试”成为可能
查看>>
移动CRM风起云涌 千亿级市场显现
查看>>
韩国SK电讯宣布成功研发量子中继器
查看>>
TCP - WAIT状态及其对繁忙的服务器的影响
查看>>
安全预警:全球13.5亿的ARRIS有线调制解调器可被远程攻击
查看>>
麦子学院与阿里云战略合作 在线教育领军者技术实力被认可
查看>>
正确看待大数据
查看>>
Facebook通过10亿单词构建有效的神经网络语言模型
查看>>
2016股市投资风向标 大数据说了算
查看>>