C/C++
文章平均质量分 68
gexueyuan
这个作者很懒,什么都没留下…
展开
-
rtthread的ringbuffer和rt_printf不可重入性
需要自行枷锁原创 2015-04-20 10:52:01 · 1583 阅读 · 0 评论 -
container_of宏定义 解析
关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the type of the container struct thi转载 2011-11-02 23:34:10 · 576 阅读 · 0 评论 -
printf的参数类型
printf是我们c语言中常用的打印输出函数,原型为int printf(const char *format,[argument]),需要包含头文件stdio.h format 参数输出的格式,定义格式为:%[flags][width][.prec][F|N|h|l]type format为一个字符串,定义了以后给出的参数的类型,但是printf并不对参数类型进行检验,只是按照f原创 2013-08-09 12:08:19 · 4900 阅读 · 2 评论 -
linux应用程序数据存放位置(备份)
rtrrtrtrt原创 2013-08-27 09:02:09 · 1828 阅读 · 0 评论 -
c语言要点摘录(面试题分析以及疑点分析)(完)
三十七.面试分析1.指针运算#include void main(){ int TestArray[5][5] = { {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25},原创 2013-08-05 16:57:14 · 691 阅读 · 0 评论 -
C语言为什么不执行数组边界的有效性检查
<br /> 最早的C编译器并不检查下标,而最新的编译器依然不对它进行检查。这项任务之所以很困难,是因为下标引用可以作为任意的指针,而不仅仅是数组名。<br /> 作用于指针的下标引用的有效性既依赖于该指针当时恰好指向什么内容,也依赖于下标的值。结果,C的下标检查所涉及的开销比你开始想象的要多。编译器必须在程序中插入指令,证实下标的结果所引用的元素和指针表达式所指向的元素属于同一个数组。这个比较操作需要程序中所有数组的位置和长度方面的信息,这将占用一些空间。当程序运行时,这些信息必须进行更新,原创 2011-03-30 22:59:00 · 3488 阅读 · 4 评论 -
c语言中的顺序点
http://bbs.csdn.net/topics/370153775经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 要弄清这些,需要理解转载 2013-08-05 17:27:59 · 2066 阅读 · 2 评论 -
c语言要点摘录(33~36 函数)
三十三.认清函数的真面目 声明和定义:1.程序中的声明可理解为预先告诉编译器实体的存在,如:变量,函数等 2.程序中的定义明确指示编译器实体的意义 函数参数:1.函数参数在本质上与局部变量相同,都是在栈上分配空间原创 2013-08-05 11:24:46 · 1023 阅读 · 0 评论 -
c语言要点摘录(29~32 内存管理的艺术)
二十九.动态内存分配 为什么使用动态内存分配:c语言中的一切都是基于内存的,变量和数组都是内存的别名,如何分配这些内存由编译器在编译期 间决定,如果需要一些额外的内存空间,就需要动态分配 malloc所分配的是一块连续的内存,以原创 2013-07-29 11:51:37 · 1001 阅读 · 0 评论 -
在notepad++(6.4.2)环境下配置MinGW的命令行
安装了notepad++的最i新版本6.4.2,选择“插件”--》“plugin manager”--》“show plugin manager”,在available里面选择“NppExec”,然后点击安装。 打开一个c程序,使用F6快捷键,就会弹出Execute对话框,参照notepad++的帮助文档,在里面填入命令行:// save current file NPP_SA原创 2013-07-15 00:19:30 · 1213 阅读 · 0 评论 -
C语言中交换两个变量(备份)
c语言中交换变量的方法有很多:1.使用中间变量进行交换指针模式:swap( int* p1,int* p2 ){ int p; p = *p1; *p1 = *p2; *p2 = p;}引用变量模式:void swap(int &a,int &b){a+=b;b=a-b;a=a-b;}也可以直接定义成为宏:#define swa原创 2013-07-05 11:37:02 · 739 阅读 · 0 评论 -
c语言要点摘录(15~20)
十五.编译过程 file.c,file.h经过预处理器处理成为file.i,再经过编译器(gcc)成为汇编file.s,再经过汇编器(as)成为file.o,最后通过连接器(linker)成为可执行文件。 预处理器:1.处理所有的注释,以空格代替 2.将所有的#define删除,并展开所有定义的宏原创 2013-07-18 10:43:59 · 667 阅读 · 0 评论 -
C语言要点摘录(11~14)
十一.逻辑运算符使用分析 &&和||的短路规则:||从左向右计算,遇到为真的条件时停止计算,整个表达式为真;所有条件为假时,表达式才为假 &&从左向右计算,当遇到为假的条件时停止计算,整个表达式为假;所有条件为真时表达式才为真。 !运算符的结果只有0和1,只原创 2013-07-15 22:03:24 · 867 阅读 · 0 评论 -
C++要点摘录(三)函数的升级
三.函数的升级 内联函数 C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数注:内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求(例如和声明在一起时,会无效)C++编译器可以将一个函数进行内联编译被C++编译器内联编译的函数叫做内联函数内联函数在最终生成的代码中是原创 2013-09-17 11:47:13 · 801 阅读 · 0 评论 -
C++要点摘录(四)新的关键字
新的关键字 1. C++中的动态内存分配:C语言中malloc是C库的内容,不是C语言中的组成。C++中的new和delete是语言本身的关键字 .C++中通过new关键字进行动态内存分配 .C++中的动态内存申请是基于类型进行的 .delete关键字用于内存释放原创 2013-09-17 16:56:00 · 767 阅读 · 0 评论 -
C++要点摘录(五)经典问题解析
1.const和引用#include int main(){ const int x = 1;//定义常量 const int& rx = x; int& crx = const_cast(x);//取地址就会为常量x分配空间,crx成为这个空间的别名,crx为变量 int& nrx = const_cast(rx);原创 2013-09-18 16:49:55 · 648 阅读 · 0 评论 -
atoi传入参数的要求
非局部变量或者在栈中的变量。原创 2015-04-20 10:38:16 · 1459 阅读 · 0 评论 -
STM32F4系列的app和boot相互跳转
官方给出的IAP的核心代码:原创 2014-09-30 15:01:17 · 7007 阅读 · 0 评论 -
共用体(union)的用法
以前c语言学到union的时候,总是疑惑这家伙该怎么用,有什么存在的价值原创 2014-09-04 22:30:21 · 2062 阅读 · 0 评论 -
c语言要点摘录(25~28 指针和数组 下)
二十五.指针数组和数组指针 数组类型:c语言中的数组有自己特定的类型 数组类型由元素类型和数组大小共同决定,例如:int array[5]的类型是int [5],而不是int 定义数组类型:通过typedef为数组类型重命名-------typedef type(nam原创 2013-07-24 11:40:06 · 910 阅读 · 0 评论 -
C语言要点摘录(1~5)
1.基本数据类型:数据类型可以理解为固定内存大小的别名,是创建变量的模子。原创 2013-07-10 15:32:36 · 672 阅读 · 0 评论 -
C语言要点摘录(6~10)
六.struct和union 1.struct:空结构体所占的空间与编译器自己的规定有关。 结构体中最后一个元素可以是未定义大小的数组,由此产生柔性数组。 2.union:受系统大小端的影响。 union c{int i;char c;};union CC;CC.i=1;printf("%原创 2013-07-14 00:10:13 · 760 阅读 · 0 评论 -
事实证明linux永远是number 1
转自:http://www.linuxeden.com/html/news/20140109/147309.html嗨,我正在写一个简单的程序,我要让这个程序打印出一个整数。#include int main() { int linux = 701; printf("%d", linux); return 0;}够简单吧。真的吗?我把它存转载 2014-01-10 09:43:32 · 651 阅读 · 0 评论 -
C++要点摘录(六)面向对象和类的封装
面向对象的概念: 类的封装: 类通常非为类的实现细节和类的使用方式两个部分。.使用类的时候,不需要关心其实现细节。.当创建一个类时,才需要考虑其内部实现细节封装的基本概念:1.原创 2013-11-06 15:19:57 · 609 阅读 · 0 评论 -
C++要点摘录(一)C到C++的升级
c语言支持作用域首部定义,作用域指{}区域,不一定是函数首部。for循环中,在for的作用域中定义的变量,在作用域结束的时候就释放了#includevoid main(){int i,c,j; for(i=0; i<10; i++) { int k=0; for(j=0; j<10; j++) { c原创 2013-09-16 11:08:36 · 668 阅读 · 0 评论 -
c语言要点摘录(21~24 数组与指针-上)
二十一.指针基础 指针本质:指针本质上也是一个变量,需要占用一定的内存空间,指针用于保存内存地址的值。 传值调用与传址调用:1.指针是变量,因此可以声明指针参数 2.在一个函数体内部需要改变实参的值,则需要使用指针参数,传址。原创 2013-07-22 17:24:46 · 798 阅读 · 0 评论 -
数据结构解析
typedef struct tagNode{char *pItem;pNode pNext;} *pNode;这样定义是错误的正确定义应该是:1)、typedef struct tagNode{char *pItem;struct tagNode *pNext;} *pNode;2)、原创 2013-10-28 19:30:16 · 123 阅读 · 0 评论 -
C++要点摘录(二)C++中的引用
C++中的引用变量名: 变量是一段连续存储空间的别名 程序中通过变量来申请并命名存储空间 通过变量的名字可以使用存储空间C++中新增加了引用的概念 引用可以看做一个已定义变量的别名 引用语法:Type& name = var; 普通引用在声明时必须用其他的变量进行初始化,两者的地址相同,不能使用常量进行初始化(con原创 2013-09-16 14:30:21 · 704 阅读 · 0 评论 -
嵌入式程序员必须知道的16个问题(C语言方面)
转自:http://blog.csdn.net/linweig/article/details/5060143C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息.此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许转载 2013-06-18 15:41:00 · 875 阅读 · 1 评论 -
指针做函数形参分析
有一个经典的C语言函数题目:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ){ char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str );} 经过指针变量通原创 2013-06-12 00:10:12 · 1626 阅读 · 0 评论 -
零长度数组(柔性数组)的用法
在前面的文章中的dnw源代码,使用了这样一个结构体:struct download_buffer { uint32_t load_addr; /* load address */ uint32_t size; /* data size */ //size=地址(4位)+大小(4位)+数据+校验(2位) uint8_t data[0];原创 2013-02-22 16:11:28 · 1884 阅读 · 0 评论 -
S3C6410开发全纪录(一)-----还原SD卡启动的真相
转自:http://blog.csdn.net/turui/article/details/6634461 前章我们也大致分析了SD卡的启动过程,在具体进行问题的定位及解决的过程中,发现还是有很多不明确的地方,网上的文章也多是人云亦云让我们来一步一步搞清楚S3C6410 SD卡启动的步骤及过程(我这里的开发板为OK6410,256M+1G的配置,SD卡为2G,MMC)转载 2011-12-06 20:12:03 · 2038 阅读 · 0 评论 -
u-boot分析[一]
在编译u-boot之前都要执行”make XXX_config”命令,笼统的说是配置u-boot,使其编译出适合目标板的bootloader。那么该命令都做了那些工作,具体的执行过程是怎样的? 我们首先从u-boot的Makefile文件看起,例如我们首先执行”make smd2410_config”命令,则在Makefile中会执行:MKCONFIG := $(SRC转载 2011-12-06 19:45:12 · 560 阅读 · 0 评论 -
6410触摸屏驱动分析(s3c-ts.c)(Linux)(分析)
转自:http://www.cnblogs.com/liu_xf/archive/2011/06/22/2086750.html摘要:分析内核s3c-ts.c源码,看它是如何采集坐标信息及防抖动处理的。介绍:直接上源码吧,完全注释:001 /* linux/drivers/input/touchscreen/s3c-ts.c 002 * 003转载 2011-11-09 12:02:59 · 1877 阅读 · 0 评论 -
linux启动分析
本文以流行的Samsung公司的S3C2410,openmoko平台和linux-2.6.24为例,介绍如何在ZIX嵌入式开发环境下探索linux内核启动过程。Linux内核启动一般由外部的bootloader引导,也可以在内核头部嵌入一个loader,实际的应用中这两种方式都会经常遇到。所以要了解内核启动最开始的过程,必须对bootloader如何引导内核有所熟悉。下面我们从u-转载 2011-12-01 16:21:13 · 812 阅读 · 0 评论 -
在Ubuntu 建立nfs服务器
建立Ubuntu nfs服务器 在嵌入式 linux 开发的时候,常常需要使用Ubuntu nfs服务器以方便程序的调试.使用 nfs,用户可以将板子要用到的根文件系统放在主机目录下,开发板则通过以太网挂载到这个目录并将这个目录下的文件作为根文件系统的内容,这样用户的程序更新后不比重新烧写板子的根文件系统便能被重新使用,这点能够大大加快程序的调试.Ubuntu 下安装 nfs 服务器的步骤如原创 2011-11-09 15:56:13 · 1048 阅读 · 0 评论 -
移植ads7846驱动到tiny6410(tiny6410)
转自:http://www.cnblogs.com/liu_xf/archive/2011/06/23/2088417.html摘要:目前,市面上很多6410开发板都存在触摸屏抖动的问题,tiny6410也不例外,友善的解决方法是采用一线触摸,即在LCD板上,用一个单片机控制ADS7846芯片AD转换,再将数据通过单总线的方式与6410通讯。可是,我这里没有一线触摸板,于是就开转载 2011-11-09 13:59:48 · 2019 阅读 · 0 评论 -
PIC中的#pragma idata 和#pragma udata
PIC中的#pragma idata 和#pragma udata: idata表示已经初始化的数据。udata表示没有初始化的数据。当一个数据块没有足够的空间用于存放一个连续的数据时(数组);此时便可用#pragma idata 或#pragma udata来定义一个新的存放数据块的区域。但是#pragma idata 或#pragma udata申请的空间也还是有限的,一般不能转载 2011-11-03 18:29:40 · 3992 阅读 · 2 评论 -
Source Insight的一些技巧
1、背景色选择要改变背景色Options->preference->windows background->color设置背景色2、解决字符等宽对齐问题SIS默认字体是VERDANA,很漂亮。这网页上应该也是用的VERDANA字体。但由于美观的缘故,VERDANA字体是不等宽的。比如下面两行llllllllllMMMMMMMMMM同样10个字符,长度差多了.用VERDANA转载 2011-11-03 20:44:11 · 858 阅读 · 0 评论 -
typedef和typeof
typedef用来定义类型别名,c/c++里都有,属于语言的一个特性,和mfc无关比如typedef int* intptr;intptr a; // 相当于int* a;typeof,我所知道的是gcc中对c/c++语法的一个扩展,用来静态获取参数类型比如int a = 3;typeof(a) b = 4; // 相当于 int b = 4;typeof("1原创 2011-11-02 22:24:12 · 914 阅读 · 0 评论