瞎搞
文章平均质量分 86
CouchDB
专注于系统级应用的开发,研究方向:runtime system, compiler techniques, programming language, computer architecture等
展开
-
Windows多线程问题
进程和线程是操作系统里面经常遇到的两个概念,还有一个概念,是应用程序。应用程序包括指令和数据,在开始运行之前,只是分布在磁盘上的指令和数据。正在执行的应用程序称为进程,进程不仅仅是指令和数据,它还有状态。状态是保存在处理器寄存器中的一些值,记录一些信息,比如说当前执行指令的地址,保存在内存中的值等。进程是应用程序的基本构件块,同时运行的多个应用程序就是多个进程。每个进程可以运行多个线程。线程也有一原创 2015-08-30 00:57:04 · 3695 阅读 · 2 评论 -
Arduino自定义通信协议解析
上一篇文章给出了通信协议的设计。通信协议的格式如下:协议首部指令长度控制指令校验和“控制指令”设计成如下格式:设备类型设备号端口号比如说上位机发送如下的格式的数据:AA0305020106,意思就是协议的首部为AA,指令长度为03,控制原创 2016-03-04 15:28:35 · 13077 阅读 · 13 评论 -
Arduino通信协议设计
最近在一直在研究Arduino硬件平台的东西,先从做一个简单的东西入手,比如说,我通过Android端向Arduino硬件发送指令,控制电机的正转、反转。其中一个必不可少的问题就是这两个端设备之间的通信问题。它们之间的通信可以通过蓝牙模块来完成,此外,还需要自己设计通信协议。分析从最简单的模块开始,需求就是控制电机的旋转:反转和正转。再考虑最实际的硬件设备情况:Arduino开发板原创 2016-03-02 18:36:40 · 5496 阅读 · 0 评论 -
Direct3D基础
最近在公司里实习,有个项目的接合点需要用到三维处理的东西,还是比较麻烦的,虽然之前也学过一点图形学的理论知识,但都是皮毛,研究得也不深入。所以趁现在把一些基本的概念拾起来,开发平台用微软的DirectX框架并结合C#,很多东西都是现学的。下面给出几个基本的概念。图形卡即显卡,计算机和显示器之间的接口。很多图形卡都有自己的处理器,称为GPU,图形处理器。GPU是针对图形和图像所需要的计算进行过优原创 2015-11-01 15:42:19 · 935 阅读 · 0 评论 -
DirectX 3D图形
前面的一篇文章Direct 3D基础介绍了一些基本概念,叙述了如何在显示器上直接绘制具有立体感的2D图形。上面的方法是不现实的,因为预先根据透视原理人工计算出3D物体在显示屏幕上显示的坐标然后再绘制的这种方式如果涉及从不同角度观察的3D物体的话,需要计算的次数会很多。Direct 3D实现3D所采用的方法是首先设计一个仿真真实3D物体的立体模型,然后由计算机根据透视原理计算出每一个角度模型显示在计原创 2015-11-01 20:51:15 · 2837 阅读 · 3 评论 -
DirectX 3D灯光和材质
前面所介绍的东西都假设模型有自己的颜色,即认为模型自己发光。其实自然界的大部分物体并不发光。当光线照射到物体上,物体吸收某些颜色的光,反射另一些颜色的光,反射的光的颜色就是我们所看到的物体的颜色。这里的灯光是指光源,在Direct 3D中有4种光源:环境光、定向光源、点光源和聚光灯。反射光被分为3类:环境光、漫反射光和镜面高光。材质描述物体反射光的反射属性。可以用法线来计算光的反射,光照的反射强度原创 2015-11-03 23:20:50 · 1667 阅读 · 0 评论 -
DirectX 3D纹理
纹理就是3D模型外表面上的图案。在3D场景中纹理极大地增加了物体的真实性。纹理的本质是把平面图形贴到3D物体表面。在Direct3D中纹理的x和y坐标一般称为Tu和Tv坐标,纹理坐标范围都是0.0-1.0。如果知道一个面的顶点坐标,使面的顶点坐标和句型图片纹理坐标相对应,就可以将这些二维图片贴到3D图形表面。在Direct 3D中Texture类定义纹理。如果希望为墙壁贴上瓷砖,可以只绘制一个原创 2015-11-03 23:26:39 · 1427 阅读 · 0 评论 -
DirectX 3D Mesh类
Mesh类中定义了若干个3D模型,比如说立方体、圆柱、茶壶等。对于一些复杂的模型可以使用专业的软件比如说3D Max等设计,再利用DirectX提供的插件,将复杂的3D模型保存为.x文件。用Mesh类对象可以加载.x文件,并显示.x文件中的3D模型。Mesh类位于Direct 3D的扩展库中,为了使用Mesh类必须引用Microsoft.DirectX.Direct3DX组件。可以用Mesh类原创 2015-11-03 23:41:11 · 4032 阅读 · 2 评论 -
Direct3D 地形
高程图生成三角形网格3D场景的模拟离不开地形,因此3D地形的模拟在3D程序设计中很重要。在3D场景中,地形的表面都是通过三角形网来表示,即通过高度图(也称影像图)上的对应坐标值来表示规则网格顶点坐标值,从而形成规则的矩阵分布三角网。具体的实现就是通过读取高度图上象元的值来获取该坐标位置的高程,然后根据这些高程值及坐标值形成一个规则的三角网。由于在三角网中相邻三角形都具有公共点,所以为了节约内存原创 2015-11-06 23:11:39 · 1322 阅读 · 0 评论 -
Direct3D高程图立体显示
在微软的DirectX Sample Browser中,有个RaycastTerrain例子,做得很好,将一张平面的地形图,在底面添加了一个底部,四周的高度差再封闭起来,然后再添加一个浅蓝色的背景,平面图形的立体感很强,而且灯光和阴影的效果也做得很棒!这个例子是基于C++的,这里模仿这个例子,给出一个基于C#的实现。思路也大致类似,找一张bmp格式的深度图,经过像素值的计算处理,生原创 2015-11-10 21:44:46 · 2133 阅读 · 0 评论 -
DirectX天空球和天空盒子模型
在一些大型的3D游戏中,有几个必不可少的元素,比如说天空和大地,这些元素的存在可以增加3D场景的真实感。三维场景中天空和大地场景的模拟其实很简单,这种场景跟古人所说的“天圆地方”有着异曲同工之妙。天空其实就是一个很大的容器,把整个世界都罩在下面,大地就是一个平面,场景中所有的元素都显示在二者所包围的空间中。三维天空的技术主要包括三种类型:一种是平面型天空(Sky Plane),仅用一个平面盖在所有原创 2015-11-21 11:48:56 · 4356 阅读 · 0 评论 -
用Source Insight追踪Arduino的setup和loop
查看一些大型的开源项目自然少不了一款神器——Source Insight。呵呵,不扯了一般情况下,在ArduinoIDE中编写的程序非常简单,只有setup和loop这两个核心函数。一般的C语言程序都有一个main函数的入口点,而Arduino是基于avr-gcc的二次封装,把这些底层的东西都屏蔽掉了。其实查看Arduino IDE的源码,会发现在其\hardware\arduino\av原创 2016-03-12 22:07:31 · 4472 阅读 · 0 评论 -
Arduino IDE的编译执行过程解读
avr-gcc1997年ATMEL公司的A先生和V先生推出了全新配置的8位精简指令集微处理器(RISC-Reduced Instrction Sot CPU),起名为AVR。AVR是一种指令内核的统称,内部又分为ATtiny、AT90S、ATmega三大系列,分别对应AVR的低、中、高档产品。对于开发者而言,关注更多的是AVR单片机的开发方式,而AVR单片机最初在设计的时候的目的就是为了迎原创 2016-03-10 21:17:22 · 22044 阅读 · 1 评论 -
流和文件的区别
前面介绍的Linux下的文件编程所涉及的操作方式都是不带缓冲的I/O,因为每次调用相应的函数比如说read、write等对文件进行操作的时候都会调用内核的系统调用,由于每次都要通过内核对文件进行操作,所以操作效率比较低,对于流编程来说,首先对文件所映射的流进行操作,然后分阶段将相应的数据写入文件,极大地提高了相应的操作效率。Linux也提供了很多流操纵库函数,称为标准I/O库,是ISO C的组成部原创 2015-10-07 00:54:18 · 7645 阅读 · 3 评论 -
Linux C下的内存映射函数
前面有一篇文章 内存映射文件 给出了windows环境下,内存映射文件的例子。其实在Linux环境下,针对C语言也有相应的内存映射函数。使用内存映射函数可以提高文件读写的速度,在Linux环境下,利用mmap函数可以将指定的文件映射到内存区域中,通过对该内存区域的操作即可以实现对该文件的操作。mmap函数的调用格式如下:#includevoid *mmap(void *addr,si原创 2015-10-06 20:07:03 · 1688 阅读 · 0 评论 -
共享内存和动态数据交换
仔细研究一下操作系统本身的机制,比如说内存管理、进程间通信等,越发觉得这些机制很精妙,很精深,perfect!为了让具有依赖关系的线程或者进程协调工作,可以使用两种技术,第一种是进程间或者线程间通信(interprocess or interthread communication),在具有通信依赖关系的两个进程间传递信息;第二种技术是同步。进程间通信,一般情况下,单个进程拥有自己的地址空间,原创 2015-08-31 20:06:57 · 3006 阅读 · 0 评论 -
Windows 多进程通信API总结
在一个大型的应用系统中,往往需要多个进程相互协作,进程间通信(IPC,Inter Process Communication)就显得比较重要了。在Linux系统中,有很多种IPC机制,比如说,信号(signal)、管道(pipe)、消息队列(message queue)、信号量(semaphore)和共享内存(shared memory)、套接字(socket)等,其实Windows操作系统也支持原创 2015-08-30 20:16:25 · 28357 阅读 · 7 评论 -
Windows中的宽字符串处理问题
在用VC做开发的时候,对于一些字符串,会经常调用一般_t、_T、T(),其实这些东西都和Unicode有关系。比如说,AfxMessageBox(_T("Error! Fail to connect the database!"));这里用到了一个_T(),不使用_T()有时候编译会报错。Windows操作系统使用Unicode作为默认的文本编码格式。Unicode定义了对大于8位的字符编码的原创 2015-08-30 11:52:27 · 1369 阅读 · 0 评论 -
字节跳动2019夏令营笔试总结
2019 ByteDance Summer Camp19年夏令营,头条请了天奇大神过去做talk,我是冲着天奇大佬去的,他是做DL编译器的,跟我个人的研究方向很类似,所以很期望能跟他当面交流一下。夏令营有两次笔试机会,取成绩最高的一次作为最终的成绩。由于消息看到得晚,在下开始申请的时候,第一次笔试已经结束了。本人只参加了第二次笔试,笔试题目构成如下:单选题3题、不定向选择题1题、填空题2题、编...原创 2019-06-03 22:38:58 · 5611 阅读 · 9 评论