有关CodeWarrior的一点总结(转)
来源:互联网 发布:资产证券化2017知乎 编辑:程序博客网 时间:2024/06/05 11:31
原文地址:http://blog.eccn.com/space.php?uid=353091&do=blog&id=3837
对于现在的嵌入式应用,没必要花大量时间选择一个C/C++交叉编译器,但你应记住详细的难事。稍微详细的资料让我们使用一个特定的交叉编译器容易一些,减少工程中受挫。理想情况下,应从不考虑你的编译器。它只是你用于将系统行为的算法和规则转化为可执行的程序。
但是,世界不是理想的……当比较两个或更多的交叉编译器,以满足你需要的硬件和软件,你应当考虑些什么事情呢?
有一些好的特性形成巨大的不同:
在线汇编: 尽管C语言的发明已超过25年,当开发嵌入式系统时,使用一定数量的汇编仍然是平常的事。
中断函数:交叉编译器另一个让人满意的特性是指定中断类型。对PC平台,这一非标准关键字是C语言普遍增加的。当用作函数声明的一部份,它告诉编译器这个函数是一个中断服务程序(ISR)。编译器能产生额外的堆栈信息和寄存器保存以及任何ISR需要的恢复。一个好的编译器也会阻止这种方式定义的函数被程序的其它部分调用。应该明白,C/C++中与进出ISR相关的上层与汇编中是没有差别的。
例如CodeWarrior,尽管进一步深入理解一个处理器的中断向表的结构。这种情况,只需简单地向ISR 标记添加中断类型 (0x1E)。这使得中断向量表自动生成,并消除了编程人员潜在的误解和错误。
产生汇编语言:产生汇编语言清单的编译器,作为汇编处理器的一部分是一个令人满意的工具。这一特性对手工优化代码很有帮助,因为你能容易地看到你高级语言程序的每一行产生了什么代码,如果一个特定的函数对于给定的应用太慢,你将能够容易地选择函数最好的部分用汇编重写。
标准库:当你为通用计算机开发应用软件,你希望你的编译器包含一套标准C函数库,数学库和C++类。它们包含各种程序如memcpy()、sin()和cout等。但由于这些库函数不严格地是C或C++语言标准的一部分(库标准是分开的),一个编译器提供商可能省略它,这些省略在嵌入系统程序员使用的交叉编译器提供商中是很普遍的。因些在某些情况下你不得不争取得到标准库的权利。
想一下多少次你花时间重写那些自己的函数。因此花些时间坚持将标准库包含在你购买的编译器中。当然不大可能在多数嵌入式系统应用中使用printf(),但直到太迟了你才意识到你需要很多其它的函数。
如果提供了标准库,确保它们能再进去。换句话说,那些库中的每个函数能同时执行多次。重入函数能递归调用或多线程执行。对于库程序这意味着不应使用全局变量。其内部所有数据必须在栈上。
起动代码:这是在main()前先执行的额外的一段程序。起动代码通常用汇编写成并和你建立的可执行代码连接在一起。它为用高级语言写的程序的执行铺路。
显然,一个编译器缺少我们提到的一些特性,也仍可是一个好的编译器。毫无疑问,人们会争论非标准特性象 “asm”和interrupt关键字减少了代码的兼容性。但若你在两个或多个差不多的交叉编译间选择时,你可能会考虑这些事情。正好你被要求完成这些任务,它们会使你的工作容易。它们的确减少编程受挫。
- 有关CodeWarrior的一点总结(转)
- 有关Session的一点总结
- 有关容器的一点小小总结
- C++有关继承的一点总结
- 有关search及ftsearch的一点总结
- 【总结】有关vue使用微信扫码登录的一点小总结
- 有关ucenter同步的原理(个人总结的一点浅薄见解)
- 有关Yii Application生命周期和controller目录结构的一点总结(待续)
- 有关 PHP 和 MySQL 时区的一点总结
- 有关数据存储和压缩的一点总结
- 有关MFC中静态分割窗口的一点总结
- 有关服务器,web 服务器,WEB容器的一点总结
- 小白 有关c++ const的一点总结
- 有关 Reliability(可靠性)的一点资料
- codewarrior的prm文件
- 有关ACE的一点杂音
- 有关Iterator的一点看法
- 有关JMS的一点看法
- PHP中htmlentities跟htmlspecialchars的区别
- FactoryBean的工作方式
- Ubuntu9.10下编译Android源码
- 交互设计工具:10款原型开发工具
- 浅谈Oracle数据库的建模与设计
- 有关CodeWarrior的一点总结(转)
- Android 的source (需安装 git repo)
- [疑难杂症]window.open和window.showModalDialog的status=no无法关闭状态栏
- Oracle触发器详解
- 实现自动增加时间、文件、行数打印
- 集合FactoryBean的配置
- 模块化Java简介
- 关于treeview节点右键选中并关联右键菜单
- Linux下的IP设置