你认为程序员在桌面环境(windows,linux,等等......)工作和在嵌入式系统上工作的人之间的思维方式有何不同?
我能想到的一个简单例子是,在嵌入式环境中,我总是检查malloc是不是NULL.我看到的大多数代码目标桌面肯定不会在检查malloc返回值时勤奋.
心理差异的任何其他例子?
有趣的是你在你的例子中特别提到了malloc().
在我所使用的每个硬实时,深度嵌入式系统中,内存分配是专门管理的(通常不是堆,而是固定内存池或类似的东西)......而且,只要有可能,所有内存分配都是在初始化期间预先完成.这比大多数人想象的要容易得多.
malloc()容易受到碎片的影响,是非确定性的,并且不会在内存类型之间进行区分.使用内存池,您可以拥有从超快速SRAM,快速DRAM,电池支持的RAM(我已经看过它)等位置/拉出的池......
还有一百个其他问题(回答你原来的问题),但内存分配是一个很大的问题.
也:
尊重/了解硬件平台
不会自动地假设硬件是完美的甚至是功能性的
意识到某些语言方面和特征(例如,C++中的异常)可能导致事物快速横向移动
意识到CPU负载和内存利用率
意识到中断,抢占以及对共享数据的影响(绝对必要 - 共享数据越少越好)
大多数嵌入式系统都是数据/事件驱动的,而不是轮询; 当然也有例外
大多数嵌入式开发人员对状态机和状态行为/建模的概念非常熟悉
桌面程序员将资源视为几乎无限制.内存,计算能力,驱动器空间.那些永远不会用完的.嵌入式程序员专注于所有这些.
哦,嵌入式程序员也经常不得不担心内存对齐问题.桌面编码器没有.Arm芯片关心.x86芯片没有.
我的桌面环境有一个想法,"嘿,我总能发布一个更新或补丁来解决这个问题." 在嵌入式设计中,您会得到更多"这必须起作用,因为我们不想回忆设备或发布更长的修补程序."
大小事项