- 博客(51)
- 资源 (2)
- 收藏
- 关注
原创 嵌入式web服务器BOA源码解析
在这里插入代码片@TOCBOA是一个单进程的web服务器,支持CGI交互,浏览器每次发送一个POAT请求,BOA会对应fork一个CGI进程,数据发送完成后,CGI进程退出,尽管存在这样的进程创建和销毁的开销,但BOA仍然是一款轻量级的web服务器,适用于需要较为简单的web页面访问。下面对BOA的主要部分进行代码分析,包含GET和POST两种方法。GET和POST对客户端请求数据的解析过程都...
2020-02-09 21:59:37 2107
转载 STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再
2017-03-07 10:01:15 382
转载 文章标题STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也
2017-03-07 09:55:08 335
转载 卡尔曼滤波
在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人!卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于
2017-02-08 16:44:09 464
转载 C语言中可变参数的用法
目录(?)[-]C语言可变参简介写一个简单的可变参数的C函数 可变参数在编译器中的处理 可变参数在编程中要注意的问题 小结 C语言可变参简介我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的: int printf( const char* format, …); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变
2016-12-16 10:02:47 294
转载 采用_beginthread/_beginthreadex函数创建多线程
1、CRT简介:CRT: (C Runtime Library)即C运行时库,是系统运行的基础,包含了c常用的函数集(如:printf,malloc,strcpy等),为运行main做了初始化环境变量、堆、io等资源,并在结束后清理。在Windows环境下,VC提供的 C run-time library又分为动态运行时库、静态运行时库、多线程、单线程、调试版本(Debug)、发行版本(Releas
2016-07-10 10:22:32 923
转载 CreateThread与_beginthread,内存泄漏为何因
在写c++代码时,一直牢记着一句话:决不应该调用CreateThread。相反,应该使用Visual C++运行期库函数_beginthreadex。 好像CreateThread函数就是老虎,既然这样为什么微软要开发这个函数呢? 从网上找到的相关资料,现在汇总一下,在此对相关人员进行感谢!摘自《windows 核心编程》: CreateThread函数是用来创建线程的Win
2016-07-10 10:18:42 437
原创 ucosIII内核文件分析-os_msg.c
/******************************************************************************************************************************** Os_msg.c ************************************/这个文
2016-06-16 16:53:17 2018
原创 ucosIII内核文件分析-os_core.c
Suspend时挂起的意思,是task主动调用使自己挂起,并且是无条件的挂起;而pend时系统让task等待信号量或事件时阻塞的。/********************************************************************************************************************************
2016-06-16 16:34:01 2316
转载 TMS320F28335学习笔记-启动过程
1.DSP reset后运行的起始地址是多少?0x3FFFC02.仿真器烧写程序的步骤是?根据cmd文件把程序烧到指定位置,然后执行。3.DSP的Flash启动过程是什么?首先硬件配置GPIO84~87上拉为1,即处于Flash启动过程。当DSP复位后,会从复位向量0x3FFFC0处取得复位向量,并跳转到InitBoot处开始执行,InitBoot会读GPIO84~87的值发现全为1判断为Flash
2016-05-26 20:19:27 1150
原创 浅析ucosII互斥信号量
所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。 解决优先级翻转问题有优先级天花板(priority ceiling)和优先级继承(priority inh
2016-05-05 15:41:10 2977
转载 C++ 多重继承和虚继承的内存布局
多重继承首先我们先来考虑一个很简单(non-virtual)的多重继承。看看下面这个C++类层次结构。1class Top2 {3 public:4 int a;5 };67 class Left :public Top8 {9 public:10 int b;11 };1213 class Right :
2015-10-01 19:04:15 713
转载 线程通信之条件变量
pthread_cond_wait()用法:ptread_mutex_lock(&mut);pthread_cond_wait(&cond, &mut);pthread_mutex_unlock(&mut);pthread_cond_signal(&cond);的用法和pthread_cond_wait是一样的。我们先来看看pthread_cond_wait()函数。
2015-04-09 21:37:09 656
原创 Linux用户态和内核态内存管理技术
通常程序访问的地址都是虚拟地址,用32位操作系统来讲,访问的地址空间为4G,linux将4G分为两部分。如图1所示,其中0~3G为用户空间,3~4G为内核空间。通过MMU这两部分空间都可以访问到实际的物理内存。进程在用户态只能访问0~3G,只有进入内核态才能访问3G~4G *进程通过系统调用进入内核态 *每个进程虚拟空间的3G~4G部分是相同的 *进程从用
2014-12-10 16:09:01 2823
原创 linux下 fork(),vfork(),clone()的用法及区别
fork,vfork,clone都是linux的系统调用,用来创建子进程的(确切说vfork创造出来的是线程)。先介绍下进程必须的4要点:a.要有一段程序供该进程运行,就像一场戏剧要有一个剧本一样。该程序是可以被多个进程共享的,多场戏剧用一个剧本一样。b.有起码的私有财产,就是进程专用的系统堆栈空间。c.有“户口”,既操作系统所说的进程控制块,在linux中具体实现是task_st
2014-11-18 16:07:34 474
转载 linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较
2014-10-30 19:19:26 525
转载 找出带环单向链表的环入口(交点)
其实这个问题已经被问烂了,但是之前没有想透,今天算是解决得差不多。找环的入口这个问题,其实是建立在另外一个问题之上的——判断单向链表是否有环土方法很多,但是比较好的目前就那么一个:一开始设置两个指针都指向表头,其中一个每次(一步)前进一个节点的叫p1,另外那个每次(一步)前进两个节点的叫p2 。p1和p2同时走,当其中有一个遇到null,就证明链表没有环。如何某个时刻(假设走了n步之后),
2014-10-10 09:07:00 378
转载 软中断/tasklet/工作队列
软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。本文重点在于介绍这三者之间的关系。(函数细节将不会在本文中出现,可以参考文献,点这里) (1)上半部和下半部的区别上半部指的是中断处理程序,下半部则指
2014-10-09 18:46:09 411
转载 嵌入式Linux之我行——ARM MMU工作原理剖析
一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多
2014-10-09 09:58:59 513
转载 linux中的热插拔和mdev机制
mdev是busybox自带的一个简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为"dev"的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点用法:
2014-09-28 15:45:00 519
转载 关于volatile和synchronized
这个可能是最好的对比volatile和synchronized作用的文章了。volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符。所以我们使用这两种关键字来指定三种简单的存取变量的方式。 int i1; int geti1() {return i1;}volatile int i2;
2014-09-26 15:21:48 397
转载 VC读取mat格式文件
1. 首先设置Visual C++6.0 编译环境的设置1-1通过菜单 Tools/ Options,打开Visual C++6.0设置属性页,进入 Directorie页面,在 Show Directories for下拉列表中选择Include Files,添加路径:…PROGRAM FILESMATLABR2007AEXTERNINCLUDE(在Matlab的安装路径下),
2014-09-17 21:27:27 780
转载 Android入门- 关于Activity下的onCreate方法
在AndroidManifest.xml文件中的元素中有这么两句:intent-filter> action android:name="android.intent.action.MAIN"/> category android:name="android.intent.category.LAUNCHER"/>intent-filter>
2014-08-14 20:11:45 586
转载 有符号及无符号位域值的测试
********************************************************************* * Author : Samso * Date : 04/02/2014 * Test platform: * Linux ubuntu 3.2.0-58-generic-pae *
2014-08-04 18:57:24 559
转载 构造函数
c++类的构造函数详解 一、 构造函数是干什么的class Counter{public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value =
2014-07-31 15:00:16 334
转载 JPEG图像的解压缩操作
解压缩操作过程1. 为JPEG对象分配空间并初始化2. 指定解压缩数据源3. 获取文件信息4. 为解压缩设定参数,包括图像大小,颜色空间5. 开始解压缩6. 取出数据7. 解压缩完毕8. 释放资源 为JPEG
2014-06-23 21:44:49 589
转载 分析uboot是如何启动内核的
1.uboot启动内核的代码缩减如下:s = getenv ("bootcmd");debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "");if (bootdelay >= 0 && s && !abortboot (bootdelay)){ run_command (s, 0);}2.假设boo
2014-04-28 10:13:07 517
原创 Qt Creator的配置和开发初步测试
关于编译与安装的内容请参考:Linux 下编译、安装、配置 QT交叉编译QT 4.8.3本篇博客主要记录3方面的内容1、Linux下Qt Creator的配置,这部分是以前面两篇文章的工作为基础,进行一些细节配置.2、分别运行桌面版和开发板上的小程序,验证QT的跨平台特点。3、安装Windows下的开发环境,此部分也是基于Qt Creator 有了L
2014-04-02 13:24:16 594
转载 QT在windows下的安装与配置
先了解Qt: Qt一直以来,分为商业、开源两个版本,商业版本为用户提供了二级制的动态库,直接安装既可以使用,但是需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态库文件。自从诺基亚公司放弃Meego、遣散Qt开发团队以后,Qt商业版本的网站移到了qt.digia.com,而开源版本则放到了qt-project.org
2014-04-02 13:22:24 504
转载 container_of
container_of的函数实现:[cpp] view plaincopy#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /** * container_of - cast a member of a structure out to the co
2014-04-01 14:55:15 490
转载 list_for_each_entry
在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下: 假设下面几个结点,则第一个member代表head,list_for_each_entry的作用就是循环遍历每一个pos中的member子项。list_for_each_entry应用: 它实际上是一个 for 循
2014-04-01 14:54:04 654
原创 poll机制的实现流程
所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解poll机制。1. s
2014-03-26 11:13:05 567
转载 wait_event_interruptible() 和 wake_up()的使用
1. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(), 而schedule()会将位于TASK_INTERRUPTIBLE状态的当前进程从runqueue
2014-03-26 08:20:19 941
原创 static inline内嵌函数的理解
内联函数有些类似于宏。内联函数的代码会被直接嵌入在它被调用的地方,调用几次就嵌入几次,没有使用call指令。这样省去了函数调用时的一些额外开销,比如保存和恢复函数返回地址等,可以加快速度。不过调用次数多的话,会使可执行文件变大,这样会降低速度。相比起宏来说,内核开发者一般更喜欢使用内联函数。因为内联函数没有长度限制,格式限制。编译器还可以检查函数调用方式,以防止其被误用。static inli
2014-03-13 15:56:58 763
转载 *lds ----linux下的通用链接脚本
ELF(Executable and Linkable Format)格式,linux平台下十分常见的可执行、可连接文件。输出section的丢弃:例子,.foo { *(.foo) },如果没有任何一个输入文件包含.foo section,那么连接器将不会创建.foo输出section。但是如果在这些输出section描述内包含了非输入section描述命令(如符号赋值语句),那么连
2014-03-12 10:27:12 1083
转载 LINUX内核和驱动中常见的 C语法---》标记化 初始化
在标准C中(C89)结构标准初始化是用{}来实始化,在C99的版本,采用了采用可读性更强的标记化 初始化,这在LINUX内核和驱动很为常见。这是ISO C99的用法 C Primer Plus第五版中相关章节: 已知一个结构,定义如下 struct book { char title[MAXTITL]; char author[MAXAUTL];
2014-03-12 10:25:47 670
转载 linux内核目录结构
/ 根目录│├boot/ 启动文件。所有与系统启动有关的文件都保存在这里│ └grub/ Grub引导器相关的文件│├dev/ 设备文件├proc/ 内核与进程镜像│├mnt/ 临时挂载├media/ 挂载媒体设备│├root/ root用户的$HOME目录├home/│ ├user/ 普通用户的$HOME目录│ └…/│├bin/
2014-02-28 13:49:33 611
转载 我用C语言描述女人
有的女人就像Windows 虽然很优秀,但是安全隐患太大有的女人就像UNIX 她条件很好,然而不是谁都能玩的起有的女人就像C# 长的很漂亮,但是家务活不行。有的女人就像C++,她会默默的为你做很多的事情。 有的女人就像JAVA,只需一点付出她就会为你到处服务。 有的女人就像JAVA script,虽然对她处处小心但最终还是没有结果。 有的女人就像汇编 虽然很麻烦,但是有的
2014-01-11 10:58:47 528
原创 BSP 概念解析
Drew在这里按照自己的理解来解释一下BSP( Board Support Package),仅供参考: BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽
2014-01-06 14:52:08 653
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人