- 博客(41)
- 资源 (4)
- 收藏
- 关注
转载 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 1198
原创 进程2的创建与执行
进程1第一次执行,完成设置硬盘信息、格式化虚拟盘(根设备)、加载根文件系统后会回到下面语句: if(!fork()) { init(); } //===================================== 分隔符 ==========================================----init();
2016-11-20 22:08:42 419
原创 进程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 331
原创 进程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 540
原创 从开机加电到执行main函数
从开机到main函数的执行分三步完成: (1)启动BIOS,准备实模式下的中断向量表和中断服务程序。 (2)从启动盘加载操作系统程序到内存,并为保护模式做准备,加载操作系统程序的工作就是利用(1)中准备好的中断服务程序实现的。 (3)为执行32位main函数做过渡工作 下面将详细说明这三步所完成的任务。一. BIOS启动 Intel CPU的硬件都是设计
2016-10-26 22:29:03 1338
原创 Labwindows CVI写上位机与STM32下位机通信(二)
接着上篇,这篇主要谈谈流量计数据读取。我们使用的MEMS流量计采用Modbus协议Modbus 使用RS-485 作为硬件载体。一. Modbus协议 该协议定义了 Modbus 总线Master(主设备)与Slave(从设备)之间的通讯报文格式,对于主设备来说,Modbus 协议是联系上位机(如PC、PLC、HMI 等)的接口,而且所有的通讯都是“透明的”。控制器通信使用主-从技术,即
2016-10-25 22:20:10 9670 1
原创 Labwindows CVI写上位机与STM32下位机通信(一)
最近在用Labwindows CVI写一个多串口的上位机程序,主要实现如下功能:(1) 上位机与下位机STM32通信,上位机通过串口发送控制命令(LED矩阵图形选择、电磁阀控制信号)给下位机,下位机回发控制信息。(2)上位机通过modbus通信协议485通信接口,读取MEMS流量计瞬时流量和总流量数据,并显示到面板上。 一. STM32下位机 考虑到LED矩阵面板上有40*10
2016-10-25 20:23:48 11400
原创 线程同步之synchronized关键字
在多线程编程中,为了避免资源访问冲突,需要线程同步。在Java中用synchronized关键字来锁住当前线程访问对象。使用synchronized关键来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待
2016-09-25 17:10:57 1278
原创 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 10691 6
原创 MFC软件运行时按下回车或ESC闪退问题的解决
之前在写IdGenerator工程的MFC软件是就发现按下Enter键,操作界面会自动退出的问题,当时没注意,指导最近在写一个串口调试终端的界面程序时又出现了类似问题,因此写下我是怎么解决这个问题的。 之所以按下Enter\ESC会自动退出,我也是从网上查到的: http://blog.sina.com.cn/s/blog_a3e5711601011y3e.html 在一般情况下
2016-09-17 15:47:01 3628
原创 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 225836 8
原创 跨时钟域数据同步
在一些较复杂的逻辑设计中,通常会涉及到多个时钟域,在跨时钟域设计时,要保证数据同步,可采用如下策略使得设计满足时序要求:(1) 采用双端口RAM或异步时钟FIFO(2) 利用多级寄存器缓存数据 最近在做数据采集模块时,关于trig_in信号的处理就是这样处理的。trig_in是一个脉冲信号,由DDS模块产生,在DDS模块中,每个信号周期的起始都会产生一个周期同步脉冲,也就是t
2016-07-25 20:47:35 2898
原创 基于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 10278 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 18043 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 8885 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 771
转载 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 454
原创 UDP Socket编程
1. UDP协议1.1 特点: UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。 1.2 数据包结构:UDP报文头:由4个域组成,源端口号、目
2016-07-07 17:41:29 673
原创 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 7305 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 5504 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 625
原创 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 19836
原创 Zynq入门基础实验一之Helloworld
一.实验平台 我们采用的是自己设计的Zynq实验板,与Xilinx官方的Zedboard基本兼容。二.实验内容 我们使用PS部分的uart1,电路板上留出485接口,通过485转232串口线,即搭好本实验的实验平台。通过将vivado下新建的硬件平台生成bitstream文件,导入到SDK,然后在SDK上新建helloworld的程序,运行程序即可在终端上打印出hellowo
2016-06-16 22:13:06 11073
原创 接口逻辑设计
之前写DDS那部分时,对于SPI接口琢磨了好久,当然了,首先想得到的状态机,控制DDS输出的数据送至后端DA。将整个数据传输过程分解成四个状态: IDLE、WR_START、WR_DATA、STOP,根据事件猝发每个状态的跳转,例如IDLE -> WR_START的跳转条件是out_en = 1,这种设计思想是最直接的,但有的时候时序调整很麻烦(比如多了或少了时钟周期),直到某天,看了ADI公司针
2016-05-30 20:59:09 2197
原创 怎么快速看懂别人写的module和ipcore
纯粹是经验之谈,当然了,我依然是菜鸟一枚。之前看别人写的module,或者是别人封装好的ipcore(没有写使用文档)时,有点盲人摸象的感觉,特别是当工程很大时。现在记录一下最近关于看别人写的工程代码的一些经验: (1) 首先把握整个工程的层次结构,当工程包含多个.v文件时,一般都会采用分层设计的思想,这时就要分析好整个工程的层次结构。先从最上层模块分析,看在最上层module上例化了哪些m
2016-05-30 20:38:39 906
转载 C++多重继承与二义性避免
1. 什么是多重继承的二义性12345678910111213141516classA{public: voidf();} classB{public: voidf(); voidg();} classC:
2016-05-14 17:34:24 2961
转载 C/C++中string与char *和 char []之间的转换
string 与char* char[]之间的转换,有需要的朋友可以参考下。 首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL('\0')结束
2016-05-14 15:43:11 1633
原创 抽象基类的纯虚函数的一些理解
在做C++ Primer Plus第13章课后习题三时,使用到了抽象基类的概念,需要在抽象基类中添加一个virtual View()方法,用来显示对象信息。当时记得书上说: (1) 在虚函数声明后面加上=0,可以使该类变为抽象类,抽象类只能作为基类,不能创建抽象类的对象。 (2) 抽象基类中至少使用一个纯虚函数的接口。从抽象基类派生出来的类将根据派生类的特征,是
2016-05-13 14:35:40 805
原创 ARM地址总线与可寻址空间的一些疑问
当初微机学得懵懵懂懂,只知道ARM有32位地址总线,可寻址空间2^32byte即4GB,但是不知道为什么是byte,不太清楚每个地址单元的数据是怎么存放的。后来发现,一个地址单元存放1Byte数据,总共有2^32个地址单元,所以理论上可寻址空间4GB。之前记在本子上的笔记如下:
2016-05-10 22:18:53 2518
原创 输出端口设为reg与wire的区别
之前一直没在意这方面的细节,一天在做时序调整时发现输出端口设为wire与reg有很大的区别,现在准备记录下来,当做一点积累吧!
2016-05-10 22:04:03 1538
原创 关于堆栈的一些认识
特别注意:堆栈是一种先进后出(FILO)的数据类型,最后入栈的数据存放在编号为top-1的地址单元,也就是说,编号为top-1的地址单元存放的是最后入栈的数据,编号为top的单元永远都不会存数据。#include #include #include "stack.h"/***** * 关于堆栈的一点认识:设堆栈占用size个地址单元,但堆栈为空时,top=0,有一个元素时,top=1
2016-05-05 21:10:34 514
原创 关于堆栈的一点认识
特别注意: 堆栈是常用的数据结构,top始终指向的是堆栈中最后入栈数据的下一个地址,也就是说,地址编号为top-1的地址单元存放的是最近入栈的数据,编号为top的单元中没有存数据。#include #include #include "stack.h"/***** * 关于堆栈的一点认识:设堆栈占用size个地址单元,但堆栈为空时,top=0,有一个元素时,top=1,数据放在编号为
2016-05-05 21:04:24 475
原创 static变量与static函数
static全局变量:将变量的作用域限制在从定义处到文件结尾,避免同一源程序(同一个Project)中其他文件访问该变量。而用extern 声明的全局变量其他文件也可访问。static局部变量:(以后补充)static函数:我们知道,函数的定义和声明默认是extern的,默认情况下,同一源程序中其他文件可访问该函数。但static声明的函数只能在声明他的文件中可见,不被其他文件使用
2016-04-09 15:51:31 303
转载 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 459
原创 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 402
原创 字符串,字符数组,字符指针的区别与联系
我们知道,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 560
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人