自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

X

V

  • 博客(189)
  • 资源 (6)
  • 收藏
  • 关注

原创 核心思想

程序员是能够改变世界的,至少是改变自己的世界。对于重复的工作,你可以写一个shell脚本让他自动化执行;对于麻烦的工作,你可以看看有没有相关的插件让它操作起来更简化,实在不行你自己造一个;程序员必须拥有创造力,程序员的世界是丰富多彩的,不能拘泥于工程的限制,望谨记。另外,对于各种各样的编程语言还有工具,熟练掌握的唯一办法就是先大致了解基础知识,并进行基础性任务的实践找到合适的项目进行训练,在实践中倒逼输入才能真正掌握知识...

2021-05-22 10:22:25 157

原创 vim配置文件

" All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by" the call to :runtime you can find below. If you wish to change any of those" settings, you should do it in this file (/etc/vim/vimrc), since debian.vim" will be overwritten ev

2021-05-03 21:42:07 212

原创 VirtualBox下Ubuntu系统磁盘扩容

例如这是我的Ubuntu系统,快照对应的vdi文件,如果不知道对应哪个,就新建一个快照,跟新建之前对比,多出来的就是了。注意:中的要改成,再把它的大小修改成和刚刚一样的大小。然后你会在virtualbox的中,看见对应的磁盘大小改变了。这里我们扩容了虚拟磁盘的大小,但是Ubuntu系统并不会自动扩容,你还需要为其分配空间。你需要安装软件,。打开软件这里的未分配空间,就是我们扩容的大小,你要将其分配。选中要扩容的分区,右键单击,再扩容即可。之后确认。先卸载磁盘,让其停止运行,之后扩容,之后再挂载磁盘。而

2023-04-14 20:33:37 2297 1

原创 Ubuntu物理真机提高访问速度

Ubuntu系统访问加速

2023-01-05 23:01:05 1393

原创 基于IntelliJ IDEA和Ubuntu的Chisel开发环境搭建

Chisel IDEA环境搭建

2022-03-16 17:12:20 1623

原创 diff and colordiff on Ubuntu

在Ubuntu中使用diff来对比文件差异,但是不是很好用,尤其是着色方面,用起来很麻烦,因此可以安装colordiff。我们有两个文件file1和file2,使用命令colordiff file1 file2 -y -B -W 140就可以对比文件差异,不同的部分会被着色。file1有,file2没有的,标记红色file1没有,file2有的,标记绿色两者都有,但是内容不完全一样的,标记蓝色这是最快捷的方式!也可以使用colordiff file1 file2可以得到标准的

2022-03-16 16:03:04 1757

原创 Ubuntu停止维护版本的软件源配置和系统升级方法

这里以Ubuntu 20.10版本为例(当前是2022.2.14,该版本已经停止维护),我们现在需要正常使用该版本,并且期待升级到21.10版本,我们需要配置正确是软件源升级该版本配置正确的软件源配置国内镜像源我们一般在国内会采用清华大学的软件源,不过可惜的是,清华的软件源没有提供old-released版本(笔者反正没找到…),也就是一旦版本停止维护,我们就不能用该镜像源进行update和upgrade了。我们可以使用中科大的镜像源,或者南京大学的也行。我们将/etc/apt/sourc

2022-02-14 20:51:26 2991 7

原创 VirtualBox Ubuntu个人配置

VirtualBox启用嵌套VT-x/AMD-V

2022-02-09 00:23:40 900

原创 Linux环境变量 set env export区别

参考链接How to Set Environment Variables in Linuxset他能够显示当前shell的环境变量它针对的对象是当前shell,如果关闭了就没了!直接使用set --help查看就可以。env显示当前用户的环境变量,针对的当前登录的用户export它能够使得变量被导出为用户环境变量,或者显示被导出为用户环境变量的变量。可以设置临时的:关了shell就没了永久的:这个也分范围当前用户的整个系统的对应的还有unset可以删除环境变量.

2022-02-04 19:52:46 1060

原创 安装Ubuntu RISC V toolchain失败(网速、git配置原因)

