自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (1)
  • 收藏
  • 关注

转载 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L

char :单字节变量类型,最多表示256个字符,wchar_t :宽字节变量类型,用于表示Unicode字符,它实际定义在 wchar_t c = `A' ;wchar_t * p = L"Hello!" ;wchar_t a[] = L"Hello!" ;其中,宽字节类型每个变量占用2个字节,故上述数组a的sizeof(a) = 14TCHAR / _T( ) : 如果在程序中既包括

2017-06-30 03:19:04 262

转载 不容错过:Linux定时器的使用

用定时器的目的无非是为了周期性的执行某一任务,或者是到了一个指定时间去执行某一个任务。要达到这一目的,一般有两个常见的比较有效的方法。一个是用 linux内部的三个定时器,另一个是用sleep, usleep函数让进程睡眠一段时间,使用alarm定时发出一个信号,还有那就是用gettimeofday, difftime等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用。

2017-06-30 03:16:08 533

转载 POSIX定时器:timer_settime()

最强大的定时器接口来自POSIX时钟系列,其创建、初始化以及删除一个定时器的行动被分为三个不同的函数:timer_create()(创建定时器)、timer_settime()(初始化定时器)以及timer_delete(销毁它)。创建一个定时器:int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)进

2017-06-30 03:13:59 605

转载 C语言结构体的字节对齐原则

为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开

2017-06-30 03:10:24 710

转载 Linux网络编程入门

(一)Linux网络编程–网络知识介绍Linux网络编程–网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的–客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件)

2017-06-30 03:01:00 6647

转载 C语言,获得堆栈增长方向的一种方法

static int stack_dir; static void find_stack_direction (){ static char *addr = NULL; auto char dummy; if (addr == NULL) { addr = &dummy; find_stack_direction(); }

2017-06-29 15:52:36 700

原创 Linux设备驱动模型之platform总线深入浅出(加入设备树)

在Linux2.6以后的设备驱动模型中,需关心总线,设备和驱动这三种实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。 对于依附在USB、PCI、I2C、SPI等物理总线来 这些都不是问题。但是在嵌入式系统里面,在Soc系统中集成的独立外设控制器,挂接在Soc内存空间的外设等却不依附在此类总线。基

2017-06-25 17:03:37 9846 1

原创 嵌入式中断(stm32+linux)详解

一开始学单片机时 就知道中断这一个概念 看些视频学了大半天 也是似懂非懂 看代码也就是设置下寄存器写下中断服务程序而已 学的不是很深入 一直到现在 经过了<微机原理>这门课的学习 才对中断有了一定的深入了解 发现中断也就是一门说复杂也能很复杂 只要封装好了api 使用也很简单的事 但是身为一名学习者 还是有必要学习中断的使用和原理身为一个学习嵌入式的小白 一开始我学习的当然是单片机 所学的单片机是

2017-06-22 16:37:19 4827

原创 Linux0.01内核三之轮转到子进程执行

#define switch_to(n) {\struct {long a,b;} __tmp; \__asm__("cmpl %%ecx,_current\n\t" \ "je 1f\n\t" \ "movw %%dx,%1\n\t" \ "xchgl %%ecx,_current\n\t" \ "ljmp %0\n\t" \ "cmpl %%ecx,_

2017-06-19 16:38:20 432

转载 Linux驱动程序之阻塞和非阻塞IO

所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。也就是说在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足 所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯

2017-06-08 08:51:47 822

原创 Linux0.11内核分析三之进程调度

Linux进行进程调度一般有两种情况 1.允许进程运行的时间结束 2.进程的运行停止 比如当进程阻塞时需要等待外设提供数据 或者等待其他程序的运行结果 这时就会进行进程调度 这里是执行for(;;) pause(); 最终执行到schedule()函数切换到其他进程运行 这里切换到进程1Linux创建了进程1 后开始进行进程调度static inline _syscall0(int,pau

2017-06-07 16:09:29 538

原创 Linux内核0.11分析三之创建子进程

继main函数开启中断和将进程0从0特权级翻转至3特权级后 main函数就调用fork()函数创建子进程/main.cstatic inline _syscall0(int,fork)//内联函数static inline _syscall0(int,pause)static inline _syscall1(int,setup,void *,BIOS)static inline _sysc

2017-06-05 22:53:05 503

原创 Linux内核0.11分析二

这节主要讲linux加载操作系统到内存后 经过一系列的准备最终到了执行main函数 这里就分析main函数/* init/main.c */#define DRIVE_INFO (*(struct drive_info *)0x90080)//硬盘参数表 #define ORIG_ROOT_DEV (*(unsigned short *)0x901FC)//根设备号struct drive_i

2017-06-05 03:28:58 878

u-boot-1.1.6

2016-03-28

空空如也

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

TA关注的人

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