haskell基础课:类型系统解读

最近忙成狗了,吭哧吭哧终于把家搬完了,以后就长久的住在新家了,由于刚搬家,网线还没有接,又过了一个星期家里没网的日子。这一段时间又没时间好好整理haskell。甚是遗憾。从上次haskell实现Graham扫描算法到现在已经三周有余,这次分析一下haskell类型系统。首先回忆一下C语言是怎么构造新类型的。struct Test { int index; #define NAME_LEN 3...
阅读(215) 评论(0)

Haskell基础课:实现Graham扫描算法

getMinDot :: (Num a, Ord a) => [(a,a)] -> (a,a) getMinDot ((x,y):pairs) = if pairs == [] then (x,y) else if or [yand [y==snd (getMinDot pairs), x<fst (getMinDot pairs)]] then (x,y) else getM...
阅读(2856) 评论(3)

大话PCIe:实现host驱动

最新的4.12内核中对pci host driver进行一些划分,把基于designware IP的主控驱动放到drivers/pci/dwc目录下去了。如果是基于老的kernel开发,想要移植新版的内核的话,要注意,同时多了designware ep驱动框架。非designware的主控驱动还是位于host目录下,譬如pcie-xilinx.c。下面就以xilinx pcie主控驱动为例来介绍如何...
阅读(725) 评论(0)

大话PCIe:Linux访问PCIe空间

Linux在枚举PCIe设备的过程由内核中的PCI框架负责,在EP配置完成之后,驱动通过以下接口访问PCIe空间,原理参考前文《大话PCIe:设备枚举》一、访问配置空间相关接口位于drivers/pci/access.c1.1 读配置空间 pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val); pci_read_con...
阅读(1006) 评论(0)

游黄山、宏村记

五岳归来不看山,黄山归来不看岳 从八月份开始工作事情特别多,忙忙碌碌的,但是细细一想,其实也没有做什么特别重要的事情,正好女朋友公司组织出游,也把我带上了,就出去好好放松放松吧。黄山是我一直以来都特别想去的地方,美景特别多:迎客松、云海等等。而且我又对爬山情有独钟,虽然每次爬完身体很累,但是能换来精神上的愉悦。本次行程:当天早上出发,下午到达宏村,吃饭游玩,晚上下榻汤口,第二天登山,于光明顶住宿一宿...
阅读(1265) 评论(3)

FreeRTOS任务调度研究

这篇文章不介绍FreeRTOS移植,只是最近针对多核ARM Cortex系列平台做了移植后的一篇总结研究文章。所以不涉及对FreeRTOS整体的介绍,而只是分析任务调度这一块的机制。对应的Demo参考自CORTEX_A9_Zynq_ZC702。 一、触发任务调度的两种机制 taskYIELD() 这种机制其实是通过ARM swi 异常触发task context switch。 IRQ h...
阅读(627) 评论(0)

大话PCIe:DMA机制

PCIe控制器也提供DMA(Direct Memory access)功能,用来批量地异步数据传输。 一、PCIe中的DMA读和写 假设现在...
阅读(1446) 评论(0)

大话PCIe:设备枚举

人的一生是一个不断认识自我,发展自我的过程。 认识PCIe设备的枚举过程需要以下知识: 拓扑结构 设备的表征及配置空间的访问 BAR空间的含义和访问 其中第1/2点在总线结构与配置空间已经介绍过了,第3点在BAR空间和TLP也已经进行过详细的介绍,可以说是万事具备。接下来涉及的过程有以下几个: 根据深度优先搜索进行设备总线号的分配 BAR空间的映射和简单访问测试 上面就是枚举过程中做的事情了。一、基...
阅读(1103) 评论(6)

大话PCIe:BAR空间和TLP

上一篇文章中写到每个PCIe的function都有自己的configuration space,其实就是配置寄存器了(这个当然是要有的了,不然软件要怎么玩?只不过PCIe的配置寄存器要通过tlp才能去访问)。其实PCIe设备是有自己独立的一套内部空间,不仅仅是配置空间,包括每个设备提供哪些I/O地址,memory地址。而BAR(Base Address Register)就是用来表征这些地址空间的。...
阅读(1712) 评论(0)

大话PCIe:总线结构与配置空间

把有限的精力花在真正有价值的事情上。 一、网络拓扑与设备端口上一篇已经讲到构成PCIe网络的三个角色:RC、SW和EP。其实这整个网络给人感觉就像乐高积木,上一级设备的下游端口接下级设备的上游端口,然后端口不但能看出链接状态,还提供包传输的链路。这里有两个常见的概念:DSP(Down Stream Port)和USP(Upper Stream Port)。对每个功能设备来讲,用来连接上下游设备的端口...
阅读(1252) 评论(0)

大话PCIe: 发展与应用

介绍PCIe的基本概念,用途。 一、串行总线PCIe作为串行总线的一种,它的发展必然和另一种总线架构密不可分:并行总线。早先,人们普遍认为提高数据位宽就能提高数据传输速率,这是谁都会想到的问题,早期的总线确实是这样设计的。但是随着工作频率的提升,并行数据线的串扰变得越来越严重,而串行总线采用差分对来传输信号,可以很好的抵消串扰。所以现在越来越多的设备,特别是高速设备(譬如usb),都基于差分串行总线...
阅读(1000) 评论(0)

访问PCIe BAR空间

对BAR空间以及配置空间的访问做一个系统的总结,其实就是在回答以下几个问题: 1. PCIe中四种tlp和BAR空间的关系是怎样的? 2. tlp是怎么发起的? 3. tlp是怎么到相应的下游设备的?...
阅读(983) 评论(0)

beautiful C code(updating)

记录看到过的让人眼前一亮的C代码,通常是简洁高效的一些做法 移位操作 在designware usb2.0 otg driver中看到 u32 daint, daintmask; daint &= daintmask; daint_out = daint >> DAINT_OUTEP_SHIFT; daint_in = daint & ~(daint_out 通常我们的做法是通...
阅读(608) 评论(0)

python搜索效率研究

天地不仁,以万物为刍狗 –老子 本文来研究在python中查找元素的效率问题,实验方法如下: 初始化一个大列表和字典,其中分别存放了10000000个元素。 查找的元素以1000000的间隔递增,检测程序执行速度。 自己实现顺序比较查找,用同样的方法进行测试,并和其他方法进行对比。 一、程序实现程序实现包含上述三个查找算法,均很简单。1.1 通过item in list实现查找def find_it...
阅读(518) 评论(0)

VIM完全配置

一、说说这个编辑器不得不说,vim是一款出色的编辑器,体现在两方面:一是轻量级跨平台的,unix服务器也好,桌面版的linux发行版也好,还是macbook,都自带vim,而且都能兼容(windows只能用gvim或者在linux模拟环境下运行vim);二是提供出色的相对灵活的编辑功能,包括自定义快捷键,定义宏,添加插件,视图模式和编辑模式分离,可运行shell命令等等。当前使用的版本为7.4.16...
阅读(734) 评论(3)
129条 共9页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:310368次
    • 积分:3160
    • 等级:
    • 排名:第11986名
    • 原创:121篇
    • 转载:5篇
    • 译文:3篇
    • 评论:26条
    博客专栏
    联系方式
    最新评论