Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5020154
  • 博文数量: 1198
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 14426
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
  • 认证徽章:
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1198)

文章存档

2019年(175)

2018年(81)

2017年(80)

2016年(70)

2015年(52)

2014年(41)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2011-09-23 08:33:59

最近处理一款安全芯片的系统通讯的时候发现一些问题,说明如下:
 
1. 一系列功能分布在 S1 S2两个部分, S1在CPU RAM中执行, S2在DDR中执行, S2运行过程中调用 S1 的部分code.
 
2. S2用 网上通用 arm-cross-toolchain 编译, S1用 arm 公司的 RVDS 4.1 编译。
 
3. S2 和 S1之间通讯使用结构体, 结构体内含有 enum 域成员。
 
问题出在两款编译器对 enum的默认处理上, 在 arm-cross-toolchain 上 enum的 默认 sizeof() = 4 即默认为 int 类型, 而 rvds 的 sizeof(enum) = 1 即默认为 char 类型。 如果要兼容必须在 rvds 编译时指定 --enum_is_int 选项。
 
 
由此想到以前看过的某老外的文章,言道 嵌入式 C 开发中应当尽量少使用 enum 类型 和 inline 的限定,而同类功能尽量使用宏来代替。优点如下:
1.  不同编译器对 enum 和 inline 的处理不同,造成不同编译器出来的程序交互数据有影响。(enum 如上, inline 好像是参数顺序关系的问题)
2. 速度快。 enum 使用数组类型结构存储,执行时有地址的跳转寻获, 宏是直接编译时代码替换。inline同样,但是inline似乎多占用更多的代码空间,这个要具体衡量。
3. 还有其他,记不清了, 好像在 www.IBM.com.cn 网站上有, 刚才似乎找不到了。
 
网上说 rvds 才是正宗啊, 看来要找个时间看看 armcc 的用法了。
阅读(2366) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

iibull2011-09-23 09:05:19

rvds 对 char 类型也有特殊扩展。

iibull2011-09-23 08:57:03

百度文库上 rvds pdf, 很多

评论热议
请登录后评论。

登录 注册