这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 敢不敢测测你的C语言功底?

共17条 2/2 1 2 跳转至
院士
2012-02-19 22:31:21     打赏
11楼
我发一部分个人的摘录吧!!

1. 声明volatile对象

Volatile字面意思是“易于挥发的”。来描述一个变量时,意味着给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以它称为“易于挥发的”。

在以下3种情况下需要将对象声明为volatile:

l  共享访问,即在多任务环境中几个任务共享一个对象

l  触发访问,例如当发生某个访问时会影响存储器映像SFR的内容

l  修正访问,例如当对象内容以编译器不可知的方式发生改变

示例:

char volatile a;

a = 5;

a += 6;

对声明为volatile对象的访问需要遵循以下原则:

1)  所有访问均为保护方式;

2)  所有访问均为完全访问,即访问整个对象;

3)  所有访问均按抽象机给定的顺序进行;

4)  所有访问均为非中断方式访问;

2. 声明const对象

Const限定符指明一个数据对象(无论是直接访问还是通过指针访问)是不可改写的。一个指向声明为const数据对象的指针,既可以指向常量对象,也可以指向非常量对象。应尽可能地使用声明为const的指针(const pointer),这可以改善编译器对生成代码的优化,同时可以减少由于错误修改数据而导致应用程序崩溃的风险。

声明为const的静态和全局对象被放置在ROM中。

给大家一些参考,如有不对,还请楼主多多指教~~

院士
2012-02-20 13:30:28     打赏
12楼
这个要看其他跟帖几人是啥感觉

菜鸟
2012-02-21 08:41:31     打赏
13楼
测试了下,嘿嘿...

高工
2012-02-25 14:42:19     打赏
14楼
这个帖子的初衷值得推荐,基础要打好!

工程师
2012-02-25 23:24:55     打赏
15楼
答案:

1、用a给下面变量定义: a) 一个整型数     int a;   b) 一个指向整型数的指针(A pointer to an integer)     int *a;   c) 一个指向指针的的针,它指向的指针是一个整型数        int * * a;   d) 一个有10个整型数的数组        int a[10];   e) 一个有10个指针的数组,该指针是指向10个整形数的        int *a[10];   f) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数        int *a(int);   g) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个 整型数               int (*a[10])(int);   2、关键字static的作用是什么?        Static根据其位置不同有三个不同的作用,1).在函数体内,一个被声明静态的变量在这个函数被调用过程中维持其值不变。其本质是什么? 2).在一个模块内,但在函数体外,一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。有何用处? 3).在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数只可被这一模块内的其它函数调用。有何用处?   3、关键字const是什么含意?        Const int a;     a是一个常整型数        Int const a;     a是一个常整型数        Const int *a;   a是一个指向常整型数的指针(指向的数不可修改,但a可以)        Int *const a;    a是一个指向整型数的常指针(指向的数可修改,但a不可以)        Int const *a const ; a是一个指向常整型数的常指针(指向的数和a均不可修改)   4、关键字volatile有什么含意?        一个被定义为volatile的变量是说这个变量可能会被意想不到的改变,这样,编译器就不会去假设这个变量的值了,变即是说,优化器在用到这个变量时每次都小心的重新读取这个变是的值,而不是使用保存在寄存器里的备份,最常用的就是在声明硬件的寄存器时使用。     5、嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。        #define BIT3 (1 << 3)        Static int a;        Void set_bit3(void) {        a |= BIT3; } Void clear_bit3(void) {        a &=  ~BIT3; }     6、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。        Int *ptr;        Ptr = (int *)0x67a9;        *ptr = 0xaa55;     7、中断是嵌入式系标中的重要的组成部分,这导致了很多编译开发商提供一种扩展让标准备C支持中断,具体代表是产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt去定义一个中断服务程序,请评论一下此代码的。   __interrupt double compute_area (double radius) {  double  area = PI * aadriuas* radius; printf(“%f”,area); return area; }        ISR不能有参数和返回值!!!在ISR中做浮点运算是不明智的,因为ISR应该短而高效!!!而且很多编译器对浮点的可重入支持都不好,会让更多额外的寄存器入栈,printf函数常有可重入问题,而且性能也不高!!!     8、下面的代码输出是什么,为什么?   void foo(void)   {    unsigned int   a = 6;    int   b = -20;    (a+b> 6) ? puts("> 6") : puts("<= 6");   }        当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型,谨记!     9、C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?   Int a = 5, b = 7, c;   c = a+++b;   c = a+++b   等效为 c = (a++) +b   故a=6,b=7,c=12; 编写代码要有良好的风格和可读性,不然,自已修改起来都困难。  

工程师
2012-02-25 23:28:00     打赏
16楼
请不要做浮噪的嵌入式工程师!
想想我大学的前三年都是学各种MCU,实现各种很“牛B”的工能,现在回头看看突然觉得也就那样,返璞归真,从新修练内功,《数据结构与算法》《操作系统原理》《数字信号处理》,我想,这些才是我永立于不败之地的根基,才是我最大的资本!!!

菜鸟
2012-04-15 07:32:44     打赏
17楼

很好


共17条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]