自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 标准IO与文件IO

linux下文件操作包含下面4个头文件:

2016-12-30 16:34:21 6954

转载 Linux用户态和内核态

本篇文章主要是转载:    http://www.cnblogs.com/bakari/p/5520860.html    http://blog.chinaunix.net/uid-1829236-id-3182279.html一. 引述    当我们说“从用户态切换到内核态”时(例如在进行系统调用read或fork时),是指当前的进程从一种状态进入了另一种状态(并没有进程的

2016-11-24 00:06:45 1172

原创 用户进程与内存管理

用户进程与内存管理

2016-11-22 23:12:29 2062

原创 进程2的创建与执行

进程1第一次执行,完成设置硬盘信息、格式化虚拟盘(根设备)、加载根文件系统后会回到下面语句:    if(!fork()) {        init();    }        //===================================== 分隔符 ==========================================----init();

2016-11-20 22:08:42 400

原创 进程1格式化虚拟盘并设置虚拟盘为根设备并加载根文件系统

2016-11-17 22:59:07 324

原创 进程1执行——安装硬盘文件系统

接着上一篇文章,轮转到进程1后,进程1接下来会去执行fork中int 0x80中断返回时下一行代码,即if(__res>=0),所以之后将从这行代码开始执行。当执行到if(__res>=0)后面一行语句return (int) __res;时,返回值是0,即fork()调用返回0,接下来将执行main()函数中的init()函数,接下来的工作就是本篇文章要说明的:安装硬盘文件系统。

2016-11-13 22:02:16 320

原创 进程1的创建与轮转

进程1是由进程0创建的,创建过程如下:main() { fork() } ---> _syscall0(int,fork) ---> int 0x80中断进入系统调用(特权级由0切换到3) ---> _sys_call --->sys_fork() ---> copy_process(),在该函数中初始化创建的进程1的TSS结构,将tss段插入到gdt描述符表中,并设置好TSS的段基址和段长度

2016-10-27 17:43:02 519

原创 从开机加电到执行main函数

从开机到main函数的执行分三步完成:  (1)启动BIOS,准备实模式下的中断向量表和中断服务程序。  (2)从启动盘加载操作系统程序到内存,并为保护模式做准备,加载操作系统程序的工作就是利用(1)中准备好的中断服务程序实现的。  (3)为执行32位main函数做过渡工作   下面将详细说明这三步所完成的任务。一. BIOS启动  Intel CPU的硬件都是设计

2016-10-26 22:29:03 1314

原创 Labwindows CVI写上位机与STM32下位机通信(二)

接着上篇,这篇主要谈谈流量计数据读取。我们使用的MEMS流量计采用Modbus协议Modbus 使用RS-485 作为硬件载体。一. Modbus协议  该协议定义了 Modbus 总线Master(主设备)与Slave(从设备)之间的通讯报文格式,对于主设备来说,Modbus 协议是联系上位机(如PC、PLC、HMI 等)的接口,而且所有的通讯都是“透明的”。控制器通信使用主-从技术,即

2016-10-25 22:20:10 9483 1

原创 Labwindows CVI写上位机与STM32下位机通信(一)

最近在用Labwindows CVI写一个多串口的上位机程序,主要实现如下功能:(1) 上位机与下位机STM32通信,上位机通过串口发送控制命令(LED矩阵图形选择、电磁阀控制信号)给下位机,下位机回发控制信息。(2)上位机通过modbus通信协议485通信接口,读取MEMS流量计瞬时流量和总流量数据,并显示到面板上。    一. STM32下位机    考虑到LED矩阵面板上有40*10

2016-10-25 20:23:48 11175

原创 线程同步之synchronized关键字

在多线程编程中,为了避免资源访问冲突,需要线程同步。在Java中用synchronized关键字来锁住当前线程访问对象。使用synchronized关键来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。  一. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待

2016-09-25 17:10:57 1253

原创 Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析

一. AXI-Lite接口Ipcore的生成Xilinx开发工具EDK和Vivado都可自动生成AXI-Lite、AXI-Stream主从模式接口。关于生成Ipcore的过程可参考下面这两篇文章,这里就不在赘述:        http://comm.chinaaet.com/adi/blogdetail/37170.html        http://www.cnblogs.com

