嵌入式应用编程
王建军二
这个作者很懒,什么都没留下…
展开
-
《嵌入式Linux系统工程师实训教程》读书笔记(二)
Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来。AT&T的贝尔实验室改进后形成的“system v ipc”,该通信进程局限在单个计算机内,而BSD(加州大学伯克利分校)跳过该限制,形成了基于套接口(socket)的进程间通信机制,Linux则把两者继承下来。最初UNIX IPC包括管道、FIFO、信号,system V IPC包括system v消息队列、system原创 2014-12-17 15:17:32 · 824 阅读 · 0 评论 -
《C面试真题精讲》程序摘录
#include #include //#include #if 0char*mystrcpy(char *dest,char *src){//char *p = dest;char *p;p = dest;while (*src != '\0'){*dest++ = *src++;printf("%s\n",dest);转载 2015-04-03 11:04:10 · 443 阅读 · 0 评论 -
C语言常见的内存分配
本篇博客内容摘自《经典C面试真题精讲》C语言的内存分配区域主要有以下五个:1.栈区:在执行函数时,函数内部局部变量(不包含static变量)、函数返回值的存储单元在栈上创建,函数执行结束时这些存储单元自动被释放;2.堆区:即动态内存分配,程序在运行的时候用malloc(calloc、realloc等)申请的内存,程序员自己负责用free释放;3.静态存储区:该内存在程序编译的时候就转载 2015-04-04 16:03:30 · 456 阅读 · 0 评论 -
typedef 和 #define
1.#define是一个预处理指令,在预编预处理时进行简单的替换,不作正确性检查;2.typedef是在编译时处理的,typedef不是简单的替换,而是采用如同定义变量那样的方法来声明一种类型;3.typedef一个比较难且常用的用法可以参考以下内容。http://blog.chinaunix.net/uid-26963688-id-3466311.html转载 2015-04-03 17:22:51 · 384 阅读 · 0 评论 -
内存泄露之退出函数路径
以下内容摘自李亚锋先生的《经典C面试真题精讲》Info1 = malloc(sizeof(struct TableInfo));if (!Info1){printf("Could not allocate memory\n");return -1;}Info1->Instances = 2;Info1->NextInstance = 1;Info转载 2015-04-05 09:22:33 · 394 阅读 · 0 评论 -
浅谈volatile
int i;i = *(volatile unsigned long *)0xfff40080;用volatile关键字修饰变量或地址,相当于告诉编译器,这个修饰的值或地址指向的值会随时发生变化,每次使用时都需要去内存里重新读取它的值。volatile对应的变量可能在你的程序本身不知道的情况下发生改变比如多线程的程序,共同访问的内存当中,多个程序都可以操纵这个变量你自己的程序,是无法判转载 2015-04-11 11:03:55 · 420 阅读 · 0 评论 -
宏定义中的#和##
在宏定义中经常出现#和##两种操作,#用来把参数转换成字符串,##则用来连接前后连个参数,把他们变成一个字符串;#include #define test(n) printf("test("#") = %d\n",val##n)intmain(void){int val3 = 10;int val8 = 23;test(3);test(8);转载 2015-04-11 11:41:13 · 378 阅读 · 0 评论 -
C语言中与调试相关的宏
以下内容摘自李亚锋先生的《经典C面试真题精讲》:#include void testMacroDefine(){printf("%s, %d, %s\n",__FILE__,__LINE__,__func__);printf("%s, %s\n",__DATE__,__TIME__);}intmain(void){testMacroDef原创 2015-04-07 15:24:32 · 373 阅读 · 0 评论 -
几种C语言优化代码技巧
以下内容摘自李亚锋先生的《经典C面试真题精讲》1.结构体设计为成员最长类型长度的整数倍;2.减少函数参数的个数,不需要返回值的函数定义为void类型;3.if...else....多条件分支语句中,把出现频率高的条件放在前面;4.同时声明多个相同类型变量优于分别单独声明变量;5.减少定义全局变量;6.使用#define定义常量和小的函数实现;7.有些情况嵌套汇编语句效率转载 2015-04-12 11:13:34 · 550 阅读 · 0 评论 -
例谈字符串与指针
在学习C语言的过程中,最重要的是多练,但在多练的过程中,我们是有必要去弄懂别人程序的思想,理清思路,如果我们每天只是盲目的敲代码,去拼代码量,那么到最后会发现自己除了键盘敲击速度提高了,对于C语言的认知却没有任何加深。古人有云:熟读唐诗三百首,不会作来也会吟,对于语言的学习我们要多读多练多想,只有量的积累才会达到质的改变。#include #include char*mys原创 2015-04-03 10:35:15 · 463 阅读 · 0 评论 -
C语言指针学习 二
1. C语言中,实参变量与形参变量之间的数据传递,是单向的“值传递”方式。指针变量做函数参数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。我们知道函数的调用可以得到一个返回值,而运用指针变量做参数,可以得到多个变化了的变量值。2.在主调函数中声明所要求的数目的变量,然后把变量的地址作为实参 在定义调用函数的时候,声明与实参数目、类型、位原创 2015-04-03 17:33:32 · 442 阅读 · 0 评论 -
函数exit()和_exit()
本文内容主要是《嵌入式Linux系统工程师实训教程》的读书笔记。_exit()和函数exit()是一对相似的函数:#define __NR__exit __NR_exit /* 参考include/asm-i386/unistd.h */这里__NR_是在Linux源码中为每个系统调用加上的前缀,请注意第一个exitl()前有两条下划线,第二个exit()前有只有一条下划线#i原创 2014-12-17 13:23:03 · 516 阅读 · 0 评论 -
读《嵌入式Linux系统工程师实训教程》笔记(一)
本文内容主要是《嵌入式Linux系统工程师实训教程》的读书笔记。_exit()和函数exit()是一对相似的函数:#define __NR__exit __NR_exit /* 参考include/asm-i386/unistd.h */这里__NR_是在Linux源码中为每个系统调用加上的前缀,请注意第一个exitl()前有两条下划线,第二个exit()前有只有一条下划线#i原创 2014-12-17 14:00:27 · 732 阅读 · 0 评论 -
《嵌入式linux系统工程师实训教程》读书笔记
文件在linux系统学习过程中占据着极其重要的地位,而在学习文件相关知识的过程中”一切皆文件“的思想是核心思想。下面是文件相关知识的一些浅显的总结:首先文件的种类分为普通文件、目录文件、设备文件、管道文件、套接字文件和符号链接文件;普通文件(regular file):普通计算机用户看到的文件,通常驻留在磁盘当中,普通文件常分为二进制文件、文本文件;目录文件(directory):主要原创 2014-12-25 20:54:53 · 804 阅读 · 0 评论 -
VM虚拟机下的ubuntu无线网络连接问题
由于学习需要前段时间在虚拟机下安装了ubuntu系统,在安装过后的第一次使用时可以连接网络使用,再次使用时就无法连接网络,在网上搜索了一些解决方案,最后问题得以解决,下边我将会将问题的解决过程描述出来。本人要连接的是无线网络,下述内容只供参考之用。第一步:第二步:第三步:第四步:第五步:至此,所有步骤完成。原创 2014-12-29 12:09:58 · 1611 阅读 · 0 评论 -
指针和字符串
指针的用法是极其丰富又比较复杂的,在这里简单谈一下指针和字符串。1.char p1[] = "pointer with string!"、char *p1 = "pointer with string!"和char *p1;p1 = "pointer with string!"是等效的,我们知道C语言当中是没有字符串变量是没有办法直接定义的,所以我们平时定义字符串变量可以通过两种途径,一种是通原创 2015-04-02 17:14:40 · 411 阅读 · 0 评论 -
例谈sizeof函数
下面的内容摘自李亚锋先生的《C面试真题精讲》:#include voidfsizeof(int a[][3]){printf("%d\n",sizeof(a));}intmain(void){int a[2][3] = {{101,102,103},{104,105,106}};fsizeof(a);return 0;}转载 2015-04-03 15:56:07 · 384 阅读 · 0 评论 -
C语言数组学习心得(一)
1.用数组名作为函数参数时,要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明2.用数组名作为函数参数,应在主调函数和被调函数中分别定义数组,且数据类型必须移植,否则结果将出错,形参数组中的[]必不可少,以表明该形参是一维数组3.c编译系统对形参数组大小不做检查,所以形参数组可以不指定大小。 如果指定形参数组的大小,则实参数组的大小必须大于形参数组,否则因形参数组的部分元原创 2015-04-03 17:32:16 · 9282 阅读 · 0 评论 -
C语言指针学习 一
1.指针就是地址,变量的指针就是变量的地址,存放地址的变量就是指针变量。 2.利用间接访问的方式访问变量的时候,必须借助指针变量来存放数据的地址。需要说明的是指针类型是对所有类型的指针的总称,指针的类型是指针所指对象的数据类型。一般来讲,指针可以指向所有类型的数据,主要包括以下几种: 第一种:指向变量的指针:变量的指针(存变量的地址) 第二种:指向数组的指针原创 2015-04-03 17:33:33 · 381 阅读 · 0 评论 -
浅谈gets()和fgets()
以下部分内容摘自于李亚锋先生的《经典C面试真题精讲》在linux环境下,当我们使用gcc编译时,发现使用gets()函数的程序无法正确运行,在编译时会出现警告。C语言早期的时候,当从标准输入读入一个字符串的时候使用的是gets()函数,但他不够安全容易产生栈溢出问题,目前已被fgets()函数取代。#include char *fgets(char *s,int size,FI转载 2015-04-12 10:50:15 · 498 阅读 · 0 评论