自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 有关GetMemory()问题的思考

昨天笔记遇到这些个题目,只知道错在哪里,但不知道真正程序运行后的结果会是怎么样。回来查一下做个笔记。例1.void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str );  strcpy( str, "hello world" )

2016-10-29 10:52:53 432

原创 Linux操作系统的 内核空间和用户空间

作为中央核心处理单元的CPU,除了生产工艺的不断革新进步外,在处理数据和响应速度方面也需要有权衡。 稍有微机原理基础的人都知道Intel X86体系的CPU提供了四种特权模式ring0~ring3,其中ring0特权最高,ring3的特权最低,之所以要做这样的区分一个主要目的是保护资源,通俗来讲要保护的资源无非就是“内存、I/O端口以及执行特殊机器指令的能力”。任何一个时刻,x86 CPU都是在一

2016-10-27 17:01:02 570

原创 malloc,vmalloc,kmalloc

1、Linux内核管理内存空间的分配,所有程序对内存空间的申请和其他操作,最终都会交给内核来管理。 2、linux实现的是“虚拟内存系统”,对用户而言,所有内存都是虚拟的,也就是说程序并不是直接运行在物理内存上,而是运行在虚拟内存上,然后由虚拟内存转换到物理内存。 3、linux将所有的内存都以页为单位进行划分,通常每一页是4KB; 4、在对虚拟内存地址到物理内存地址进行转换时,内核会对地址的

2016-10-27 16:39:43 343

原创 如何以最快的速度计算出一个二进制数中1的个数

题目:如何以最快的速度计算出一个二进制数中1的个数 重点在于,这里有十亿或万亿个int数字,怎样做才能优化算法呢?解答:统计一个字节序列中1的个数,我首先想到的是最简单,把这个数每次右移一位,然后与0x01逻辑与进行统计,相当于总共将真个字节序列遍历了一遍。然而仔细想想,一个十亿或万亿的字节序列,能存到一个数(或称为变量)中?必然不可以,因此这是陷阱所在。while(num)

2016-10-27 16:24:20 5402 1

原创 C语言中可变参数函数实现

C99版本加入可变参数列表概念。用于实现函数参数的变长传递。#include<stdarg.h>中定义了相关方法。typedef struct{ char *ao; //起始地址 int offset;//相对偏移量}va_list;控制函数: void va_start( va_list arg_ptr, prev_param ); //创建 type va_arg(

2016-10-27 09:41:03 690

原创 带参数的main函数和命令行参数