2016-09-21 11:15:39 10617 6

原创 MFC软件运行时按下回车或ESC闪退问题的解决

之前在写IdGenerator工程的MFC软件是就发现按下Enter键,操作界面会自动退出的问题,当时没注意,指导最近在写一个串口调试终端的界面程序时又出现了类似问题,因此写下我是怎么解决这个问题的。   之所以按下Enter\ESC会自动退出,我也是从网上查到的: http://blog.sina.com.cn/s/blog_a3e5711601011y3e.html    在一般情况下

2016-09-17 15:47:01 3464

原创 fopen()、fwrite()、fread()函数使用说明与示例

fopen()函数:1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。2.函数原型:FILE * fopen(const char * path,const char * mode); -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt" -- mode: 文件打开方式,例如:

2016-09-13 18:21:17 224190 8

原创 跨时钟域数据同步

在一些较复杂的逻辑设计中,通常会涉及到多个时钟域,在跨时钟域设计时,要保证数据同步,可采用如下策略使得设计满足时序要求:(1) 采用双端口RAM或异步时钟FIFO(2) 利用多级寄存器缓存数据      最近在做数据采集模块时,关于trig_in信号的处理就是这样处理的。trig_in是一个脉冲信号,由DDS模块产生,在DDS模块中,每个信号周期的起始都会产生一个周期同步脉冲,也就是t

2016-07-25 20:47:35 2860

原创 基于Zynq的数据采集系统设计与调试(二) —— AD接口

前言:    本设计中使用AD的是ADI的AD7989-1,AD7989-1是18-bit,逐次逼近型模数转换器。支持CS模式、链模式。本设计中采用3线CS模式,此模式常用于连接到SPI接口的数字主机,关于AD7989的详细信息请参考芯片手册:AD7989-1_7989-5.pdf一. AD接口    1)3线CS模式的时序图如下:        2)时序规格如下:

2016-07-17 11:51:32 10142 1

原创 基于Zynq的数据采集系统设计与调试(三) —— FIFO的使用

前言:    FIFO是数据采集系统中必不可少的环节,AD采回来的数据要送至ARM/DSP处理,或将采回来的数据写到本地,都需要解决读写速度匹配问题,解决这类问题,首选FIFO。在我们的设计当中,使用的是ADI公司的AD7989,18bit,100KSPS,采用三线SPI数据传输模式。采用两级FIFO,第一级FIFO用于缓存AD采样点数据,第二级FIFO用于DMA数据传输。一. F

2016-07-15 23:21:56 17794 3

原创 Windows下wmic获取计算机硬件信息

