自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (4)
  • 收藏
  • 关注

转载 详谈C++保护成员和保护继承

protected 与 public 和 private 一样是用来声明成员的访问权限的。由protected声明的成员称为“受保护的成员”,或简称“保护成员”。从类的用户角度来看,保护成员等价于私有成员。但有一点与私有成员不同,保护成员可以被派生类的成员函数引用。如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员。如果在一个类中

2017-03-31 20:54:04 6205 3

转载 文章标题

在学习第一门编程语言时,就已经介绍了顺序分支、条件分支、循环分支。比如循环分支有for、while、do-while语句。在随后的学校及工作中,如果手工循环一般使用for、while,很少使用do-while,感觉用处不大,但现在看来,do-while大有用途。帮助定义复杂的宏以避免错误 举例来说,假设你需要定义这样一个宏:define DOSOMETHING() foo1(); foo2(

2017-03-31 16:56:33 252

原创 Linux 程序之环境变量

linux 程序内部支持环境变量的设定,获取变量值以及环境变量的取消。环境变量是系统运行时根据其值进行一些对应的操作变化。典型如PATH会改变系统的执行文件的搜索路径。linux 命令行中对环境变量的操作有: variable = value — 设定环境变量的值 export variable — 环境变量生效export variable = value —上面两步同时做echo $v

2017-03-31 16:36:56 479

原创 AlSA驱动中的PCM DMA

ASoC Platform驱动中使用了PCM DMA的构架来实现了申请DMA通道。首先得probe函数中会调用ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); 为设备注册一个dmaengine_pcm。这个调用除了注册同时还注册了一个释放接口。核心是调用了 snd_dmaengine_pcm_register(dev, co

2017-03-31 15:11:27 4414

原创 ASoC Machine驱动

ASoC 体系结构分析已由DroidPhone前辈在博客中分析得很清楚,可以移步到http://blog.csdn.net/DroidPhone/article/category/1118446阅读对应的博客,这里这是针对驱动开发中需要做的一些工作进行详细的阐述。ASoC整个架构被分为了三个部分,分别为Platform,Codec 和Machine. Codec的配置一般通过简单的串行总线如I2C

2017-03-30 17:54:03 1889

原创 QT信号和槽

信号和槽信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性。要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler)的 QT 工具,该工具是一个 C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。 信号和槽能携带任意数量和任意类型的参数。我们可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,(当这个信号被发射时

2017-03-30 16:12:59 981

转载 使用 Yocto Project 构建自定义嵌入式 Linux 发行版

Yocto Project™是一个开源项目,设立该项目是为了使嵌入式 Linux®开发更简单,更易于在不同架构间进行移植。本文将介绍该项目并提供如何开始使用该项目的分步指导。 概述Yocto Project 是一个开源协作项目,它提供了一些模板、工具和方法来支持面向嵌入式产品的自定义 Linux系统,不管硬件架构是什么。我想要告诉那些对 yocto这个名称不甚理解的

2017-03-30 10:16:03 1079

原创 UIO 驱动中断

UIO 是怎么工作的? 一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务,UIO 核心实现了mmap()可以处理物理内存(physical memory),逻辑内存(logical memory), 虚拟内存(virtual memory)。UIO驱动的编写是就不需要再考虑这些繁琐的细节。 第二个任务,对于设备中断的应答必须在内核空间进行。

2017-03-29 16:17:45 3407

原创 UIO 驱动方法

UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可,而UIO则是将驱动的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能!使用UIO可以避免设备的驱动程序需要随着内核的更新而更新的问题.通过UIO的运行原理图可以看出,用户空间下的驱动程序比运行在内核空间的驱动要多得多,UIO框架下运行在内核空

2017-03-29 15:21:49 5045

原创 SoCFPGA overlay 技术

linux 系统中描述硬件的方法为 device tree和 device tree overlay。overlay技术为考虑硬体变更之后需要重新编译新的device tree 文件锁带来的麻烦。device tree 适用于描述系统上的固定硬件资源,,如系统时钟,DMA。而device tree overlay则可以用于系统中需要变更的资源,比如引脚复用。SoCFPGA中的FPGA由于经常需要被动

2017-03-29 14:09:10 2659

原创 ubuntu 64bit 兼容运行32bit 的方法

64bit 机器安装交叉编译链的时候有遇到了错误no such file or directory.但是编译工具确实存在。Ubuntu16.04版本已不支持ia32-libs的软件包,而是使用了lib32ncurses5、lib32z1软件包做为替代,所以在Ubuntu16.04版本当中应该安装执行:apt-get install lib32ncurses5 ​apt-ge

2017-03-22 19:38:47 8256

转载 用Device tree overlay掌控Beaglebone Black的硬件资源

简介device tree是linux 3.x开始使用的加载硬件资源的方式,这里说的硬件资源既包括片上的诸如GPIO、PWM、I2C、ADC等资源,也包括外部拓展的如FLASH、LCD等。device tree主要作用是将某个硬件外设与相应的驱动程序进行绑定,关于它在实际使用中的地位可以参考我的日志《嵌入式linux如何操作硬件》。使用时首先需要编写一个.dts文件(device

2017-03-22 09:38:30 1274

原创 M051定时器

M051定时器使用步骤选择时钟使能时钟配置模式和计时频率配置中断启动定时器关键寄存器 定时器内部具有一个24-bit的向上计数器,计数器开始工作的时候计数器的值可以通过 TDR读取到。同时如果计数器的值等于 TCMP寄存器的时候,会触发相应的中断动作。示例程序摘取““ //定时器时钟选择并使能 /* Select HXT as the clock source of TIMER0

2017-03-21 16:41:04 1206

原创 QT 交叉编译环境

这里假设已经编译好了qt for arm 的lib, 交叉编译链安装正确。Qt安装无误并且能够正常编译一个简单的app 在PC运行。之后需要把app 跟qt-arm-lib 一起编译了在目标环境下运行。指定交叉编译链进入tools->options,找到compilers 选项卡。添加一个GCC编译链。内容是指定到交叉编译链的G++。指定QT Version顺利编译了qt arm lib 后,都会在

2017-03-16 14:48:14 4913 3

转载 pragma UNROLL的用法

#pragma UNROLL 4在图像处理程序中,你会看到类似于#pragma unroll 4这样的语句(注:在DX中,也许你会见到[unroll(3)] for(int i = 0;i 语法:#pragma UNROLL(n)#pragma UNROLL告诉编译器一个循环中应该展开n次(其实我觉得是告诉编译器循环展开n次是安全的),有助于对那些不容易展

2017-03-16 13:54:28 20221

转载 移动设备中的ALSA(ASoC)

1.  ASoC的由来ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性:   Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Lin

2017-03-12 17:46:21 434

转载 小波变换通俗解释

从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。下面就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东西、小波究竟是怎样的思路。一、傅里叶变换关于傅里叶变换的基本概念在此我就不再赘述了,默认大家现在

2017-03-11 20:35:23 17778 9

原创 Angstorm 自动登陆设定

angstorm 中没有 init.d 文件。但是用户自动登陆的设定方法却比其他文件系统简单一些。主要是编辑/etc/systemd/system/getty.target.wants/serial-getty\@ttyS0.service修改内容为: change the lineExecStart=-/sbin/getty 115200 %I toExecStart=-/sbin/getty

2017-03-08 20:11:53 471

原创 Makefile中的函数

Makefile 中的函数为编写makefile提供了便利,其中以wildcard,notdir 和patsubst 最为常用makefile里的函数makefile里的函数使用,和取变量的值类似,是以一个‘′开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样return=’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return =

2017-03-08 20:06:20 285

转载 linux定时器的使用

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

2017-03-08 16:04:14 1647

原创 Opencl paltform id

通用的opencl platform id 获取方法通常是cl_int clGetPlatformIDs(cl_uint num_entries, cl_platform_id *platforms, cl_uint *num_platforms)这个命令会得到可用的OpenCL平台的列表。如果参数platforms为NULL,clGetPlatformIDs会返回可用平台数。返回的

2017-03-08 09:19:19 1298

线性代数基础

线性代数基础 英文版本,正在补习线性代数 和 martix coding 配合看

2018-06-14

serial to usb controller D 驱动

serial to usb controller D 驱动,亲测可用

2017-06-14

康内尔大学SoCPGA自学资料

康奈尔大学编写的DE1SoC 自学手册,非常基础的一步步讲解怎么用HPS控制FPGA

2016-12-06

SoC-FPGA Design Guide(DE1_SoC).pd

英文SoCFPGA基础开发教程,整理得非常好,很详细的教程,适合刚接触SoCFPGA的初级开发者

2016-12-06

空空如也

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

TA关注的人

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