嵌入式了解

38 阅读3分钟

你认为嵌入式软件开发与PC或服务器端开发最大的区别是什么?

  • 资源极度受限: 这是最根本的区别。嵌入式设备有严格的CPU主频、内存(KB/MB级)、存储空间(Flash)限制。而PC/服务器资源丰富(GB/TB级)。
  • 实时性与确定性: 很多嵌入式系统要求硬实时,任务必须在严格的时间限制内完成。代码执行时间必须是可预测和稳定的。PC软件更注重平均吞吐量。
  • 软硬件紧密结合: 嵌入式开发者需要直接与硬件寄存器、数据手册、原理图打交道,需要懂基本的硬件知识(如GPIO、UART、I2C、ADC等)。PC开发则被操作系统高度抽象。
  • 交叉编译与特定工具链: 代码在强大的PC上编译,在目标嵌入式芯片上运行。
  • 没有操作系统的“裸机”环境或使用RTOS: 不像PC普遍使用Linux/Windows,嵌入式系统可能运行在裸机或轻量级RTOS上,需要开发者自己管理任务和资源。
  • 对稳定性和可靠性的极致要求: 嵌入式系统常用于汽车、医疗、工业控制等领域,一旦失效后果严重。因此对代码质量、故障恢复、看门狗等机制要求极高。”

什么是实时系统?软实时和硬实时有什么区别

  • 一、实时系统的核心特征

判断一个系统是否为实时系统,关键看是否满足以下 3 个特性:

  1. 时间约束性:所有任务都有明确的 “截止时间”(完成任务的最晚时间),系统必须在截止时间前输出结果。
  2. 确定性:系统对任务的响应时间是可预测的(而非 “有时快有时慢”),即使在负载波动时,也能稳定满足时间要求。
  3. 可靠性:若未在截止时间内完成任务,可能导致 “系统失效”(如医疗设备延迟可能危及生命,工业控制延迟可能引发生产事故)。
  • “如果任务没在截止时间内完成,会发生无法挽回的严重后果吗?”

    • 是 → 硬实时系统;
    • 否(仅影响体验或效率) → 软实时系统。
    • 调度机制 硬实时:采用 “抢占式优先级调度”,高优先级任务可强制打断低优先级任务
    • 软:可采用普通调度(如时间片轮转),优先级机制非必需 |
  • 在资源受限的环境中,你有哪些节省内存和存储空间的方法?

    • 代码层面

      • 使用更小的数据类型(如用 uint8_t 代替 int)。
      • 避免使用浮点数(如果可用定点数代替)。
      • 精简算法,减少代码量。
      • 禁用C++的RTTI、异常等增加开销的特性。
    • 数据层面

      • 使用位域(bit-field)来存储标志位。
      • 使用联合体(union)来共享内存空间。
      • 将常量数据尽量放在Flash中(使用 const),而不是占用RAM。
      • 使用内存池替代频繁的动态内存分配,避免堆碎片。
    • 编译链接层面

      • 使用高优化等级(如 -Os 优化尺寸,而非 -O2 优化速度)。
      • 启用链接时优化(LTO)。
      • 在链接脚本中精确控制段的位置,移除未使用的代码和数据(gc-sections)。"