查看cpu序列号: wmic cpu get processorid查看主板序列号: wmic baseboard get serialnumber查看bios序列号: wmic bios get serialnumber查看网卡信息: wmic nicconfig get macaddress注:以上信息都可从百度获得,网卡MAC地址可认为修改,以上命令中,关键字不区分大小写(B

2016-07-14 23:11:11 8795 1

原创 Linux异步信号IO模型

SIGIO信号支持套接字和终端设备上的信号驱动IO,信号驱动IO模型主要是在UDP套接字上使用,在TCP套接字上几乎不怎么使用。在UDP上,SIGIO信号会在如下两个事件中所产生:    (1) 数据报到达套接字    (2) 套接字上发生错误    下面我们使用SIGIO作信号驱动IO://main()函数中......sem_t sem; //定义信号量sem_in

2016-07-11 16:24:13 753

转载 VS2010创建和使用动态链接库

转载ChinaUnix上他人博客链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29121609&id=3851844 参考他人的基础上自己的总结 一、创建动态链接库项目: 1、打开Microsoft Visual Studio 2010,选择File->New->Project。 2、在New

2016-07-08 16:48:44 442

原创 UDP Socket编程

1.      UDP协议1.1 特点: UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。 1.2 数据包结构:UDP报文头:由4个域组成,源端口号、目

2016-07-07 17:41:29 644

原创 AXI DMA数据对齐

查看PG-021知道,AXI DMA采用小端对齐,即高字节放在高地址,低字节放在低地址。在做AD7989数据采集时,要完成如下要求:  (1) AD采回的数据打包,一个packet包含1020个采集点(32位),接着用4个字(4Byte)来描述包的信息,包括通道号、块号(相当于packet号)、trig信号的位置(每个packet至多有一个trig信号)、crc校验码。  (2) 将每个p

2016-07-04 23:01:24 7212 2

原创 AXI DMA调试过程记录

1. 补充前面写过的一篇博客关于Zynq的uart的使用  今天发现一个很奇怪的现象,就是当只是用PS时,用uart1不需约束引脚就ok(上篇已提),但当使用了PL部分时,如果只使用了uart1,则需要添加AXI-GPIO,将rs485的tx,rx引脚约束到AXI-GPIO上(板子上的R6、R7),这是为什么呢?

2016-06-29 15:48:15 5468 1

原创 功能仿真时发现一个很奇怪的东西

//一个普通的always语句,但ad_sclk有点特殊 always @(posedge ad_sclk) begin if(shift_cnt == 5'd17) shift_cnt <= 0; else shift_cnt <= shift_cnt + 1'b1; end功能仿真截图:红线圈的地方不是ad_sclk的上升沿,shift_cnt就不应该发生

2016-06-27 11:09:27 585

原创 Zynq的FPGA设计中[DRC 23-20]错误的解决

上次做DDS时出现了[DRC 23-20],当时是这样处理的(并没有解决):在网上搜了一下,新建一个tcl文件,在文件中添加set_property SEVERITY {Warning} [get_drc_checks NSTD-1]set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1]set_property SEVER

2016-06-25 20:40:21 19636

原创 Zynq入门基础实验一之Helloworld

一.实验平台    我们采用的是自己设计的Zynq实验板,与Xilinx官方的Zedboard基本兼容。二.实验内容   我们使用PS部分的uart1,电路板上留出485接口,通过485转232串口线,即搭好本实验的实验平台。通过将vivado下新建的硬件平台生成bitstream文件,导入到SDK,然后在SDK上新建helloworld的程序,运行程序即可在终端上打印出hellowo

2016-06-16 22:13:06 11024

原创 接口逻辑设计

之前写DDS那部分时,对于SPI接口琢磨了好久,当然了,首先想得到的状态机,控制DDS输出的数据送至后端DA。将整个数据传输过程分解成四个状态: IDLE、WR_START、WR_DATA、STOP,根据事件猝发每个状态的跳转,例如IDLE -> WR_START的跳转条件是out_en = 1,这种设计思想是最直接的,但有的时候时序调整很麻烦(比如多了或少了时钟周期),直到某天,看了ADI公司针

2016-05-30 20:59:09 2148

原创 怎么快速看懂别人写的module和ipcore

纯粹是经验之谈,当然了,我依然是菜鸟一枚。之前看别人写的module,或者是别人封装好的ipcore(没有写使用文档)时,有点盲人摸象的感觉,特别是当工程很大时。现在记录一下最近关于看别人写的工程代码的一些经验:  (1) 首先把握整个工程的层次结构,当工程包含多个.v文件时,一般都会采用分层设计的思想,这时就要分析好整个工程的层次结构。先从最上层模块分析,看在最上层module上例化了哪些m

2016-05-30 20:38:39 873

原创 Verilog语法中parameter与localparam的区别

parameterlocalparam

2016-05-26 15:42:27 64570 6

转载 C++多重继承与二义性避免

1. 什么是多重继承的二义性12345678910111213141516classA{public:    voidf();} classB{public:    voidf();    voidg();} classC:

2016-05-14 17:34:24 2893

转载 C/C++中string与char *和 char []之间的转换

string 与char* char[]之间的转换,有需要的朋友可以参考下。    首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL('\0')结束

2016-05-14 15:43:11 1625

原创 抽象基类的纯虚函数的一些理解

在做C++ Primer Plus第13章课后习题三时,使用到了抽象基类的概念,需要在抽象基类中添加一个virtual View()方法,用来显示对象信息。当时记得书上说:        (1) 在虚函数声明后面加上=0,可以使该类变为抽象类,抽象类只能作为基类,不能创建抽象类的对象。        (2) 抽象基类中至少使用一个纯虚函数的接口。从抽象基类派生出来的类将根据派生类的特征,是

