工作站和嵌入式程序员之间的心态差异

时间:2009-02-12 04:30:33

标签: embedded

您认为为桌面环境(Windows,Linux,等等......)工作的程序员与在嵌入式系统上工作的人之间的思维方式有何不同?

我能想到的一个简单示例是,在嵌入式环境中,我始终检查malloc是否为NULL。我看到的大多数代码目标桌面肯定不会检查malloc返回值。

任何其他心态差异的例子?

5 个答案:

答案 0 :(得分:15)

有趣的是你在你的例子中特别提到了malloc()。

在我所使用的每个硬实时,深度嵌入式系统中,内存分配是专门管理的(通常不是堆,而是固定的内存池或类似的东西)......而且,只要有可能,所有内存分配在初始化期间预先完成。这比大多数人想象的要容易得多。

malloc()易受碎片攻击,是非确定性的,并且不会在内存类型之间进行区分。使用内存池,您可以拥有从超快速SRAM,快速DRAM,电池备份RAM(我已经看过它)等位置/拉出的池......

还有其他一百个问题(回答你原来的问题),但内存分配是一个很大的问题。

此外:

  • 尊重/了解硬件平台
  • 不会自动确认硬件是完美的还是功能
  • 对某些语言方面的认识&功能(例如,C ++中的异常)可以使事情快速横向移动
  • 了解CPU负载和内存利用率
  • 意识到中断,抢先以及对共享数据的影响(绝对必要 - 共享数据越少越好)
  • 与轮询相反,大多数嵌入式系统都是数据/事件驱动的;当然也有例外
  • 大多数嵌入式开发人员对状态机和状态行为/建模的概念非常满意

答案 1 :(得分:9)

桌面程序员将资源视为几乎无限制。内存,计算能力,驱动器空间。那些永远不会用完的。嵌入式程序员专注于所有这些。

哦,嵌入式程序员也经常不得不担心内存对齐问题。桌面编码器没有。 Arm芯片关心。 x86芯片没有。

答案 2 :(得分:8)

我在桌面环境中有这样的想法:“嘿,我总能发布一个更新或补丁来解决这个问题。”在嵌入式设计中,你得到更多“这必须起作用,因为我们不想回忆起设备或发布更长的修补程序。”

答案 3 :(得分:8)

尺寸重要

答案 4 :(得分:1)

2件事 - 正如Suroot已经提到的,一旦你发布桌面应用程序,它就不必“永远”,特别是现在。

但是在嵌入式中,一旦你“运送它”,它就会飞向火星,所以你无法将它拉回来。

另一个主要差异是嵌入式程序员通常对有效的代码和内存管理更加关注 - 桌面运行速度非常快,嵌入式代码不会。