嵌入式C技巧
Big_Huang_JS
这个作者很懒,什么都没留下…
展开
-
const和extern用法
雖說不難,但很重要!!1. const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误(边际效应)2. const 修饰类的数据成员。如:class A{ const int size; … }const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象转载 2011-03-04 17:09:00 · 8275 阅读 · 0 评论 -
字符串之strcat
【原创】最近在使用C语言编程,发现自己原来好多细节的东西掌握的不是很好,比如字符串的连接函数strcat()其实里面有很多需要注意的东西,今晚在写程序的时候就是在这里出现了一个大的错误,导致程序崩溃,通过GOOGLE以后发现呵呵如下:【转】一个会立刻报错的程序代码转载 2011-10-18 14:54:49 · 1059 阅读 · 0 评论 -
C++命名空间
一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以转载 2011-08-13 22:33:17 · 588 阅读 · 0 评论 -
常用的浮点数存储格式:32-bit IEEE-754 floating-point format
IAR支持这种数据格式 对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数), 1、其第31 bit为符号位,为0则表示正数,反之为负数,其读数值用s表示; 2、第30~23 bit为幂数,其读数值用e表示; 3、第22转载 2011-07-18 22:22:35 · 11891 阅读 · 0 评论 -
#ifdef OS_GLOBLES… 变量/函数的定义和声明
<br />首先, 尽管一个全局变量或函数可以(在多个编译单元中) 有多处“声明”, 但是“定义” 却只能允许出现一次。定义是分配空间并赋初值(如果有) 的声明。最好的安排是在某个相关的.c 文件中定义, 然后在头文件(.h) 中进行外部声明, 在需要使用的时候, 只要包含对应的头文件即可。定义变量的.c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。<br /> 这条规则提供了高度的可移植性: 它和ANSI C标准一致, 同时也兼容大多数ANSI 前的编译器和连接器。Unix 编译器和转载 2011-04-24 14:47:00 · 3156 阅读 · 0 评论 -
C语言声明语法
<br />概述 <br /> 在很多情况下,尤其是读别人所写代码的时候,对C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。<br /> 问题:声明与函数 <br /> 有一段程序存储在起始地址为0的一段内存上,如果我们想要调用这段程序,请问该如何去做? <br /> 答案<br /> 答案是(*(void (*)( ) )0)( )。看起来确实令人头大,那好,让我们知难而上,从两个不同的途径来详细转载 2011-04-08 10:38:00 · 765 阅读 · 0 评论 -
C语言中的文件包含
很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大的好处,通过文件包含的方法把程序中的各个功能模块联系起来是模块化程序设计中的一种非常有利的手段。 文件包含处理是指在一个源文件中,通过文件包含命令将另一个源文件的内容全部包含在此文件中。在源文件编译时,连同被包含进来的文件一同编译,生成目标目标文件。 很多人再初学时都会对这个很晕,怎么写文件件? 怎么包含才能避免重定义? 等等问题。。。 其实这个只要了解了文件包含的基本处理方法就可以转载 2011-04-07 19:37:00 · 7437 阅读 · 0 评论 -
C/C++语言可变参数表深层探索
<br />1.引言 <br />C/C++语言有一个不同于其它语言的特性,即其支持可变参数,典型的函数如printf、scanf等可以接受数量不定的参数。如: <br />printf ( "I love you" ); <br />printf ( "%d", a ); <br />printf ( "%d,%d", a, b ); <br />第一、二、三个printf分别接受1、2、3个参数,让我们看看printf函数的原型: <br />int printf ( const char *forma转载 2011-03-21 17:00:00 · 627 阅读 · 0 评论 -
解引用:dereference,look at the contents of the address contained in
c语言中“解引用”为什么理解这么困难<br />对于c语言中指针的操作符有两个:&和*。对于&,好理解,翻译的也不错,就是“取地址”的意思。但对于*,翻译为“解引用”,字面意思不好理解,即使看了后面内容才知道不过是“取指针指向的地址的内容”,也仍然是觉得怪怪的,“解引用”这个词难记也难于从字面直接判断意思,以致时间长了还是感觉像见了熟悉的陌生人。<br />翻了好多资料,以及各种网上解释,现在大约有点意思了。依我现在的理解,约摸是这样:<br />“引用”这个词,出现最多的场景就是:在文章或者注脚里,写上“转载 2011-03-19 10:13:00 · 1495 阅读 · 0 评论 -
C/C++语言void 及void 指针深层探索
<br />1.概述<br /> 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。<br /> 2.void的含义<br />void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。<br /> void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:<br /><br />voi原创 2011-03-19 15:41:00 · 541 阅读 · 0 评论 -
typedef用法详解
<br />用途一: <br />定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: <br />char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, <br />// 和一个字符变量; <br />以下则可行: <br />typedef char* PCHAR; // 一般用大写 <br />PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 <br />虽然: <br />char *pa转载 2011-03-15 10:49:00 · 727 阅读 · 0 评论 -
C语言关键字volatile的使用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3) 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序转载 2011-03-10 19:02:00 · 1428 阅读 · 0 评论 -
指针强制类型转换
<br />当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。 <br />例十四:<br />1。 float f=12.3;<br />2。 float *fptr=&f;<br />3。 int *p;<br />在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞?是用下面的语句吗?<br />p=&f;<br />不对。因为原创 2011-03-09 11:26:00 · 2268 阅读 · 2 评论 -
关于#ifdef __cplusplus extern
<br /> 面试时被问到过,不甚明了,网上百度一下,整合了两个仁兄的文章,如下。:-) <br /> <br />时常在cpp的代码之中看到这样的代码: <br />#ifdef __cplusplus <br />extern "C" { <br />#endif <br />//一段代码 <br />#ifdef __cplusplus <br />} <br />#endif <br /><br /> 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个转载 2011-03-07 22:48:00 · 796 阅读 · 1 评论 -
想成为嵌入式程序员应知道的0x10个基本问题
<br />想成为嵌入式程序员应知道的0x10个基本问题<br />简述:<br />这是嵌入式C程序员的基本知识。作者在Embedded Systems Programming杂志上发表了很多嵌入式系统开发方面的文章。<br />首 页 > 嵌入式开发 > 语言与工具 <br />作者:Jones Nigel 更新日期:2005-04-08<br />来源:internet 浏览次数:< src="http://www.upsdn.net/view.php?id=423" type="text/j转载 2011-03-08 19:36:00 · 535 阅读 · 0 评论 -
编写高效c语言的四大绝招
<br />编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就是针对编程工作中的一些体会和经验做相关的阐述。 <br /> 第一招:以空间换时间<br /> 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:<br /> 方法A:通常的办法<br />#define LEN 32<br />char string1 [LEN];<br />memset (string1,0,LEN);<转载 2011-03-07 23:05:00 · 564 阅读 · 0 评论 -
变量和值在内存中的存储位置
变量和值在内存中的存储位置 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分 配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块转载 2011-03-02 21:48:00 · 2120 阅读 · 0 评论