1.说明: 当系统调用主函数时,系统也可将参数 (命令行) 传给主函数,这个参数可以认为是 main函数的形式参数。2.格式: main(int argc, char *argv[ ]) 规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,(由于main函数不能被其它函数调用,那么,在何处把实参值赋予main函数的形参呢? 实际上,m

2016-10-27 09:21:14 2569

原创 字符串笔试题

1.编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.#include <stdio.h>#include <string.h>void reserve( char * str , int len){ int i; char temp; for ( i = 0; i

2016-10-25 21:43:20 617

原创 进程间通信(8) - 消息队列

消息队列就是一个消息的链表,可以把一条消息看做一个记录,具有特定的格式以及特定的优先级,消息的发送和接收都以条为单位。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。接收进程可以独立地接收含有不同类型值的数据块。

2016-10-25 21:39:45 190

原创 进程间通信(6) - 内存共享

共享内存的概念一个进程不能简单地将自己的内存空间地址传递给其他进程使用,这是因为Linux操作系统的内存保护机制或者说内存映射机制的限制。 在一个进程内,指向一块内存的指针实际上是虚拟地址,而不是真正的物理内存地址,这个地址仅在当前进程内使用才是有效的。 但是,如果通过某种方式能够实现多个进程访问一块物理内存,那么进程之间的数据交换就可以通过读写内存来进行,这将是一种效率很高的通

2016-10-25 21:36:50 286

原创 理解宏:#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

最近调试程序,发现ST的固件库中到处都是assert_param()函数,便查了一下,做个笔记。assert_param语句的作用?assert_param语句是用于程序开发的时候,调试用的检测语句,帮助程序员始终选择有效的参数。默认是不开启的,可以无视它的存在。但是,当你在调试程序的时候,可以打开这个检测机制,调试完了再关闭。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3

2016-10-25 21:28:32 7677

原创 进程间通信编程(5) - 信号量

信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 竞态条件(race condition)是一个在设备或者系统试图同时执行两个操作的时候出现的不希望的状况,但是由于设备和系统的自然特性,为了正确地执行,操作必须按照合适顺序进行。 在计算机内存或者存储里,如果同时发出读写大量数据的指令的时候竞

2016-10-25 20:42:31 295

原创 进程间通信编程(4) - 信号

假设要访问一个文件,如果多个进程试图在同一时间更新这个文件,文件中的数据就可能会遭到破坏。不同的进程要求向文件中写入数据(例如,更新日志),这本身并没有错,问题只可能出现在对文件进行更新的那部分代码上。 这部分真正执行文件更新的代码需要独占式地执行,它们被称为临界区域。1.信号的本质 信号是在软件层次对中断机制的一种模拟,在原理上,一个进程收到一个信号和CPU接收到一个中断请求可以说是一样的。

2016-10-25 20:41:46 283

原创 进程间通信编程(3) - 有名管道

使用管道只能在相关的程序之间传递数据,即这些程序是由一个共同的祖先进程启动的。如何在不相关的进程之间交换数据呢? 可以用FIFO文件完成这项工作,它通常被称为命名管道(named pipe)。命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但它的行为却和没有名字的管道类似。 可以在命名行上创建命名管道,也可以在程序中创建。命令行的命令是: mkfifo file

2016-10-25 19:55:54 290

原创 进程间通信编程(2) - 无名管道

管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。

2016-10-25 19:35:02 355

原创 Linux进程间通信方式

一些复杂的应用程序可能会需要多个进程分工协作来满足所需的功能需求,这就必然涉及到数据在进程之间的共享或交换,称为IPC(Inter-process communication,进程间通信)。

2016-10-25 19:00:22 261

原创 memcpy和strcpy区别

strcpy和memcpy

2016-10-25 10:59:38 1822

原创 选择排序 - 算法

选择排序的基本思想是以数组arr[n]为例,每一趟(假设目前为第i趟)在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的值作为有序序列中第i个值。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。选择排序的过程分析第1趟,在待排序记录arr[1]~arr[n-1]中选出最小的记录,将它与r[0]交换; 第2趟,在待排序记录r[2]~r[n-1]中选出最小的记录,将它与r[1]交换

2016-10-25 09:40:38 318

原创 (笔记)位运算

1.按位与 ── & (1)格式:x&y (2)规则:对应位均为1时才为1,否则为0。例如,3&9=1: 0011 & 1001 ----------- 0001 (3)主要用途:取(或保留)1个数的某些位,其余各位置0。 2.按位或 ── | (1)格式:x|y

2016-10-23 21:23:06 396

原创 理解复杂的C/C++声明

介绍 : 曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的 C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地 理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C++声明并不是好的编程

2016-10-23 21:01:17 208

原创 (笔记)运算符和表达式

C语言的运算符:(1)算术运算符 (+ - * / %) // % 只能对int型数据操作(2)关系运算符 (> < == >= <= !=)(3)逻辑运算符 (! && ||)(4)位运算符 (& | ~ ^ << >>)(5)赋值运算符 (=及其扩展赋值运算符)(6)条件运算符 (? :)(7)逗号运算符 (,)(8)指针运算符 (* &)(9)求字节数

2016-10-21 19:47:03 562

原创 (笔记)不同数据间的混合运算

不同数据类型间的混合运算

2016-10-21 19:21:56 1346

原创 (笔记)从一道笔试题看字符型数据

int main(){ char a[1000]; int i; for(i = 0; i<1000;i++) { a[i] = -1 – i; } printf(“%d\n”,strlen(a)) ; return 0; }

2016-10-20 14:34:07 617

原创 快速排序 - 算法

快速排序算法

2016-10-20 11:49:01 372

原创 (笔记)浮点型数据

浮点型数据

2016-10-20 10:21:41 822

原创 (笔记)原码、反码和补码的表示方法

笔记

2016-10-19 13:49:20 1496

原创 如何成为合格的嵌入式Linux开发工程师

成为一名合格的嵌入式Linux开发工程师需要学习哪些知识?

2016-10-19 10:42:35 1206

原创 gets()和puts()函数分析

笔记

2016-10-18 11:20:31 9611

原创 Shell (1)

shell 基础

2016-10-11 17:22:10 292

原创 (笔记)研发工程师方向笔试题(网易百度腾讯)

研发工程师/嵌入式软件工程师 笔试题

2016-10-11 09:32:01 1942

原创 (笔记)char * p与 char p[ ] 的区别

char * p与 char p[ ]区别。char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8

2016-10-10 13:43:59 3496

原创 (笔记)英腾技术开发实习生面试技术题(答案分析)

嵌入式面试

2016-10-09 15:40:44 1220

原创 #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); }

#include <stdio.h>int inc(int a){ return (++a);}int multi(int * a, int * b, int *c){ return (*c = *a * *b);}typedef int(*FUNC1)(int in); //此时FUNC1变成了指向函数的指针typedef int(FUNC2)(int *,int *,i

2016-10-05 23:53:45 5278 1

原创 (总结)typedef和# define的用法和区别

typefef 和 #define 用法以及区别

2016-10-05 16:41:25 687

原创 (笔记)Linux下网络编程,采用TCP协议实现的C/S架构

TCP/UDP介绍TCP(Transfer Control Protocol)传输控制协议是一种面向连接的协议, 当我们的网络程序使用这个协议的时候,可以保证我们的客户端和服务端的通信是可靠的,安全的,适合于传输大批量数据的情况. UDP(User Datagram Protocol)用户数据报协议是一种非面向连接的协议, 这种协议并不能保证我们的网络程序的通信是可靠的,适合一次传输少量的数据.

2016-10-04 20:03:14 5613

原创 (摘抄笔记)从一道面试题看struct中的内存对齐

结构体 内存对齐

2016-10-03 09:40:36 883 1

原创 (学习笔记) SPI通信协议

概念SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种通信接口技术。SPI,是一种高速的,全双工,同步串行通信总线,并且在芯片的管脚上只占用四根线(MISO,MOSI,NSS,SCK)。主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。引脚SPI接口经常被称为4线串行总线,以

2016-10-02 16:15:31 31962

原创 很高兴,开通CSDN博客了

很高兴,开通CSDN博客了,对今后的学习和工作是一件重要的大事。为什么要开通博客? 平心而论,老师说是入行的外在体现,是老师的要求。但使用CSDN博客后发现真的大有裨,在读和写文章中对知识的理解更为深入。写博客 - 告诫:一定要有坚持。写得再烂,写得再入门,也要坚持,相信积累的力量。一定要理解弄懂。如果是为了篇数和面子,那写博客就失去了意义。写博客 - 好处:知道是一个境界,但用教学的口吻写出来后会

2016-10-01 21:12:20 451

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除