|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
打开.xib的文件打开的就是IBIB和代码交互用的是IBActionIBOutlet这些标记这些标记追踪到他们的定义其实对编译器来说什么都不表示假如你爱编程,请你爱C言语;
假如你爱C言语,请你爱指针;
假如你爱指针,请你爱指针的指针!
本篇次要报告了嵌进式体系C编程中内存操纵的相干技能。把握并深切了解关于数
据指针、函数指针、静态请求内存、const及volatile关头字等的相干常识,是一个优异
的C言语程序计划师的基础请求。当我们已固定把握了上述技能后,我们就已学会
了C言语的99%,由于C言语最精髓的内在皆在内存操纵中表现。
我们之以是在嵌进式体系中利用C言语举行程序计划,99%是由于其壮大的内存操
作才能!
数据指针
在嵌进式体系的编程中,经常请求在特定的内存单位读写内容,汇编有对应的MOV
指令,而除C/C++之外的别的编程言语基础没有间接会见相对地点的才能。在嵌进式
体系的实践调试中,多借助C言语指针所具有的对相对地点单位内容的读写才能。以指
针间接操纵内存多产生在以下几种情形:
(1)某I/O芯片被定位在CPU的存储空间而非I/O空间,并且存放器对应于某特定
地点;
(2)两个CPU之间以双端口RAM通讯,CPU必要在双端口RAM的特订单元(称为
mailbox)誊写内容以在对方CPU发生中止;
(3)读取在ROM或Flash的特订单元所烧录的汉字和英笔墨模。
记着:CPU以字节为单元编址,而C言语指针以指向的数据范例长度作自增和自减。
了解这一点关于以指针间接操纵内存是相称主要的。
函数指针
起首要了解以下三个成绩:
(1)C言语中函数名间接对应于函数天生的指令代码在内存中的地点,因而函数
名能够间接赋给指向函数的指针;
(2)挪用函数实践上同等于"调转指令+参数传送处置+回回地位进栈",实质上
最中心的操纵是将函数天生的方针代码的首地点赋给CPU的PC存放器;
(3)由于函数挪用的实质是跳转到某一个地点单位的code往实行,以是能够"调
用"一个基本就不存在的函数实体
数组vs.静态请求
在嵌进式体系中静态内存请求存在比一样平常体系编程时更严厉的请求,这是由于嵌进
式体系的内存空间常常是非常无限的,不经意的内存保守会很快招致体系的溃散。
以是必定要包管你的malloc和free成对呈现
给出准绳:
(1)尽量的选用数组,数组不克不及越界会见(真谛超出一步就是错误,数组超出
界线就光彩地玉成了一个凌乱的嵌进式体系);
(2)假如利用静态请求,则请求后必定要判别是不是请求乐成了,而且malloc和free
应成对呈现!
关头字const
const意味着"只读"。区分以下代码的功效十分主要,也是须生长叹,假如你还不
晓得它们的区分,并且已在程序界摸爬滚打多年,那只能说这是一个悲伤:
constinta;
intconsta;
constint*a;
int*consta;
intconst*aconst;
(1)关头字const的感化是为给读你代码的人转达十分有效的信息。比方,在函
数的形参前增加const关头字意味着这个参数在函数体内不会被修正,属于"输出参数"。
在有多个形参的时分,函数的挪用者能够依附参数前是不是有const关头字,明晰的分辨
哪些是输出参数,哪些是大概的输入参数。
(2)公道地利用关头字const可使编译器很天然地回护那些不但愿被改动的参
数,避免其被偶然的代码修正,如许能够削减bug的呈现。
关头字volatile
C言语编译器会对用户誊写的代码举行优化,比如以下代码:
inta,b,c;
a=inWord(0x100);/*读取I/O空间0x100端口的内容存进a变量*/
b=a;
a=inWord(0x100);/*再次读取I/O空间0x100端口的内容存进a变量*/
c=a;
极可能被编译器优化为:
inta,b,c;
a=inWord(0x100);/*读取I/O空间0x100端口的内容存进a变量*/
b=a;
c=a;
可是如许的优化了局大概招致毛病,假如I/O空间0x100端口的内容在实行第一次
读操纵后被别的程序写进新值,则实在第2次读操纵读出的内容与第一次分歧,b和c
的值应当分歧。在变量a的界说前加上volatile关头字能够避免编译器的相似优化,正
确的做法是:
volatileinta;
volatile变量大概用于以下几种情形:
(1)并行设备的硬件存放器(如:形态存放器,例中的代码属于此类);
(2)一其中断服务子程序中会会见到的非主动变量(也就是全局变量);
(3)多线程使用中被几个义务共享的变量。
这个不用疑惑照做就行了文档:高级库(发动机)UIKit---UI库OBJCUIResponder |
|