设为首页 加入收藏

TOP

嵌入式C语言学习笔记
2014-11-24 12:25:54 来源: 作者: 【 】 浏览:0
Tags:嵌入式 语言学习 笔记

一、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和中断中。


四、堆与栈(heap and stack)


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


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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据结构之栈的应用----C程序的括.. 下一篇C++中的const

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)