zoukankan      html  css  js  c++  java
  • 【转】嵌入式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的保存可以在调用结束时程序回归此处继续运行)压入栈内,将寄存器空出迎接被调函数中的一系列计算和控制。被调函数执行完后再进行出栈操作,流程继续。

  • 相关阅读:
    七。进度管理
    六。质量管理
    五。项目范围管理
    四。项目整体管理
    三。项目立项管理
    二。项目的一般只知识
    一。项目管理的管理领域
    8.BGP
    英语词汇基础
    vim中输入tab符
  • 原文地址:https://www.cnblogs.com/codecamel/p/4688099.html
Copyright © 2011-2022 走看看