当前位置: 首页 > news >正文

嵌入式linux学习记录十三

  1. 这是 Linux 驱动开发中利用原子变量(Atomic Variable)实现“互斥锁(设备只能被一个进程打开)”的经典逻辑。
    /* 通过判断原子变量的值来检查LED 有没有被别的应用使用 */

    if (!atomic_dec_and_test(&gpioled.lock)) {

    atomic_inc(&gpioled.lock);/* 小于0 的话就加1,使其原子变量等于0 */

    return -EBUSY; /* LED 被使用,返回忙 */

    }
    /* 执行需要保护的资源 */
    /* 完成对资源操作后,把锁加1,恢复成资源可以使用的状态 */
    atomic_inc(&gpioled.lock);

  2. 这展示了在 Linux 驱动开发中,利用自旋锁(Spinlock)+ 普通变量(dev_stats)实现设备互斥访问(只允许一个进程打开)的另一种标准写法。
    spin_lock_irqsave(&gpioled.lock, flags); /* 上锁 */

    if (gpioled.dev_stats)

    { /* 如果设备被使用了 */

    spin_unlock_irqrestore(&gpioled.lock, flags); /* 解锁 */

    return -EBUSY;

    }

    gpioled.dev_stats++; /* 如果设备没有打开,那么就标记已经打开了 */

    spin_unlock_irqrestore(&gpioled.lock, flags); /* 解锁 */
    /* 对受保护资源进行操作 */
    /* 资源操作完成后,需要把普通变量(dev_stats)变成0,以恢复资源可操作性 */

    spin_lock_irqsave(&gpioled.lock, flags); /* 上锁 */

    if (gpioled.dev_stats) {

    gpioled.dev_stats--;

    }

    spin_unlock_irqrestore(&gpioled.lock, flags);/* 解锁 */


    解释:

    1. 自旋锁的角色(保镖):它的任务非常短命。它的存在仅仅是为了保护if (gpioled.dev_stats)dev_stats++这两行代码在多核并行时不被打扰。它就像一个保镖,护送进程安全地完成“检查并登记”这个动作。

    2. dev_stats的角色(登记簿):它的任务非常长命。一旦被写成1,它就会一直保持为1,直到用户层主动调用close()关闭设备。它负责长达几小时、甚至几天的硬件资源占有标记。

http://www.jsqmd.com/news/1000799/

相关文章:

  • Windows风扇智能控制终极指南:FanControl完全掌握手册
  • MPC5200B嵌入式处理器在汽车多媒体系统开发中的核心价值与实践
  • 经期女性选什么暖宫腰带?2026实测,深层舒缓经期腹痛 - 资讯报道
  • 3个创意场景:如何用Mi-Create为小米手表设计真正属于你的个性表盘
  • 3种方法彻底解决音乐平台加密文件:Unlock-Music全攻略
  • GBase 8s数据库安装包脚本核心配置文件init.ini解析
  • 用 AI 辅助 Bug 排查和测试用例生成:一套适合开发者的可验证工作流
  • Mac百度网盘终极加速指南:3步突破限速实现SVIP高速下载
  • 百度网盘macOS版下载限速破解指南:告别龟速下载的终极方案
  • DA380三轴振动传感器Linux内核驱动源码(I2C接口,含mir3da.c/h)
  • 如何快速修复系统组件和依赖库修复:VisualCppRedist AIO 终极解决方案
  • 如何快速掌握抖音直播数据抓取:DouyinLiveWebFetcher的完整实践指南
  • OpenClaw+Serverless 实战:自动生成阿里云函数计算代码、部署无服务应用
  • 2026东营市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 2026海南广告传媒公司注册避坑指南,四星以上优质财税代办口碑榜单推荐 - 信息热点
  • 实用指南:3步完成LaTeX PDF到PowerPoint的专业转换
  • 别再死记硬背了!用特勒根定理5分钟搞定‘黑匣子’电路分析题
  • 告别卡顿!用MPTCP/MPQUIC调度算法,让你的手机5G+WiFi网速飞起来
  • 魔兽争霸3终极优化指南:5分钟快速解决游戏兼容性问题
  • 7步掌握AI视频修复革命:从模糊到高清的魔法蜕变指南
  • OpenClaw + 云数据库运维:自动备份、扩容、迁移 RDS/MySQL 云数据库
  • 预算有限建站工具哪家好?先把钱花在哪看清,再决定选哪种工具
  • 湖北户外照明新选择:众晨光电全场景灯具应用解析 - 资讯报道
  • 【信息科学与工程学】【物理/化学和工程技术】第一百五十八篇 微纳米下的力学/电磁学/光学/声学01
  • 2026年GEO优化服务商排名解析:选型参考与避坑指南 - 信息热点
  • 【青岛大学IEEE联合主办 | IEEE出版,EI稳定检索,连续多届EI稳定检索 | 征稿主题范围广,EI期刊同步征稿中,高录用】第五届智能电网与能源系统国际学术会议(SGES 2026)
  • 2026江门纳税申报代办机构推荐|四强高口碑靠谱机构甄选指南 - 信息热点
  • 轻量级AI背景移除实战:3大模型对比与移动端部署优化指南
  • D3keyHelper终极指南:暗黑3自动化操作一键配置完全教程
  • 编写程序统计节日聚餐饮食数据,计算暴饮暴食肠胃负担,给出餐后调理方案。