【转】嵌入式C语言那点事(一)几个重要关键字

原文链接:http://blog.csdn.net/pirateleo/article/details/7529776

一、static

关键字static,修饰变量时:

1、限制该变量的作用域:比如静态全局变量,只能在该模块中使用(本c文件中)。

2、决定该变量的存储位置:修饰为静态的变量,存储在静态数据区(非堆栈内)。(同比,全局变量也都存放在静态数据区中。)

带初值和不带初值的静态变量:(以TI DSP 54XX为例)

a.不带初值的静态变量,存储在.bss段中。

b.带初值的静态变量,存储在.bss段中,但其初值存储在.init中。在DSP Booter完成加载初始化后已经将init段的值赋值到.bss对应变量中。

关键字static,修饰函数时:限制该函数的作用域,仅能在本模块中使用(本c文件中)。

结论:static关键字对于使用者而言,最重要的是对变量或函数作用域的限制。

二、const

关键字const意味着“不变的”:

1、什么时候该用:定义一个函数时如果在输入参数前加上const,可以防止该输入变量被改写而引出的错误;函数定义时使用const可以起到函数API自注释作用;

2、怎么用:

以下摘录经典面试题中的例子:

const int a; 
int const a; 
const int *a; 
int * const a; 
int const * a const;

前两个的作用是一样,a是一个常整型数。

第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。

第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

三、volatile

关键字volatile意味着“易改变的”:

修饰为volatile的变量,编译器不会对其进行任何优化,每次求值时会到指定地址(物理或映射)去读取。因此适用于“并行设备的硬件寄存器(如:状态寄存器) ;一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) ;多线程应用中被几个任务共享的变量 ”,我个人只用到在IO和中断中,至于多线程的问题有个帖子可供参考。

http://www.soft-bin.com/html/2010/07/30/concurrent-multithread-code-problem-and-volatile-and-atomic-opration.html

四、堆与栈(heap and stack)

1) 堆是由用户维护的。比如我们malloc一段空间,此时开辟的空间便在堆中,调用free时再释放。过于频繁的malloc与free会导致堆中产生碎片(一个空间的地址不连续),影响读写速度。

2) 栈是由编译器控制的,我们无需干涉。比如我们定义的局部变量或是调用了一个函数。以函数调用为例,此时系统会将现场数据(主要是部分寄存器中的数据,如PC的保存可以在调用结束时程序回归此处继续运行)压入栈内,将寄存器空出迎接被调函数中的一系列计算和控制。被调函数执行完后再进行出栈操作,流程继续。

时间: 2024-08-07 08:39:40

【转】嵌入式C语言那点事(一)几个重要关键字的相关文章

嵌入式C语言全套视频教程云盘下载!

了解过嵌入式开发的朋友们都有一定的了解,语言是学习嵌入式开发必须具备的工具语言,学好C语言基础可以更好的学习嵌入式开发.今天在这里给大家分享一个嵌入式C语言全套视频教程,需要的朋友可以下载来看看! 课程目录部分截图: 百度云盘下载:http://pan.baidu.com/s/1c1OETIo 密码:cgcj

嵌入式C语言全套视频教程资料观看

了解过嵌入式开发的朋友们都有一定的了解,语言是学习嵌入式开发必须具备的工具语言,学好C语言基础可以更好的学习嵌入式开发.今天在这里给大家分享一个嵌入式C语言全套视频教程,需要的朋友可以下载来看看! 课程目录部分截图: 百度云盘下载:http://pan.baidu.com/s/1c1OETIo 密码:cgcj

嵌入式C语言里的土豪们之除法与移位

土豪这个词用在接下来要出场的C语言再合适不过了.他们在嵌入式C语言里占尽了奢华,但是毕竟我们更需要一个节约型的微生态环境.在这里简单给大家分析一下嵌入式C语言编程时用到的除法与移位. 本文引用地址:http://www.eepw.com.cn/article/182359.htm 除法土豪 除法在嵌入式微处理器里可算是一个消耗大户,复杂的实现方式不仅占用了大师宝贵的计算时间而且精度有限情况下占用了大片的RAM.因此,常常在各类文章里看到,编程人员应该使用右移运算来代替除法.这个右移方法没有问题,

嵌入式C语言常用关键字

1.static关键字 这个关键字前面也有提到,它的作用是强大的. 要对static关键字深入了解,首先需要掌握标准C程序的组成. 标准C程序一直由下列部分组成: 1)正文段--CPU执行的机器指令部分,也就是你的程序.一个程序只有一个副本:只读,这是为了防止程序由于意外事故而修改自身指令: 2)初始化数据段(数据段)--在程序中所有赋了初值的全局变量,存放在这里. 3)非初始化数据段(bss段)--在程序中没有初始化的全局变量:内核将此段初始化为0. 注意:只有全局变量被分配到数据段中. 4)

单片机的汇编语言与嵌入式C语言的比较

零基础从C语言入手.在书上看到单片机的汇编语言与嵌入式C语言的比较,比较有用. 1.嵌入式C程序中的主函数是汇编程序中的主程序:嵌入式C程序中的函数是汇编程序中的子程序.程序运行都是从主函数或主程序开始,并终止于主函数或主程序中的最后一条语句.但是在编写方面,汇编程序中的主程序必须编写在整个程序的最前面,因为汇编程序运行是从整个程序中的第一行开始:而嵌入式C程序中的主函数可以放在程序的前面,也可放在后面或其他位置,无论主函数在什么位置,程序运行时都会先自动找到主函数,并从主函数中的第一条语句开始

2017-2018-1 20155331 嵌入式C语言

2017-2018-1 20155331 嵌入式C语言 作业要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零) 自己做错的原因: 自己在课下的没能很好的完成学习任务. 正确答案 提取小时: #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000 #define TIME *(volatile int *)(Time_Addr+2) int getHo

【C语言天天练(二)】static关键字

用于不同的上下文环境时,static关键字具有不同的意义. (一) 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标示符的链接属性,从externl改为internal.但标示符的存储类型和作用域不受影响.这种方式声明的函数或变量只能用于声明它们的源文件中. (二) 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响.用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存

C语言基础知识----易让人头疼的关键字----const && typedef && define

const关键字 const=read only,修饰的为只读变量而不是常量.const修饰的变量不能用作数组的维数也不能放在switch语句的case:之后. 主要作用有: 1.通过把不希望被修改的变量或参数用const来修饰,编译器会保护这些变量不被修改增强系统的可靠性: 2.增强代码的可读性 [html] view plaincopyprint? const int a;      //a为常量不能被修改 int const a;      //a为常量不能被修改 const int *a

Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变量的类型在变量名的后面.例如:不是,int a,而是 a int.当定义了一个变量,它默认赋值为其类型的 null 值.这意味着,在 var a int后,a 的 值为 0.而 var s string,意味着 s 被赋值为零长度字符串,也就是 "". 3.Go语言的变量声明和赋值 在Go中使