C
pointfish
这个作者很懒,什么都没留下…
展开
-
嵌入式及手机开发[笔试题目]
嵌入式及手机开发[笔试题目]千辛万苦搞来的,不过很多题目都见过了,比如《想成为嵌入式程序员应知道的0x10个基本问题》上面的。所以有些答案就可以直接去http://blog.csdn.net/ShorminHsu/archive/2007/03/24/1539458.aspx找。这里先放上题目,答案等后期整理出来吧。题目:1。用预处理指令#define 声明转载 2011-06-07 15:35:00 · 1119 阅读 · 0 评论 -
堆栈啥的
C在内存空间的顺序是代码区,数据区,堆,栈代码区:就是存放你的程序的编译后的可执行代码的地方了 数据区:存放你的程序静态数据,如全局变量、常量等。 栈:在函数调用中,保存程序的当前运行状态、函数的参数、返回结果等。 堆:在分配给一个程序的内存中,除了上面三部分,剩下的就是堆了,也就是程序的自由空间,局部变量(自动变量)等,还有New给指针用的空间,都在这里分配。转载 2012-03-02 15:35:54 · 516 阅读 · 0 评论 -
__attribute__
GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__att转载 2011-06-07 15:38:00 · 501 阅读 · 0 评论 -
volatile
1.关于 volatile 我觉得这样的解析最容易理解:如果编译器在代码中发现对同一地址的两次访问之间,没有对该地址进行写操作,那么编译器将优化为第一次寻址读该地址时取得的值作为第二次寻址的值,而并不是再做第二次物理上的 I/O 寻址操作。volatile 关键字指示编译器进行强制 I/O 寻址,因为编译器那样的优化,可能并不是我们真正期望的,譬如那个地址上连接着一个传感器上的寄存器,那么实际上,转载 2011-06-07 15:27:00 · 556 阅读 · 0 评论 -
AVR编程中 (GCC) SIGNAL与ISR的区别
在 interrupt.h中(Copyright (c) 2007)有:/* /def ISR(vector [, attributes]) /ingroup avr_interrupts /code #include /endcode Introduces an interrupt handler function (interrupt service转载 2011-06-07 18:01:00 · 3676 阅读 · 0 评论 -
ISR之不能做什么
中断是嵌入式系统中重要组成部分,很多编译器开发商都让标准c支持中断,并引入关键字_interrupt.但是:1、ISR不能有返回值;2、ISR不能传递参数;3、ISR应该是短而高效的,在ISR中做浮点运算是不明智的;4、ISR中不应该有重入和性能上的问题,因此不应该使用pintf()函数。 转自CSDN 1.ISR 不能有返回值。为什么?2.ISR 不能传原创 2011-06-07 18:06:00 · 3996 阅读 · 0 评论 -
scanf
int main(int argc, char* argv[]){ char Packed_Periodic_Data = 0; char KeyValue = 0; while(0xFF != KeyValue) { scanf("%c",&KeyValue); //输入字符后回车,程序会将‘回车’也原创 2011-06-15 22:33:00 · 386 阅读 · 0 评论 -
宏定义函数指针类型&函数返回左值类值
1.宏定义不分配内存,变量定义分配内存。 2.宏名和参数的括号间不能有空格 3.宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); //下面两种宏的写法容易出错,是宏定义中应避免的, typedef int FUNC1 (int in); typede转载 2011-06-14 16:28:00 · 1514 阅读 · 0 评论 -
C语言中宏定义和函数的取舍
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义:#define MAX( a, b) (转载 2011-06-14 16:22:00 · 426 阅读 · 0 评论 -
GNU C扩展(一)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。一:柔性数组(flexible array) 柔性数组也称为零长度数组,或者零长度数组。这种数组通常在结构体当中出现,它本身并不占用空间,但是有了柔性数组意味着结构体的尺寸充满了变数。例如以下例子:struct usb_i转载 2011-06-13 22:51:00 · 386 阅读 · 0 评论 -
声明和定义的区别
声明(declaration)引入一个名字,而定义(definition)给出程序中各个实体(entity,比如函数,类型等)的完整唯一的描述。一个声明就是一个定义,除非:1. 它声明了一个函数但是没有给出函数体。(问题e)2. 它使用了extern关键字。 (问题d)3. 它声明了一个类的名字。4. 它是typedef。5. 它在类定义中声明了static members.转载 2011-06-12 15:38:00 · 383 阅读 · 0 评论 -
更深入一点理解 switch 语句 及 c/c++ 对 const 的处理
前段时间在论坛上看见台湾李维在>一书中对windows编程模式中,消息处理部分有如下的一些分析: 他说,在消息处理循环中,一般的形式是这样的 MSG msg ; switch( msg ){ case WM_XXXXXXX : .... case WM_XXXXXXX : ....转载 2011-06-12 15:37:00 · 405 阅读 · 0 评论 -
GNU C 扩展(二)
七、attribute机制在GNU C中, 允许声明函数、变量和类型的特殊属性,以便指示编译器进行特定方面的优化和更仔细的代码检查。使用方式为在声明后面加上: __attribute__(( ATTRIBUTE ))。关键字__attribute__用来在声明的时候指定一个特定的属性。该关键字后面紧跟两对圆括号,括号里指定具体的属性,多个说明之间以逗号分隔。GCC支持很多属性,常用的有以下这些转载 2011-06-13 22:53:00 · 417 阅读 · 0 评论 -
不定參數的 C 函式
不定參數的 C 函式 只要寫過 C 程式的人,都用過 printf 這個函式,也都知道它可是一個 不定參數的函式,了解它的運作方式,你也可以實作自己的不定參數的 函式。 先看一下 printf 的原型: int printf( const char *format [, argument]... ); 在format後面的參數转载 2011-06-07 15:34:00 · 469 阅读 · 0 评论 -
堆栈啥的2
什么是堆栈在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。要点:堆:顺序随意栈:先进后出堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方转载 2012-03-02 15:37:14 · 455 阅读 · 0 评论