8嵌入式c的经验总结包含很多精华

上传人:豆浆 文档编号:24901043 上传时间:2017-12-08 格式:PDF 页数:164 大小:1.91MB
返回 下载 相关 举报
8嵌入式c的经验总结包含很多精华_第1页
第1页 / 共164页
8嵌入式c的经验总结包含很多精华_第2页
第2页 / 共164页
8嵌入式c的经验总结包含很多精华_第3页
第3页 / 共164页
8嵌入式c的经验总结包含很多精华_第4页
第4页 / 共164页
8嵌入式c的经验总结包含很多精华_第5页
第5页 / 共164页
点击查看更多>>
资源描述

《8嵌入式c的经验总结包含很多精华》由会员分享,可在线阅读,更多相关《8嵌入式c的经验总结包含很多精华(164页珍藏版)》请在金锄头文库上搜索。

1、1 嵌入式 C/C+语言精华文章集锦 C/C+语言stru ct 深层探索 . .2 C+中extern C含义深层探索. .7 C 语言高效编 程的几招. .11 想成为嵌入式程序员应知道的 0x10 个基本问题 . .15 C 语言嵌入式 系统编程修炼. .22 C 语言嵌入式系统编程修炼之一: 背景篇. .22 C 语言嵌入式系统编程修炼之二: 软件架构篇. .24 C 语言嵌入式系统编程修炼之三: 内存操作. .30 C 语言嵌入式系统编程修炼之四: 屏幕操作. .36 C 语言嵌入式系统编程修炼之五: 键盘操作. .43 C 语言嵌入式系统编程修炼之六: 性能优化. .46 C/C+

2、语言 void及 void 指 针深层探索 . .50 C/C+语言可变参数表深层探索 .54 C/C+数组名与指针区别深层探索 .60 C/C+程序员 应聘常见面试题深入剖析(1) .62 C/C+程序员 应聘常见面试题深入剖析(2) .67 一道著名外企面试题的抽丝剥茧 .74 C/C+结构体的一个高级特性指定成员的位数 .78 C/C+中的近指令、远指针和巨指针 .80 从两道经典试题谈 C/C+中联合体(u nion)的使用. .81 基于 ARM 的嵌入式 Li nux 移植真实体验 . .83 基于 ARM 的嵌入式 Linu x 移植真实体验(1 )基本概念 . .83 基于 A

3、RM 的嵌入式 Linux 移植真实体 验(2)Boot Loader .96 基于 ARM 的嵌入式 Linux 移植真实体验( 3)操作系统 .111 基于 ARM 的嵌入式 Linu x 移植真实体验(4 )设备驱动 . .120 基于 ARM 的嵌入式 Linu x 移植真实体验(5 )应用实例 . .135 深入浅出 Linux 设备驱动编程 . .144 1.Linux 内核模块. .144 2.字符设备驱动程序 .146 3.设备驱动 中的并发控制 . .151 4.设备的阻 塞与非阻塞操作 . .157 2 C/C+语言 struct 深层探索 出处:PConline 作者:宋

4、宝华 1. struct 的巨大作用 面对一个人的大型C/C+程序时, 只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C+程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct是区别一个开发人员是否具备丰富开发经历的标志。 在网络协议、 通信控制、 嵌入式系统的C/C+编程中, 我们经常要传送的不是简单的字节流 (char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。 经验不足的开发人员往往将所有需要传送的内容依顺序保存在

5、char型数组中,通过指针偏移的方法传送网络报文等信息。这样做编程复杂,易出错,而且一旦控制方式及通信协议有所变化,程序就要进行非常细致的修改。 一个有经验的开发者则灵活运用结构体,举一个例子,假设网络或控制协议中需要传送三种报文,其格式分别为packetA、packetB、packetC: struct structA int a; char b; ; struct structB char a; short b; ; struct structC int a; char b; float c; 优秀的程序设计者这样设计传送的报文: struct CommuPacket 3 int iPac

6、ketType; /报文类型标志 union /每次传送的是三种报文中的一种,使用union struct structA packetA; struct structB packetB; struct structC packetC; ; 在进行报文传送时,直接传送struct CommuPacket一个整体。 假设发送函数的原形如下: / pSendData:发送字节流的首地址,iLen:要发送的长度 Send(char * pSendData, unsigned int iLen); 发送方可以直接进行如下调用发送struct CommuPacket的一个实例sendCommuPacke

7、t: Send( (char *) 假设接收函数的原形如下: / pRecvData:发送字节流的首地址,iLen:要接收的长度 /返回值:实际接收到的字节数 unsigned int Recv(char * pRecvData, unsigned int iLen); 接收方可以直接进行如下调用将接收到的数据保存在 struct Commu Packet 的一个实例 recvC ommuPacket 中: Recv( (char *) 接着判断报文类型进行相应处理: switch(recvCommuPacket. iPacketType) case PACKET_A: /A 类报文处理 br

8、eak; case PACKET_B: /B 类报文处理 break; case PACKET_C: /C 类报文处理 break; 以上程序中最值得注意的是 Send( (char *) Recv( (char *) 中的强制类型转换:(char *)&sendCommuPacket、(char *)&recvComm uPacket,先取地址,再转化为 char 型指针,这样就可以直接利用处理字节流的函数。 利用这种强制类型转化,我们还可以方便程序的编写,例如要对 sendCommuPacket所处内存初始化为 0,可以这样调用标准库函数 memset(): memset(char *)

9、2. struct的成员对齐 Intel、微软等公司曾经出过一道类似的面试题: #include 4 #pragma pack(8) struct example1 short a; long b; ; struct example2 char c; example1 struct1; short e; ; #pragma pack() int main(int argc, char* argv) example2 struct2; cout setting C/C+菜单,在struct member alignment中指定你要的对界方式。 图 1 在 VC+ 6.0 中指定对界方式 6 另外,通过_attribute(aligned (n)也可以让所作用的结构体成员对齐在 n字节边界上,但是它较少被使用,因而不作详细讲解。 2.3 面试题的解答 至此,我们可以对Intel、微软的面试题进行全面的解答。 程序中第2行#pragma pack (8)虽然指定了对界为8,但是由于struct example1中的成员最大size为4(long变量size为4),故struct example1仍然按4字节对界,str

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号