首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

VxWorks下编程的几个误区 02

VxWorks下编程的几个误区 02

【9】在程序中频繁调用malloc()free()。
桌面系统和嵌入式系统的一个很大区别是,桌面系统的user是人,人对系统实时性,稳定性要求相对并不高。程序死机时,大不了 结束进程或重新关机开机。嵌入式系统的user基本上是大系统中 的其它部分,实时性或稳定性不好会导致重要数据丢失,甚至发生 重大事故。卫星在天上飞时,如果系统瘫痪,遥控系统都失灵了, 你总不能亲自爬上去关机开机吧。(不过象这种系统都有备份,出错时可以启动备份系统)。
VxWorks是实时操作系统,并不表示你写的程序就一定是实时的。 malloc()free()非常灵活,但它每次需要进行搜索算法,需要的时间 是不确定的。另外它导致内存碎片,导致性能下降或内存不足, 写得差的程序还可能发生内存泄漏或悬空指针。
实时性要求高的应用,或多或少都会采用静态分配,即在程序中 事先定义好可能需要的全部变量,或者在程序启动时一次分配好, 以后就不再分配释放了,或者是写专用的内存管理函数。 利用率和灵活性是差了些,得到的是性能。
在风河公司的另一款基于osekvdx的操作系统osekworks中,你甚至 不能在程序中创建任务,分配资源。所有都在编译前静态指定。 osekworks主要用于汽车工业。试想malloc()返回null的情况,
你还能怎么办呢?方向盘附近有个显示面板,倒可以在上面打印: “内存不足,请关闭部分任务或稍后再试!”可能开车子的还没有 看到这个提示就已经车毁人亡了。
返回列表