git获取大容量工程出错:RPC failed; curl GnuTLS recv error : Decryption has failed.error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.fatal: The remote end官方GitHub仓库gitee镜像仓库如果网速不够,建议使用镜像仓库,并且将.gitmodules文件内容改为镜像地址。 1 [submodule "r.

2022-01-27 14:06:54 1925

原创 Vivado提高综合和实现的速度

让计算机的资源尽可能给vivado,综合、实现的时候修改一个参数jobs改为你的计算机的最大值,我的计算机是12核的。速度会快很多!

2021-07-25 11:19:53 3130 1

原创 C语言读取文件

C语言一次性读取文件C - File I/OC library function - fread()需要注意的点fgets函数,一次只能读取一行,并且在结尾自动添加\0fread函数,可以读取很多内容,但是不会添加\0需要手动完成,具体看[参考1]...

2021-05-25 11:25:14 310

原创 gdb调试的几点提示(1)

GDB debuggerExamining MemoryContinuing and SteppingHow to translate a virtual memory address to a physical address?s和n是C语言的下一步si和ni是汇编语言下一步gdb能够查看的都是虚拟地址,不能查看物理地址,应用程序都不能查看物理地址,虚拟地址到物理地址的转换很复杂,需要OS和硬件系统配合来完成。最后你需要知道,x /i $eip会显示eip对应的指令(指令编码),它不是显.

2021-05-17 15:09:43 755

原创 函数调用堆栈

基于孟宁老师的Linux内核分析 1 int g(int x){ 2 int y = x + 3; 3 return y; 4 } 5 6 int f(int x){ 7 int z = x + 10; 8 return g(z); 9 } 10 11 int main(){ 12 int a .

2021-05-17 15:02:25 268

原创 vim进行行内某部分的复制剪切粘贴

ctrl + v使用方向键选中你要复制的部分按d(剪切)或者按y(复制)再移动到你的目标位置,按p粘贴(在正常模式下才行,如果不是,先按esc)这个过程与你操作word文档的复制粘贴一样!只不过不能用鼠标罢了。不过这个操作还可以多行多列选中,也就是选中一块区域进行操作,看下图的示例...

2021-05-13 09:00:30 2818

原创 vim多列操作--插入/删除

插入How to insert text at beginning of a multi-line selection in vi/VimVim Commands删除ctrl + v使用上下左右键选中一片区域按d删除

2021-05-11 14:55:08 1937

原创 正则表达式特别需要注意的点:“空“字符的匹配

在正则表达式中,[...]代表1个字符,不管里面有多少字符,最终这个东西的结果都是1个字符。对于表达式[^a]表达的匹配除了a之外的字符,并且是1个字符。需要注意的是,有些特殊字符是不会被匹配的。我们看一个示例,对于txt文件testRegularExperxx.txt aaa bbb对于该文件,输入命令grep -n '[^a]' testRegularExperxx.txt得到的结果是:你会发现,对于看起来的“空行”的处理似乎是不一样的,为什么呢?仔细看看文件,

2021-05-07 09:16:17 2205

原创 find command基本使用

find命令通常用于根据文件名查找文件,这是最基本用法。find [path] -name/-iname [filename]path写要查找的路径,自动递归查找filename写文件名,可以使用通配符*还有其他什么的表达式具体细节请man find查阅文档。...

2021-05-07 08:19:06 412

原创 C语言不能对全局变量使用malloc函数

reference:Malloc function (dynamic memory allocation) resulting in an error when it is used globally#include<stdio.h>#include<string.h>#include <stdlib.h>char *y = (char *)malloc(40); // gives an error hereint main(){ strcpy(.

2021-05-06 21:59:59 2557

原创 Linux进程间通信:共享内存与管道

references:[1] IPC through shared memory[2] Inter Process Communication (IPC)[3] https://www.geeksforgeeks.org/pipe-system-call/[4] watch command in Linux with Examples参考链接1和2是介绍了共享内存IPC的简单原理和相关系统调用的使用参考链接3是介绍了管道通信的内容参考链接4介绍了如何实时查看共享内存watch -d 'i.

2021-05-05 16:44:54 107

原创 wait系统调用

reference:Wait System Call in C只强调几点,剩下的直接看参考链接内容就好了,不是偷懒,而是里面内容写的很好了,没必要再写一遍了,这种东西就是单纯的系统调用而已,理解了功能,就完事了,没啥好说的。如果父进程等待1个子进程,使用wait(NULL)就行如果等待多个子进程如果不需要指定特定进程,使用多个wait(NULL)就行如果需要指定,则需要使用waitpid(pid, &stat, option),对于option,有两个选项,一个是0,就相当于是wa.

2021-05-05 16:31:50 413

原创 fork创建多个子进程

references:[1] how to create two processes from a single Parent[2] fork() in C[3] linux中fork同时创建多个子进程的方法fork的本质,就是复制,把当前进程复制一份,然后两个进程并发地执行fork后面的语句,区别就是,子进程的fork返回值是0,父进程的fork返回值是子进程的pid,这也是区分父进程和子进程的方法,至于其他的内容,在fork之前的东西两个进程的一样的。给出一个父进程和一个子进程的模板in.

2021-05-05 16:19:24 5921 1

原创 UNIX哲学

参考: 对比Linux与Windows使用Linux想要做某些事情的时候,就拆开想,想想我需要哪些功能,需要哪些工具,依次怎么执行,然后用管道建立连接,让数据依次流过不同的工具,从而得到最终结果。就像污水处理厂那样(高考化学哈哈哈)。...

2021-05-05 15:22:05 70

原创 C语言中信号函数(signal)的使用

先来简单谈谈C语言中的信号(signal)首先,signal是C语言库中的函数,它实际上是软中断,也就是软件发出的终端,本质来说,类似于int n。对于接收到该软中断信号的进程,就会停下手头的工作,转而去执行信号处理程序 signal handler。对于这一点,是与硬件中断的方式类似的。与硬件中断类比学习会更容易!因此,我们需要知道的是有哪些可用的软中断:就像硬件的除法零中断、溢出中断、外设中断…软中断处理程序有哪些:就像中断服务程序(位置信息在idt、ivt)默认的软中断服务程序:系统

2021-05-05 15:16:27 4205

原创 gdb tui的使用

[1] GDB Text User Interface [2] GDB Text User Interface简单来说,进入gdb之后,使用ctrl + x 2就足够了。其他细节请参考上述链接,选一个就可以。

2021-05-05 12:12:08 313

原创 gdb 10.2的安装

参考[1] GDB-10.2[2] README for GDB release个人系统 Ubuntu20.10。注意gdb10.2需要c++11语法,需要安装g++下载安装包wget https://ftp.gnu.org/gnu/gdb/gdb-10.2.tar.xz解压缩tar -xvzf gdb-10.2.tar.xz进入解压之后的目录mkdir buildcd build配置,安装tui mode,../configure --enable-tui此处注意,可能会提示你.

2021-05-05 12:07:48 1906

原创 Linux安装Ncurses库

参考:How To Install Ncurses Library In Linux针对Ubuntu说明一下:wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz,至于最新版本,自己看官网,修改一下版本号即可。tar xzf ncurses-6.2.tar.gzcd ncurses-6.2./configure --prefix=/opt/ncursesmakesudo make install...

2021-05-05 12:02:03 1256

原创 使用gdb调试多进程程序、同时调试父进程和子进程

参考:[1] GDB debugging multi-process programs[2] Debugging programs with multiple processes根据这两篇参考链接,完全可以实现使用gdb同时调试父进程和子进程。接下来说明一下可能遇到的坑gdb8.1版本有bug,设置完set detach-fork-on off,执行fork之后,切换到子进程,会遇到不能添加断点等问题gdb9.2版本也有bug,进程切换的时候,会遇到fork.c文件缺失等问题,不过也不影响.

2021-05-05 11:53:58 676

原创 信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束

本教程基于 Ubuntu 20.10 gcc 10.2.0. 示例程序如果不能正常编译和执行,说明您系统和工具版本与我的不匹配,请自行查阅资料。0 概述先给出该信号的描述:SignalValueDescriptionSIGCHLD17Child status has changed (POSIX). Signal sent to parent process whenever one of its child processes terminates or stops.Se

2021-05-05 10:28:34 3538

原创 enum in c language

今天说说C语言中的枚举。参考:Enumeration (or enum) in C1 定义定义一个枚举类型很容易:enum aa { a1, a2, a3 };这里enum是关键字aa是枚举变量,也就是我们自定义类型a1,a2,a3是枚举成员然后怎么使用呢?首先,它就像结构体struct和联合体union那样,是一个自定义的数据类型,用它定义变量,也是一样的:enum aa abc; // 定义变量enum aa *en_p; // 定义指针是的,它跟基本数据类型以及结

2021-04-22 23:29:10 286

原创 【精华文】C语言结构体特殊情况分析:结构体指针 / 基本数据类型指针,指向其他结构体

参考链接:Structure pointer pointing to different structure instance注:可以查看此篇的问题和唯一的回复,那是相对正确的,不要看comment,有很多错误。我是拒绝分析这种问题的,因为似乎没有人会这么乱用,但是……在华保健老师的编译原理示例代码和Linux0.11内核中,就遇到了这么神奇的代码,那就不得不研究一下了!毕竟是大神写的代码,我不知道应该是我渣。1 测试代码#include <stdio.h>#include &lt.

2021-04-21 10:16:12 799

原创 Linux 0.11 内核解析:中断相关(1)asm.s文件中断处理分析

0 源代码有两个版本的,一个是带中文注释,Intel格式的;一个是不带注释是AT&T格式的。Linux 0.11 中文注释版Linux 0.11 源码,基于《Linux内核完全注释》赵炯1 asm.s 文件我们先假设该文件处理的中断是无特权过渡的情况(具体是不是暂时不知道)。我们看一下,当中断发生且被检测到之后,硬件做了什么。我们可以看到,中断被检测到之后,一些必要的信息被压栈了。在80386手册中提到,中断发生之后,一些必要的,为了中断程序结束之后返回原程序继续执行的信息,会被

2021-04-19 10:44:31 614

原创 x86异常处理与中断机制(3)中断处理过程

上一节讲完了根据中断类型号找中断服务程序的过程,现在着重说明一下更加完整的中断处理过程吧。本节以8086时代的中断处理过程为例进行说明,主要分两大部分硬件处理软件处理需要注意,这不是绝对的,得看实际情况,简单来说就是,如果硬件本来就完成了相关必要动作,中断服务程序就不用再执行了,如果没有,就需要写入程序中执行相关操作。1 中断处理过程1.1 前提:产生&检测 中断中断处理的前提,是产生中断,然后检测到中断,否则怎么处理呢?对于中断的产生,分为内部和外部,内部就是指令执行产生的,

2021-04-18 21:38:55 519

原创 x86异常处理与中断机制(2)中断向量表

补充:事件不仅包含中断和异常,还包含系统调用,这个属于用户主动请求的事件。上一节,只有一个溢出异常,那么,如果很多异常、中断呢?(中断向量表)另外,之前0号地址只能存储两条指令,如果需要更多指令怎么办?(地址的位置以及对应程序大小应该更灵活)注意,中断服务程序包含(保存现场,调用处理方法(主体),恢复现场)我们在遇到中断之后,需要执行的步骤,我们简化一下CPU做一些硬件处理工作(识别中断源,关中断,当前指令(或下一条指令)地址压栈,FLAGS寄存器压栈)找到处理中断的程序地址(这里的程序是中

2021-04-18 21:06:00 1975

原创 【C language】动态数组的创建和使用

在C语言中,使用malloc函数创建动态数组,使用一个指针指向它,使用下标进行访问。unsigned long *a = (unsigned long *)malloc(2 * sizeof(int));a[0] = 1000;a[1] = 2000;printf("%d %d\n", a[0], a[1]);free(a);上述例子,申请了两个int空间的动态数组,使用int *指向它,使用a[0],a[1]访问,这与数组访问一样,区别就是动态申请内存在堆空间,还需要使用free进行释放,

2021-04-18 15:11:02 1398

原创 【C language】typedef的使用:结构体、基本数据类型、数组

typedef基本数据类型typedef int a;a abc;后面的a abc就等价于int abctypedef结构体typedef struct a { int a; int b;} abc;abc aaa;对于上述,abc aaa;就等价于struct a aaa;简而言之,typedef的本质,就是构建等价关系。第一个例子,让a和int等价;第二个例子,让abc和struct a { int a; int b; };等价;这样一来,简化书写。不过也有特别的

2021-04-18 14:53:40 552

原创 x86异常处理与中断机制(1)概述中断的来源和处理方式

参考《计算机组成》(北京大学 MOOC)1 异常与中断的来源(为什么需要中断)首先,说明一下异常和中断这两个概念。它们两个唯一的区别,就是,没有什么区别。只是不同的地方不同的时间不同的人的叫法不一样,所以,不用太在意区别了,以后我们统称中断。1.1 什么时候发生中断一句话!CPU正在干活的时候,有事情打扰它,不让他继续正常工作了,需要去处理其他事情。那么是什么事情呢?这个事情分成两类内部的事情外部的事情1.1.1 内部的事情简而言之,就是执行指令的时候,出现状况了。出现什么状况了

2021-04-18 14:39:52 1053

原创 IA-32 Architecture: the function of segment regitster(CS DS SS ES)

对于IA-32架构,与8086不同,段寄存器不再是像以前一样,直接作为段基址,因为32位的寄存器直接就可以表示4GB大小,不需要再偏移,因此段寄存器的含义也发生了相应的变化。在IA-32架构里,段寄存器是间接给出段地址的。段寄存器作为选择子Selector,它就相当于一个指针,指向的地方是段描述符 Segment Descriptor,这个段描述符存储的是段基址,然后还有其他的寄存器和立即数提供偏移地址。而这一点,适用的是32位系统的保护模式。...

2021-04-10 19:56:02 97

原创 leetcode面试题 10.01. 合并排序的数组

直接排序直接使用Java已有的方法进行排序,这一招…大意了!这题简单,就是个基本的排序,后面难题,可能这只是一小步,内个时候直接用排序算法比较合适,这个不合适。。class Solution { public void merge(int[] A, int m, int[] B, int n) { for(int i = 0; i < n; i++){ A[m+i] = B[i]; } Arrays.sort(A.

2021-03-28 15:48:11 130

原创 Leetcode1512. 好数对的数目 & 抽出本质原型 & 利用范围条件

解法1:暴力枚举class Solution { public int numIdenticalPairs(int[] nums) { int count = 0; for(int i = 0;i < nums.length; i++){ for(int j = i + 1; j < nums.length; j++){ if(nums[i] == nums[j]) .

2021-03-26 14:23:18 144

gcc 4.3 ls232 龙芯杯比赛 《CPU设计实战》等MIPS交叉编译器

使用方式见龙芯杯比赛文档,或者链接:https://oscourse-tsinghua.gitbook.io/loongsoncsprj2020-manual/ucore/long-xin-bian-yi-huan-jing-pei-zhi

2022-01-29

x86架构Linux下的MIPS交叉编译工具链 mips-mti-elf-*

Codescape.GNU.Tools.Package.2017.10-05.for.MIPS.MTI.Bare.Metal.CentOS-5.x86_64

2021-07-23

cs3410component_MIPS.jar

Logisim的CS3410MIPS组件,是一款扩展包,来自加利福尼亚大学官网,能够帮助学生更高效地完成CPU的设计而不必关注ALU,存储器等器件的设计,是自顶而下学习的最佳途径

2020-08-13

logisim-evolution.jar

Logisim扩展版,支持FPGA,VHDL等,来自于加利福尼亚大学官网,可以配合MOOC中华中科技大学的课程进行CPU和存储器的设计等

2020-08-13

MIPS Architecture and Assembly Language Overview

本文章类似于一本小的手册,MIPS架构及汇编语言概述,帮助快速掌握MIPS汇编语言,为英文原版文章,为计算机组成原理设计MIPS指令集CPU提供极大帮助,实现MIPS快速入门。

2020-05-18

DOSBox的debug/edit/link/masm文件

使用DOSBox进行汇编语言实验的必要文件,包含 编译/链接/运行/调试 文件,帮助汇编语言学习者更好完成实验内容。

2020-03-15

空空如也

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

TA关注的人

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