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

嵌入式单线程编程模型的整理

一、核心分类与定义

嵌入式单线程编程模型基于驱动方式分为轮询驱动事件驱动混合驱动,适用于裸机系统或操作系统中的单线程环境,核心区别在于上层与下层的交互方式(主动询问 / 被动通知)。

二、轮询驱动(Polling-driven)

  • 核心逻辑:上层主动询问下层(硬件 / 组件)状态(同步调用,call 模式),需周期性检查状态。
  • 分类及特点
    1. 繁忙等待轮询

      • 最简单实现:发起请求后,通过while循环持续检查状态直至完成。
      • 缺点:CPU 空转,时钟与电量浪费严重,无并发能力。
      low_level_request();
      while(!low_level_is_done()); // 持续阻塞直至完成
      
    2. 休眠轮询

      • 对繁忙等待的优化:轮询间隙休眠(如利用硬件低功耗模式),降低功耗。
      • 特点:保持简单性,仍为单任务阻塞模式,无并发。
      low_level_request();
      while(!low_level_is_done()) {sleep_for_moment(); // 休眠减少空转
      }
      
    3. 并发轮询

      • 多外设并行处理:通过状态机管理多个独立任务,主循环依次轮询各任务状态,完成后触发后续操作。
      • 特点:支持并发,提高效率,但需维护状态机,复杂度略高。
      a_request(); b_request(); c_request(); // 同时发起多请求
      while(1) {if(a_done()) a_next(); // 轮询A并处理if(b_done()) b_next(); // 轮询B并处理if(c_done()) c_next(); // 轮询C并处理
      }
      
    4. 休眠并发轮询

      • 并发轮询的优化:所有任务轮询后休眠,进一步降低功耗。
      • 特点:兼顾并发与低功耗,需硬件支持唤醒机制(如 Cortex-M 的 SEVONPEND)。

三、事件驱动(Event-driven)

  • 核心逻辑:下层完成操作后主动通知上层(异步回调,callback 模式),无需轮询,依赖中断或状态触发。
  • 分类及特点
    1. 基于事件调度器的回调

      • 引入事件队列:中断服务例程(ISR)将回调函数压入队列,主循环从队列中取出并执行回调。
      • 特点:解耦硬件中断与业务逻辑,支持多事件并发,复杂度最高。
      void a_isr() { event_queue_push(a_callback); } // ISR压入回调
      int main() {a_request(a_callback); // 注册回调while(1) {if(queue_not_empty()) {cb = queue_pop(); cb(); // 执行回调}}
      }
      
    2. 各管各的回调

      • 无事件队列:组件完成操作后直接调用注册的回调函数(如 lwIP)。
      • 特点:无需依赖调度器,实现简单,适用于轻量场景。
      int main() {a_request(a_callback); // 注册回调while(1) {a_process(); // 处理请求,完成后直接调用a_callback}
      }
      
    3. 混合回调

      • 部分组件用事件调度器,部分直接回调,灵活适配不同场景。

四、混合驱动(Polling + Event)

  • 核心逻辑:结合轮询与事件驱动的优势,不同组件或层次采用不同模型(如底层轮询、上层事件)。
  • 示例:某系统中,外设 A 用直接回调,外设 B 用事件队列,外设 C 用并发轮询。
int main() {a_request(a_callback); b_request(b_callback); c_request();while(1) {a_process(); // A直接回调if(queue_not_empty()) { cb = queue_pop(); cb(); } // B事件调度if(c_done()) c_next(); // C并发轮询}
}

五、关键对比与总结

模型难易度空闲休眠并发能力能效比同步 / 异步
繁忙等待轮询最简单最低同步阻塞
休眠轮询较简单较低同步阻塞
并发轮询较复杂较低同步非阻塞
休眠并发轮询较复杂较高同步非阻塞
事件调度器回调最复杂异步
各管各的回调较复杂异步
  • 核心结论
    • 轮询驱动适合简单场景,同步性强但效率较低;
    • 事件驱动适合复杂并发场景,异步性强且能效高;
    • 混合驱动为实际工程中最常用方式,兼顾灵活性与效率。
    • 中断是硬件级事件,是事件驱动的重要触发源。
http://www.dtcms.com/a/406663.html

相关文章:

  • 永磁同步电机无速度算法--改进滑模观测器(幂次指数趋近律)
  • 综合案例2:爬取某客栈的漫画
  • C++笔记(基础)初始化输入输出 const
  • 成都网站设计培训有了网址可以建网站吗
  • 【Redis】分布式集群
  • 人工智能大模型是怎样喂数据的?
  • 其他 | 把 csdn 博客的内容导出成 pdf 文件
  • h5网站开发定制网站如何做优化排名
  • 宁夏网站建设报价网站开发全栈工程师技能图
  • AI“驯服”光伏云:卫星+深度学习预测沙尘遮蔽,发电量提升7%
  • Y3入门(1、创建一个项目)
  • Ubuntu 20.04下安装Miniconda、配置conda环境,安装PyTorch,安装YOLO等相关库(二)
  • go语言学习记录9.23
  • 驻马店网站建设价格爱站工具维护
  • 酒店网站建设流程图建立网站花钱吗
  • hive的安装
  • LeetCode 3105.最长的严格递增或递减子数组
  • 制造业数字化转型:iPaaS 如何打通 MES 与 ERP?
  • Leetcode 148. 排序链表 归并排序
  • 手机参数对比的网站宁波网站推广方式
  • 智能边缘:下一代边缘计算架构设计与实践
  • 电力专用通讯管理机,搭载国产化CPU,提供多网多串等丰富的通讯接口,适配麒麟、凝思等国 产化操作系统
  • 网站建设的岗位是什么岗位深圳公司注册的服务机构
  • 栈的进阶篇
  • 通义千问大模型调用
  • KMP和扩展KMP
  • 做房产信息互联网网站需要什么资质织梦开发供需网站
  • 汽车安全性能测试与铸铁底座的重要性
  • 郴州网站建设解决方案计算机网页制作工具
  • DHCP服务器