嵌入式软件架构设计浅谈(短文简述技术拓展)

1.前言

嵌入式软件架构设计的核心是在硬件资源受限(MCU/MPU 的 RAM、Flash、算力有限)的前提下,平衡实时性、可靠性、可维护性与硬件适配性,区别于通用软件架构(如 Web、桌面软件),嵌入式架构必须深度绑定硬件特性(外设、中断、时钟、功耗),同时满足工业级 / 消费级的功能、非功能需求(如实时响应、抗干扰、低功耗)。软件架构设计决定了系统的可靠性、可维护性和可扩展性。优秀的架构能在有限的硬件资源上构建出稳定高效的系统,而糟糕的架构则会导致项目延期、维护困难和性能瓶颈。

2.机制简述

一.前后台架构(含中断机制)

1.核心要点

前台:无限循环的主任务流,顺序执行低优先级常规任务(如传感器采集、数据显示、状态监测);

后台:由中断触发的高优先级任务(如按键、故障、串口数据),仅处理 “最短必要逻辑”(如置标志位、保存关键数据),复杂逻辑交回前台执行。

2.实现要点

中断服务程序(ISR)必须 “短小精悍”(执行时间≤1ms),禁止在 ISR 中做耗时操作(如 Flash 写入、浮点运算);

前台通过 “标志位” 与后台交互(如 ISR 置key_flag=1,前台轮询标志位后执行按键逻辑),避免 ISR 直接调用复杂函数。

二.时间片轮询架构

1.核心思想

将 CPU 时间划分为固定长度的 “时间片”,按顺序为每个任务分配时间片,实现多任务的轮流执行。该架构解决了前后台架构中前台任务顺序执行的阻塞问题,是嵌入式从裸机向 RTOS 过渡的关键架构,也是多任务操作系统的基础调度策略。

2.核心原理

定时器中断触发时间片:配置硬件定时器(如 SysTick、TIM)按固定周期(如 10ms)产生中断,每次中断代表一个时间片结束;

任务列表与时间片分配:定义任务数组,为每个任务分配相同 / 不同的时间片长度,记录任务的 “当前剩余时间片” 和 “运行状态”;

轮询执行任务:在主循环中遍历任务列表,若任务有剩余时间片且处于就绪状态,则执行该任务,直到时间片耗尽或任务主动放弃 CPU。

三.RTOS 多任务架构(时间片轮转 / 抢占式)

1.核心结构

基于实时操作系统(FreeRTOS、uC/OS-II、RT-Thread),将系统拆分为多个独立任务,由 RTOS 调度器按 “优先级 + 时间片” 分配 CPU 资源;

支持 “抢占式调度”(高优先级任务可打断低优先级任务)、“时间片轮转”(同优先级任务公平执行)。

2.实现要点

任务划分:按 “功能 + 优先级” 拆分(如紧急故障>串口通信>数据采集>显示),任务数控制在 8~16 个(过多增加调度开销);

通信机制:任务间通过队列(Queue)、信号量(Semaphore)、事件组(Event Group)通信,禁止全局变量裸奔;

中断与 RTOS 结合:ISR 中通过xSemaphoreGiveFromISR()/xQueueSendFromISR()唤醒任务,不直接处理业务逻辑。

嵌入式软件工程师面试完全指南

面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,3200+订阅,非常适合在找工作面经薄弱的同学,3500+订阅还会涨价到39.9,提前订阅提前享受,持续更新中。

原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务