2016-05-13 14:35:40 786

原创 ARM地址总线与可寻址空间的一些疑问

当初微机学得懵懵懂懂,只知道ARM有32位地址总线,可寻址空间2^32byte即4GB,但是不知道为什么是byte,不太清楚每个地址单元的数据是怎么存放的。后来发现,一个地址单元存放1Byte数据,总共有2^32个地址单元,所以理论上可寻址空间4GB。之前记在本子上的笔记如下:

2016-05-10 22:18:53 2460

原创 输出端口设为reg与wire的区别

之前一直没在意这方面的细节,一天在做时序调整时发现输出端口设为wire与reg有很大的区别,现在准备记录下来,当做一点积累吧!

2016-05-10 22:04:03 1463

原创 关于堆栈的一些认识

特别注意:堆栈是一种先进后出(FILO)的数据类型,最后入栈的数据存放在编号为top-1的地址单元,也就是说,编号为top-1的地址单元存放的是最后入栈的数据,编号为top的单元永远都不会存数据。#include #include #include "stack.h"/***** * 关于堆栈的一点认识:设堆栈占用size个地址单元,但堆栈为空时,top=0,有一个元素时,top=1

2016-05-05 21:10:34 497

原创 关于堆栈的一点认识

特别注意: 堆栈是常用的数据结构,top始终指向的是堆栈中最后入栈数据的下一个地址,也就是说,地址编号为top-1的地址单元存放的是最近入栈的数据,编号为top的单元中没有存数据。#include #include #include "stack.h"/***** * 关于堆栈的一点认识:设堆栈占用size个地址单元,但堆栈为空时,top=0,有一个元素时,top=1,数据放在编号为

2016-05-05 21:04:24 451

原创 static变量与static函数

static全局变量:将变量的作用域限制在从定义处到文件结尾,避免同一源程序(同一个Project)中其他文件访问该变量。而用extern 声明的全局变量其他文件也可访问。static局部变量:(以后补充)static函数:我们知道,函数的定义和声明默认是extern的,默认情况下,同一源程序中其他文件可访问该函数。但static声明的函数只能在声明他的文件中可见,不被其他文件使用

2016-04-09 15:51:31 287

转载 Linux gcc gdb 编译调试程序

Linuxgcc和gdb程序调试用法 gcc一般调试格式:gcc-Wall -o  test   test.c // -wall  显示程序错误详细信息    gcc-v  //显示gcc的版本gcc-o{1,2,3} test  test.c // 1,2,3三个级别的优化,优化级别越高编译的时间越长gcc-ggdb3 -Wall -o test  test.c //运用gdb可以跟踪调

2016-03-18 12:34:18 439

原创 C++编程注意的一些细节(一直更新)

(1)自加自减,注意它们的区别。例如堆栈操作中的push,pop。bool Stack::push(const Item & item){ if(top < MAX) { items[top++] = item; //结构体赋值给 结构体 return true; } else return false;}bool Stack::pop(Item & item)

2016-03-08 16:27:18 375

原创 字符串,字符数组,字符指针的区别与联系

我们知道,C语言中并没有字符串(string)这个数据类型,一般用字符数组来实现字符串的功能。例如:(C++) string str = "Hello"; 就相当于(C) char str[20] = "Hello"。(1). 普通char数组与字符数组的区别      char ch[20] = {'H', ‘e', 'l', 'l', 'o' }; //ch数组中的内容是Hello.

2016-03-06 13:31:04 534

SQL必知必会的样例

SQL必知必会这本书的附带样例,该样例对应于书中附录A

2018-08-01

C语言学习宝典

很不错的C语言入门资料,尤其适用于初学者

2013-10-24

51单片机入门与提高

非常好的51单片机入门资料,0基础到高手的必经之路。

2013-10-24

Android新手开发教程

非常适合新手自学安卓开发,里面有详细的操作流程及代码

2013-08-26

空空如也

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

TA关注的人

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